首页 文章

无法使webdriver等待页面加载

提问于
浏览
-1

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

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

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

我正在使用Chromedriver作为司机听众 .

先感谢您 .

编辑:

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

这是执行者的代码,添加在名为JobsPage的页面中:public void 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");

1 回答

  • 0

    我试过两种方式:

    Fist one
    创建Web驱动程序实例后设置隐式等待: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));
    

相关问题