我使用Selenium Chrome驱动程序在各种网站环境中运行一些测试,但是,当尝试使用悬停下拉菜单中的元素时,我似乎无法可靠地选择元素。这在我调试时有100%的时间可以工作,但是当我在没有连接调试器的情况下运行它时,它大约有2/3的时间失败。这是代码:
private void prepWindow(WebDriver driver, boolean isNightly, String toClick) {
WebDriverWait wait = new WebDriverWait(driver, 300);
try {
if (isNightly) {
WebElement nightlyPopup = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(BOWebElements.nightlyPopup)));
nightlyPopup.click();
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Nightly popup has changed names again.", "Error", JOptionPane.ERROR_MESSAGE);
}
WebElement user = wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Users")));
Actions action = new Actions(driver);
action.moveToElement(user).build().perform(); //Makes hover drop down appear
driver.findElement(By.id(toClick)).click(); //Should click element that is only visible when hover drop down is open
}
我还应该注意,上面的相同代码在没有在同事的计算机上使用调试器的情况下工作得很好,但不是我自己的。
我想使用XPath,但遗憾的是,下拉列表中的元素实际上并不是我必须悬停以打开下拉列表的链接的子项。如果我尝试使用XPath直接导航到元素,它会给我一个错误,说XPath不是有效的。这是一个潜在的XPath:
//html/body/#outTemplateId/#preambleFormId/#globalNavigation/#navBGC/#navBGCmainMM/ul/li/ul/table/tbody/tr/td/ul.ui-menu-list.ui-helper-reset/li.ui-menuitem.ui-widget.ui-corner-all/a#fleetUsersId2.ui-menuitem-link.ui-corner-all.submenu
如何使行为保持一致?
答案 0 :(得分:1)
将您的行动联系在一起,以更好地模拟用户将采取的行动:
action.moveToElement(user).moveToElement(driver.findElement(By.id(toClick))).click().build().perform();
查看此问题以获取更多详细信息: https://stackoverflow.com/a/17294390/3537915