我有一个像结构一样的菜单,在菜单项上悬停一段时间后会打开一个子菜单。我在使用Selenium的确定性方法(=不使用Thread.Sleep)来测试此菜单时遇到问题。
Actions
构建器类(MoveToElement
)WebDriverWait.Until(d => subMenuWebElement.Displayed)
。如何将这两种方法结合起来?我还没有找到一种方法将WebDriverWait.Until调用添加到Actions对象。解决问题的推荐方法是什么?
我在SOF上找到了各种其他线程,但是,它们要么只解决上面两个要点中的一个,要么没有工作答案(例如Selenium WebDriver MoveToElement - hidden element, hover and toggleClass)。
希望有人可以提供帮助: - )
答案 0 :(得分:0)
您可以拆分操作构建器。没有必要将其作为一个动作。
构建并执行悬停操作。使用webdriver等待。然后构建并执行新操作
答案 1 :(得分:0)
尝试涉及JavascriptExecutor
第1步
String menu_selector="abracadabra";
((JavascriptExecutor)driver).executeScript("$(\'"+menu_selector+"\').hover();");
注意:如果支持jQuery,这个适合你。
第2步 然后让fluentWait等待子菜单出现:
String subMenu_selector="blablabla";
fluentWait(By.cssSelector(subMenu_selector));
public WebElement fluentWait(final By locator) {
/*
fluent wait impementation documentation:
http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/support/ui/FluentWait.html
*/
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(10, TimeUnit.SECONDS)
.pollingEvery(10, TimeUnit.MILLISECONDS)
// .ignoring(NoSuchElementException.class);
.ignoring(org.openqa.selenium.NoSuchElementException.class);
WebElement foo = wait.until(
new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(locator);
}
}
);
return foo;
}
;