Selenium webdriver 脚本挂起是因为页面加载太快?

Selenium webdriver 脚本挂起是因为页面加载太快?,selenium-webdriver,robotframework,Selenium Webdriver,Robotframework,我发现Robot框架或Selenium Webdriver在点击链接或元素导致页面转换的情况下存在问题。脚本挂起并停止运行,就好像它试图单击请求的元素/链接失败一样,即使窗口成功地处理了单击操作。手动刷新Webdriver窗口以重新加载页面跳转将启动脚本并从那里继续 我唯一能想到的是,从Selenium或Robot执行命令到它能够侦听来自浏览器的HTTP响应以及在Selenium准备侦听之前加载页面之间存在延迟。这是在内部网上运行的,因此页面加载时间非常快。我从未见过在SauceLabs虚拟机上

我发现Robot框架或Selenium Webdriver在点击链接或元素导致页面转换的情况下存在问题。脚本挂起并停止运行,就好像它试图单击请求的元素/链接失败一样,即使窗口成功地处理了单击操作。手动刷新Webdriver窗口以重新加载页面跳转将启动脚本并从那里继续

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


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

你可以试试看

  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;              
    };
公共静态WebElement fluentWait(最终由定位器、RemoteWebDriver rwd确定){
等待等待=新建FluentWait(rwd)
.带超时(30,时间单位。秒)
.轮询间隔(2,时间单位。秒)
.忽略(NoSuchElementException.class);
WebElement foo=wait.until(
新函数(){
公共WebElement应用(WebDriver){
返回驱动程序findElement(定位器);
}
}
);
返回foo;
};
这将每2秒轮询一次,最多等待30秒

然后在测试中等待一个元素,例如fluentWait(By.className(“home”),driver); 在单击或验证文本等之前,请尝试:

Set Selenium Implicit Wait  60
Set Browser Implicit Wait  60

默认情况下,对于selenium/browser,数字60是等待的秒数。

我已经能够在单击/验证之前等待元素出现。这不是我遇到的问题。我想我遇到的问题是,在selenium术语中,click()需要浏览器的响应,而响应发生在它可以侦听之前。