4

我正在用 Java 中的 Selenium FirefoxDriver 开发一个测试单元。我需要一些帮助来处理页面加载。我的问题是在等待元素时仍然有超时。我已经尝试过申请pageLoadTimeoutimplicitlyWait但没有成功,一些方法继续等待整页加载。我的代码预览:

    (...)
    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;
            }
        }

提前致谢。

4

3 回答 3

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;
于 2013-01-21T19:55:43.380 回答
1

该方法仅适用于使用"unstable load strategy"pageLoadTimeout()运行的 Firefox 。因此,像这样运行:FirefoxDriver

FirefoxProfile fp = new FirefoxProfile();
fp.setPreference("webdriver.load.strategy", "unstable");
WebDriver driver = new FirefoxDriver(fp);

请注意,它仅在 Firefox 下有效,确实不稳定,并且可能会使您的其他一些测试失败。谨慎使用。

于 2012-06-12T00:58:07.653 回答
0

driver.get 是一个阻塞调用,等待页面加载。由于您将超时设置为 1 毫秒,因此会引发超时异常。e.printStackTrace();如果你在你的org.openqa.selenium.TimeoutExceptioncacht 块中放一个,你可以看到它。

将超时设置为 -1。

于 2012-06-11T07:42:04.213 回答