【问题标题】:Waiting of selenium webdriver until loading completed等待 selenium webdriver 直到加载完成
【发布时间】:2014-01-03 11:54:00
【问题描述】:

我在 Eclipse 中使用 selenium webdriver 和 TestNG。问题是页面在中途重新加载一些数据,并且重新加载的时间很灵活,这就是为什么我无法应用显式等待时间。我想制作 webdriver等到此重新加载完成。

我正在尝试通过此代码执行此操作...但它不起作用

public void waitForPageLoadingToComplete() throws Exception {
        ExpectedCondition<Boolean> expectation = new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver driver) {
                return ((JavascriptExecutor) driver).executeScript(
                        "return      document.readyState").equals("complete");
            }
        };
        Wait<WebDriver> wait = new WebDriverWait(driver, 30);
        wait.until(expectation);
    }

【问题讨论】:

标签: java selenium automation selenium-webdriver testng


【解决方案1】:

尝试下面的代码来处理页面加载/页面刷新超时

WebDriver driver = new FireFoxDriver();
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);

请使用最新版本的 chrome 驱动,因为旧版本的 chrome 驱动不处理页面等待。

【讨论】:

    【解决方案2】:

    无限期地等待不是一个好主意。网站的时间也是测试的一部分。如果可能,找出您正在测试的“页面”的服务水平协议。如果没有对网站进行速度测试(这是一种测试方法:http://tools.pingdom.com/fpt/)并使用您获得的平均时间。如果这也不起作用,最后一个选择是使用行业范围的标准。

    【讨论】:

      【解决方案3】:

      document.readyState() 没有反映正确的页面加载时间(例如,它不等待图像/脚本完全加载)。建议和测试选项等待页面上的元素(最好是您将在下一步测试中操作的元素)。正如其他人建议的那样,将 WebDriverWait 与“visibilityOf”、“presenceOfElement”或许多more 等预期条件方法一起使用,应该没问题。

      【讨论】:

        【解决方案4】:

        您应该使用WebDriverWait 并将超时设置为您可以等待的最长时间。一旦您发现页面加载了所需的数据(例如,通过检查某个元素的可见性),您就可以继续测试用例。

        请参阅selenium docs 中的示例。

        【讨论】:

        • 重新加载时间从 2 秒到 40 秒不等,所以我不能总是将等待时间超过 40 秒,我想让它在完成加载后立即等待
        • 这就是WebDriverWait的美妙之处;它只等待满足所需条件的必要时间,然后返回。
        【解决方案5】:
        driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-08-31
          • 2018-08-20
          • 1970-01-01
          • 2023-01-28
          • 2019-03-19
          • 2015-06-11
          • 2012-07-07
          相关资源
          最近更新 更多