我正在使用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"));
}
我正在使用此代码等待地图完全加载
答案 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
。