【问题标题】:How to wait for page load to complete in Chrome browser如何在 Chrome 浏览器中等待页面加载完成
【发布时间】:2014-07-29 06:14:17
【问题描述】:

webdriver 中等待页面完全加载后再在 CHROME 浏览器中对页面执行操作的命令是什么?

PageLoadTimeOut 在 Chrome 中不等待页面加载完成,而在 firefox 中工作正常。

在 Chrome 中,如果页面上存在 webelement,则 webdriver 正在加载页面时对 webelement 执行操作。这会导致脚本随机失败,并出现异常“元素不可点击”。

如果有任何解决方案,请告诉我。

谢谢

【问题讨论】:

    标签: selenium-webdriver webdriver selenium-chromedriver


    【解决方案1】:

    您可以使用自定义等待方法使元素在页面上启用或可见。

    例如,使用以下代码创建自定义方法isElementEnable

    driver.findElement(locator).isEnabled();
    

    或者使用下面的代码来检查元素是否在页面上可见:

    driver.findElement(locator).isDisplayed();
    

    将您的元素 locator 作为输入参数传递给方法。

    或者使用隐式等待:

    driver.manage().timeouts().implicitlyWait(number_of_seconds, TimeUnit.SECONDS);
    

    希望这会有所帮助。

    【讨论】:

    • 我目前正在使用这些等待方法。但仍然在chrome中,webdriver不会等待指定的时间。
    【解决方案2】:

    您可以使用JavaScriptExecuter.executeScript 获取document.readyState,将其与complete 进行比较,作为WebDriverWait 的条件。像这样:

    WebDriverWait wait = new ...;
    wait.until(new ExpectedCondition<Boolean>(){
        public Boolean apply(WebDriver driver) {
            return (JavaScriptExecutor) driver).executeScript("return document.readyState").equals("complete");
        }
    });
    

    不幸的是,Chrome 如果页面上有警报,则会收到 UnhandledAlertException。Firefox 不会发生这种情况

    【讨论】:

      【解决方案3】:

      这是一个非常古老的问题,但任何有相同问题的人可能会发现这很有用:

      对于chromedriver,最好使用sleep方法:

      import time
      
      # some of your code
      
      time.sleep(2)
      # here your program will wait for two seconds
      
      # rest of your code
      

      您可以找到一个合适的时间跨度,以确保您的页面加载并将该时间作为参数传递。但是使用太大的时间会使程序变慢。

      【讨论】:

        猜你喜欢
        • 2013-05-19
        • 2017-04-17
        • 1970-01-01
        • 1970-01-01
        • 2018-10-11
        • 2011-10-13
        • 1970-01-01
        • 1970-01-01
        • 2016-12-23
        相关资源
        最近更新 更多