我尝试了等待ajax,也隐式等待。在隐式等待时,它会引发未找到元素的异常。
如何等待直到Web元素的计数被更改。
#1 楼
感谢您的回复。但这是我用来解决此问题的脚本public void waitUntilCountChanges() {
WebDriverWait wait = new WebDriverWait(getDriver(), 5);
wait.until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
int elementCount = driver.findElement(By.xpath("xxxx")).size();
if (elementCount > 1)
return true;
else
return false;
}
});
}
#2 楼
要添加到gomesr的答案中,您可能会发现自己需要在测试期间等待其他元素。轻松拥有可重用代码的一种方法是使用闭包(也称为匿名函数或lambda函数)创建微调功能,您可以在等待元素加载时调用它。微调器功能看起来像
public function spin ($lambda, $wait = 60) {
for ($i = 0; $i < $wait; $i++) {
try {
if ($lambda($this)) {
return true;
}
} catch (Exception $e) {
// do nothing
}
sleep(1);
}
$backtrace = debug_backtrace();
throw new Exception(
"Timeout thrown by " . $backtrace[1]['class'] . "::" . $backtrace[1]['function'] . "()\n" .
$backtrace[1]['file'] . ", line " . $backtrace[1]['line']
);
}
并调用该函数
$this->spin(function($context) {
return ($context->getSession()->getPage()->findById('example')->isVisible());
});
调用Spinner函数时,您会传递一个匿名函数,并带有要声明的逻辑,在此示例中,它正在等待ID为“ example”的元素可见。微调器还包括一个超时,如果在指定时间内(默认为60秒)未找到该元素,则将引发异常。
上面的示例代码来自http://docs.behat.org/cookbook/using_spin_functions.html
您还可以找到有关自旋函数的更多信息和另一个代码示例在http://sauceio.com/index.php/2011/04/how-to-lose-races-and-win-at-selenium/
#3 楼
您将必须执行手动循环,以等待计数等于X。请设置超时,以免无限期等待。就像这样:start_time=now
count=number of elements
while count < X:
count=number of elements
if now - start_time > timeout
exit loop
评论
感谢您的答复。但是在这种情况下,我似乎面临着一个综合问题。让我将其发布为其他问题。这样对用户可能会有帮助。
–阿吉玛尔
13-10-23在11:59