我正在使用FireFox WebDriver for Selenium。我有一个通过AJAX加载的窗口,由于这个原因我的测试不一致。
我可以在线程上延迟3秒,每次都可以使用。我正在做的就是检查一行的现状。
最好的方法是什么?
答案 0 :(得分:0)
据推测,您的Selenium测试应该模拟使用该网站的人,因此您所做的任何事情都可以规避人类的行为(坐下等待),这可能会导致错误的结果。在这样的情况下,我发现在AJAX加载(或失败)然后报告它时添加延迟没有问题。
答案 1 :(得分:0)
最好的方式(恕我直言)是用流利的等待。
无论如何,你有所需元素的定位器(xpaths或css选择器等),并将定位器传递给fluentWait函数,你将获得所需的web元素进行交互。
fluentWait
功能代码如下:
public WebElement fluentWait(final By locator){
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(
new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(locator);
}
}
);
return foo; } ;
重要的是要注意每个FluentWait实例定义等待条件的最大时间量,以及检查条件的频率。此外,用户可以将等待配置为在等待时忽略特定类型的异常,例如在页面上搜索元素时的NoSuchElementExceptions。(c)selenium API文档
所以你可以设置
.pollingEvery(1,TimeUnit.SECONDS)
并且在此间隔期间将验证您的AJAX是否已返回。
一些添加有关流利等待的信息,您可以阅读here
假设
String cssLocator=...blablabla.. // is the css of the table row
你传递给函数:
WebElement firstRow= fluentWait(By.cssSelector(cssLocator));
以这种方式获得你桌子的第一行。
希望现在你明白了这一点)