我想用selenium打开一个网站并通过xpath提取一些文本。它工作但我只能等待几秒钟直到整个网站加载才能得到文本,但检查网站是否满载会更好。我想我应该检查任何后台连接(ajax调用,GET,POST或其他),最好的方法是什么?目前我正试图在while循环中提取文本(丑陋的解决方案):
WebDriver driver = new FirefoxDriver();
driver.get("http://www.website.com");
// Try to get text
while (true) {
try {
WebElement findElement = driver.findElement(By.xpath("expression-here"));
System.out.println(findElement.getText());
break;
// If there is no text sleep one second and try again
} catch (org.openqa.selenium.NoSuchElementException e) {
System.out.println("Waiting...");
Thread.sleep(1000);
}
}
你会如何解决这个问题?
答案 0 :(得分:3)
Selenium已经为此做了超时。
请看这里:http://seleniumhq.org/docs/04_webdriver_advanced.jsp
我用以下方法解决了这个问题:
webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
答案 1 :(得分:2)
更喜欢明确的等待:
1)更具可读性
2)长期使用这些
3)如果你知道元素不存在(你的测试是验证它)并且不需要轮询10秒钟怎么办?隐含的你现在正在浪费时间。
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
.until(new ExpectedCondition<WebElement>(){
@Override
public WebElement apply(WebDriver d) {
return d.findElement(By.id("myDynamicElement"));
}});