Lov*_*ava 1 java selenium selenium-chromedriver selenium-webdriver
如果我的问题听起来很重要,我会提前道歉,我在QA和Selenium都很新.
我使用Java和Selenium编写测试,有时我需要等待Web元素可访问,下面是我以前使用的代码片段:
int counter = 0;
while (true) {
counter++;
boolean breakIt = false;
try {
WebElement element= driverChrome.findElement(By.xpath("bla bla"));
element.click();
breakIt = true;
} catch (Exception e) {
Thread.sleep(1000);
}
if (breakIt) {
break;
}
if (counter > 4) {
System.out.println("Failed");
tearDown();
System.exit(1);
}
}
Run Code Online (Sandbox Code Playgroud)
但现在在某处我看到了这个:
WebDriverWait wait = new WebDriverWait(driverChrome, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("bla bla"))).click();
Run Code Online (Sandbox Code Playgroud)
肯定第二个更短但我不知道它是否更好,换句话说,它们是不同的吗?如果是,怎么样?哪一个更好用于哪些目的?
您接受的答案是错误的.
什么WebDriverWait确实是粗略地说同样的事情,你的代码片段做什么:它轮询DOM定期检查你想让它检查的条件是否为真.如果它不是真的那么它会Thread.sleep用于你.(你可以通过阅读实现FluentWait来确定我在这里所说的内容,这是基于哪个WebDriverWait类,以及Sleeper因为FluentWait用于Sleeper.SYSTEM_SLEEPER在民意调查之间进入睡眠状态.)
与接受的答案断言相反("一旦元素被加载然后立即变得难以处理"),当您等待的条件变为真时,WebDriverWait将不会立即允许您与元素交互.如果WebDriverWait实例在条件成立时处于休眠状态,它将继续休眠直到其休眠间隔结束(默认为0.5秒),然后它将再次检查条件并在发现条件为真时立即返回.否则,除非你给它的超时已经过期,否则它将重新进入睡眠状态.
您自制的等待外观之间的区别在于WebDriverWait它WebDriverWait是可重用的,灵活的,并且旨在处理您的代码无法处理的一系列条件.或者换句话说,它更强大.特别是,它会让它不知道如何处理涓流而不是像代码那样隐藏它们的异常.我无法想象你的代码会更好.
| 归档时间: |
|
| 查看次数: |
561 次 |
| 最近记录: |