我正在使用Java中的Selenium FirefoxDriver开发一个测试单元。我想要一些帮助处理页面加载。我的问题是等待元素,但仍有超时。我已经尝试应用pageLoadTimeout
,implicitlyWait
但没有成功,有些方法会继续等待整页加载。我的代码预览:
(...)
FirefoxDriver driver= new FirefoxDriver(firefoxProfile);
driver.manage().timeouts().pageLoadTimeout(1, TimeUnit.MILLISECONDS);
driver.manage().timeouts().implicitlyWait(1, TimeUnit.MILLISECONDS);
try {
driver.get("http://mysite");
} catch (org.openqa.selenium.TimeoutException e) {
//after 1 milisecond get method timeouts
}
for (int i = 0; i < 5; i++) {//5 seconds wait
if (driver.findElements(By.id("wait_id")).size() == 0) { //findElements cause java to wait for full load
debug("not found");//never happens because 'if' condition waits for full load
driver.wait(1000);
} else {
debug("found");
break;
}
}
提前致谢。
答案 0 :(得分:1)
public static WebElement waitForElement(WebDriver driver, By by) {
WebElement element = null;
int counter = 0;
while (element == null) {
try {
Thread.sleep(500);
element = driver.findElement(by);
} catch (Exception e) {
e.printStackTrace();
}
if (counter > 119) {
System.out.println("System has timed out");
}
counter++;
}
return element;
答案 1 :(得分:0)
driver.get是一个阻塞调用,等待页面加载。
由于您将超时设置为1毫秒,因此会引发超时异常。
如果您在e.printStackTrace();
cacht block中放置org.openqa.selenium.TimeoutException
,就可以看到它。
将超时设置为-1。
答案 2 :(得分:0)
pageLoadTimeout()
方法仅适用于使用"unstable load strategy"运行的Firefox。因此,像这样运行FirefoxDriver
:
FirefoxProfile fp = new FirefoxProfile();
fp.setPreference("webdriver.load.strategy", "unstable");
WebDriver driver = new FirefoxDriver(fp);
请注意,它仅适用于Firefox,确实不稳定,并且可能会使您的其他一些测试失败。请谨慎使用。