java:睡眠直到网站完全加载

时间:2012-12-27 00:02:27

标签: java selenium web webdriver

我想用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);
   }
 }

你会如何解决这个问题?

2 个答案:

答案 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"));
    }});