【问题标题】:Script hangs because page loads too quickly?脚本挂起是因为页面加载太快?
【发布时间】:2013-01-01 11:06:13
【问题描述】:

在单击链接或元素导致页面转换的情况下,我发现 Robot Framework 或 Selenium Webdriver 存在问题。即使窗口成功处理了单击,脚本也会挂起并停止运行,就好像它正在尝试单击请求的元素/链接一样失败。手动刷新 Webdriver 窗口以重新加载页面会启动脚本并从那里恢复。

我唯一能想到的是,Selenium 或 Robot 执行命令与它能够侦听来自浏览器的 HTTP 响应之间存在延迟,而页面正在加载 before Selenium准备好听它了。这是在 Intranet 上运行的,因此页面加载时间非常快。我从未见过在 SauceLabs 虚拟机上运行相同脚本时出现此问题,因为我们和它们之间的隧道会增加很多延迟。

假设我的理论是正确的,我该怎么办(除了明显的慢速连接)?在 Selenium 中设置延迟只会减慢执行速度,并不会真正影响问题。

【问题讨论】:

    标签: selenium-webdriver robotframework


    【解决方案1】:

    你可以试试fluent wait...

      public static WebElement fluentWait(final By locator, RemoteWebDriver rwd){
      Wait<WebDriver> wait = new FluentWait<WebDriver>(rwd)
              .withTimeout(30, TimeUnit.SECONDS)
              .pollingEvery(2, TimeUnit.SECONDS)
              .ignoring(NoSuchElementException.class);
    
      WebElement foo = wait.until(
              new Function<WebDriver, WebElement>() {
                  public WebElement apply(WebDriver driver) {
                      return driver.findElement(locator);
                  }
              }
        );
        return  foo;              
        };
    

    这将每 2 秒轮询一次,最多等待 30 秒

    然后在您的测试中等待一个元素,例如 fluentWait(By.className("home"), driver); 在您可以单击或验证文本等之前

    【讨论】:

    • 我已经有能力在点击/验证之前等待元素出现等。这不是我遇到的问题。我认为我遇到的问题是,用 selenium 术语来说,click() 期望来自浏览器的响应,并且响应发生在它可以侦听之前。
    【解决方案2】:

    试试:

    Set Selenium Implicit Wait  60
    Set Browser Implicit Wait  60
    

    数字 60 是 selenium/浏览器默认等待的秒数。

    【讨论】:

      猜你喜欢
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多