Selenium Can';t使webdriver等待页面加载

Selenium Can';t使webdriver等待页面加载,selenium,selenium-webdriver,automation,webdriver,selenium-chromedriver,Selenium,Selenium Webdriver,Automation,Webdriver,Selenium Chromedriver,首先,我熟悉并多次阅读了如何在Selenium中使用隐式和显式等待。我试过: driver.manage().timeouts().implicitlyWait() driver.manage().timeouts().setScriptTimeout() driver.manage().timeouts().pageLoadTimeout() 但没有一个能让浏览器等待。显式等待有效,但不可能每次与元素交互(单击、搜索等)时都需要添加显式等待。正如您所想象的,我正试图避免使用Thread.s

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

driver.manage().timeouts().implicitlyWait() 
driver.manage().timeouts().setScriptTimeout()
driver.manage().timeouts().pageLoadTimeout()
但没有一个能让浏览器等待。显式等待有效,但不可能每次与元素交互(单击、搜索等)时都需要添加显式等待。正如您所想象的,我正试图避免使用Thread.sleep()

我使用Chromedriver作为驱动程序侦听器

先谢谢你

编辑:

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

这是执行者代码,添加在名为JobsPage的页面中: 公共作废检查页已就绪(){


我尝试了两种方法:

第一个
创建web驱动程序实例后设置隐式等待:driver.manage().timeout().implicitlyWait()


--这是您需要的。如果这没有帮助,您必须更明确地说明您试图解决的场景。请通读一遍,特别是如何提供。嗨,Ratmir,我已经阅读了Selenium的指南。正如我提到的,显式等待是有效的,但每次交互时,我必须在测试的每个步骤上添加显式等待对于一个元素,从我的角度来看,这似乎不是很有效。我正在寻找一种方法来为我的所有步骤应用“等待页面加载”。Hi Shiv,正如我提到的,显式等待工作(你的第二种方法),但我必须在测试的每个步骤上添加显式等待,每次我与元素交互时,从我的角度来看,这似乎不是很有效。我也尝试了javascript执行器,但不起作用。可能是我的实现错误,也可能是因为它是同一个页面。例如,我正在网站内执行搜索。Th搜索后重新加载e页面,但驱动程序不会等待加载。
    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;
        }
    }
}
    JobsPage jobsPage = new JobsPage(driver);
    jobsPage.checkPageIsReady();
    jobsPage.searchById("44684");
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));