Java SeleniumWebDriver中的无限等待
我实际上有三个问题:Java SeleniumWebDriver中的无限等待,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我实际上有三个问题: SeleniumWebDriver如何实现这一点 driver.manage().timeout().pageLoadTimeout(-1,TimeUnit.SECONDS) 因为我们不能给无限睡眠的线程一个负值 我做了一个这样的无限睡眠代码 有没有更好的方法来实现无限等待 我使用driver.manage()。我所做的只是在页面尝试加载时断开网络连接,但我得到了一个意外的结果,经过一段时间后,驱动程序完全启动,但它不应该完全启动浏览器,它应该无限等待 我们在Seleniu
driver.manage().timeout().pageLoadTimeout(-1,TimeUnit.SECONDS)
driver.manage()。我所做的只是在页面尝试加载时断开网络连接,但我得到了一个意外的结果,经过一段时间后,驱动程序完全启动,但它不应该完全启动浏览器,它应该无限等待
/**
* Sets the amount of time to wait for a page load to complete before throwing an error.
* If the timeout is negative, page loads can be indefinite.
*
* @param time The timeout value.
* @param unit The unit of time.
* @return A Timeouts interface.
*/
Timeouts pageLoadTimeout(long time, TimeUnit unit);
我建议您添加自己的
findElement()
方法,而不是试图欺骗Selenium
免责声明:
我衷心建议你不要这样做。等待是有原因的。如果您有一个无限的等待,那么如果您在出现问题时不手动干预,您的测试将永远运行。相反,我建议将其设置为一个非常高的数字,但不要无限大
你可以这样做:
WebElement findElement(By by) {
int attempts = 0;
while (attempts > 300)
try {
return driver.findElement(by);
} catch (Exception e) {
Thread.sleep(500);
attempts++;
}
}
}
这里没有必要有无限循环
再一次,我不建议做以上的事情!我只是提供给你这个解决方案,因为这是你明确要求的
你可以做的另一件事是,如果你真的想设置一个大的等待:
driver.manage().timeouts().pageLoadTimeout(300, TimeUnit.SECONDS)
那是300秒。。。即使对我来说,这也是非常令人讨厌的,不应该放进去。网页加载不应花费300秒。如果确实如此,那么您还需要修复一些其他问题(
;)代码>您好,如果您创建了等待方法并将其保留在项目中,您可以在任何时间和任何地方使用该等待方法,这是一种自定义方法
private static WebElement waitForElement(By locator,int timeout)
{
WebElement element=new WebDriverWait(driver,timeout).until(ExpectedConditions.presenceOfElementLocated(locator));
return element;
}
例如,如果您想要等待元素id,您可以按如下所示行代码
**waitForElement(By.id(""),20);**
这里是20毫秒,你可以在这里使用任何时间和webelement@谢谢你的帮助实际上这是因为我知道它不应该在真实场景中使用。我只是尝试深入了解selenium webdriver。这就是它和java。顺便说一句,谢谢你的评论。
**waitForElement(By.id(""),20);**