gpt4 book ai didi

java - 鼠标悬停并随后单击菜单项

转载 作者:搜寻专家 更新时间:2023-11-01 03:53:14 26 4
gpt4 key购买 nike

在 headless 模式下使用 selenium web-driver API,我试图在菜单项上执行鼠标悬停;这样所有的子菜单项都会显示出来。之后,我单击其中一个子菜单项。以下是代码片段:

Actions actions = new Actions(driver);
WebDriverWait wait = new WebDriverWait(driver, 20);

//Waiting for menu item to be clickable
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(menu_item)));
WebElement firstLink = driver.findElement(By.cssSelector(menu_item));
//Hovering over the menu item
actions.moveToElement(firstLink).build().perform();
//Waiting for the sub-menu item to be clickable - ERRORS OUT HERE
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(submenu_item)));
//Getting the second link
WebElement secondLink = driver.findElement(By.cssSelector(submenu_item));
//Click on sub menu
actions.moveToElement(secondLink).click().build().perform();

但是测试超时说找不到子菜单项。

我已经验证以上内容与 Firefox 驱动程序完美配合。此外,CSS 选择器是正确的。

PhantomJs 和鼠标悬停操作是否存在任何已知问题 - 这可能解释了为什么代码无法与 PhantomJs 驱动程序一起运行。如果是这样,是否有任何解决方法。

此外,是否有更好的方法对 API 进行排序以模拟鼠标悬停然后单击操作?

(注意:我也尝试过链接操作,如 How to perform mouseover function in Selenium WebDriver using Java? 中所述,但没有帮助)

最佳答案

尝试使用非原生 JavascriptExecutor:

public void mouseHoverJScript(WebElement HoverElement) {
String mouseOverScript = "if(document.createEvent){var evObj = document.createEvent('MouseEvents');evObj.initEvent('mouseover', true, false); arguments[0].dispatchEvent(evObj);} else if(document.createEventObject) { arguments[0].fireEvent('onmouseover');}";
((JavascriptExecutor) driver).executeScript(mouseOverScript,
HoverElement);
}

关于java - 鼠标悬停并随后单击菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18246230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com