【问题标题】:Can't make webdriver to wait for page to load无法让 webdriver 等待页面加载
【发布时间】:2018-08-13 07:43:00
【问题描述】:

首先,我熟悉并多次阅读如何在 Selenium 中使用隐式和显式等待。我试过了:

driver.manage().timeouts().implicitlyWait() 
driver.manage().timeouts().setScriptTimeout()
driver.manage().timeouts().pageLoadTimeout()

但它们都没有让浏览器等待。显式等待工作,但我不可能每次与元素交互(单击、搜索等)时都需要添加显式等待。你可以想象,我试图避免使用 Thread.sleep()。

我使用 Chromedriver 作为驱动监听器。

提前谢谢你。

编辑:

我也尝试了 JavascriptExecutor 但也不起作用。也许我的实现是错误的,或者是因为它是同一个页面。例如,我正在网站内执行搜索。搜索后相同的页面会重新加载,但驱动程序不会等待它加载结果。

这是执行器的代码,添加在名为 JobsPage 的页面中: 公共无效 checkPageIsReady() {

    JavascriptExecutor js = driver;

    if (js.executeScript("return document.readyState").toString().equals("complete")){
        System.out.println("Page Is loaded.");
        return;
    }

    for (int i=0; i<25; i++){
        try {
            Thread.sleep(1000);
        }catch (InterruptedException e) {}
        //To check page ready state.
        if (js.executeScript("return document.readyState").toString().equals("complete")){
            break;
        }
    }
}

我在没有加载到另一个名为 JobsTest 的类中的步骤之后调用它:

    JobsPage jobsPage = new JobsPage(driver);
    jobsPage.checkPageIsReady();
    jobsPage.searchById("44684");

【问题讨论】:

  • seleniumhq.org/docs/… -- 这就是你需要的。
  • 如果这没有帮助,您必须更明确地说明您要解决的方案。
  • 请仔细阅读How to Ask,尤其是如何提供minimal reproducible example
  • 嗨 Ratmir,我已经阅读了 Selenium 的指南。正如我所提到的,显式等待工作,但我必须在我的测试的每个步骤上添加一个显式等待,每次我与元素交互时,从我的角度来看,这似乎并不有效。我正在寻找一种方法来为我的所有步骤应用“等待页面加载”。

标签: selenium selenium-webdriver automation webdriver selenium-chromedriver


【解决方案1】:

我尝试了两种方法:

拳头
创建网络驱动实例后设置隐式等待:driver.manage().timeouts().implicitlyWait()

After navigate to that page call following method:
new WebDriverWait(driver, MyDefaultTimeout).Until(
    d => ((IJavaScriptExecutor) d).ExecuteScript("return document.readyState").Equals("complete"));

**Second one:**

WebDriverWait wait = new WebDriverWait(driver, 20);
By itemonnextpage= By.xpath("//div[.='itemonnextpage']");

// get the "itemonnextpage" element
WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(itemonnextpage));

【讨论】:

  • 嗨 Shiv,正如我所提到的,显式等待工作(你的第二种方式),但我必须在测试的每个步骤上添加一个显式等待,每次我与元素交互时,从我的角度来看这似乎没有效率。我也尝试了 javascript 执行程序,但不起作用。也许我的实现是错误的,或者是因为它是同一个页面。例如,我正在网站内执行搜索。搜索后页面会重新加载,但驱动程序不会等待它加载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
  • 2012-07-07
  • 2014-05-20
  • 2012-07-12
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多