Firefox Selenium测试有时会冻结

时间:2015-06-12 20:53:46

标签: firefox selenium selenium-webdriver selenium-chromedriver

我正在使用Selenium 2.46和Firefox 31.每当我的测试达到一个不存在web元素(或抛出异常)的程度时,我的测试会冻结,但是当我使用Chrome时它不会发生。只是为了让你知道我已经使用了不同版本的selenium-java和Firefox。请找到以下代码:

List<WebElement> divs = driverChrome.findElements(By.tagName("div"));
int i = 0;
while (true) {
    boolean breakIt = true;
    System.out
            .println("Waiting for map to load completely, thanks for your patience.");
    for (WebElement weDiv : divs) { 
        try {       
            if (weDiv.getText().equals("Loading")) {
                Thread.sleep(2000);
                breakIt = false;
                break;
            }
        } catch (Exception e) {
        }
    }
    if (breakIt) {
        break;
    } 
    driverChrome.manage().timeouts()
            .implicitlyWait(5, TimeUnit.SECONDS);

    divs = driverChrome.findElements(By.tagName("div"));

}

我正在使用此代码等待地图完全加载

1 个答案:

答案 0 :(得分:0)

您的测试冻结的最可能原因是while(true)循环。如果文字&#34;正在加载&#34;没有显示,仍然可以有一个(不可见的)元素与该文本。

无论如何,我绝不会在没有超时的情况下使用等待机制。我总是尝试使用框架提供的方法。

WebDriver提供explicit and implicit wait mechanisms。这个单线可以取代你的整个列表(等待最多60秒,每两秒轮询一次):

new WebDriverWait(driver, 60000L, 2000L).until(ExpectedConditions.invisibilityOfElementWithText(By.tagName("div"), "Loading"));

希望它有所帮助。如果没有,请查看ExpectedConditions的其他方法或实施您自己的ExpectedCondition