Selenium WebDriver为Click操作抛出一个错误,但Click实际上是成功的

使用Selenium和Google Chrome进行合成浏览器testing时,我们会在特定网站上间歇性地收到Selenium错误(请参阅下文)。 stream程是:

  1. 加载起始页面
  2. input一个search词
  3. 截图
  4. 点击searchbutton
  5. 截取结果的截图

错误发生在点击操作(步骤4),但最终的屏幕截图(步骤5)与此相矛盾,并显示search已启动(只能通过点击 – 某种forms的自动search没有在网站上实现)和返回结果。

错误:

Curl error thrown for http POST to /session/a4ec9662-1841-4809-9680-caf532b243b7/element/2/click Operation timed out after 30001 milliseconds with 0 bytes received 

堆栈:

  • selenium/铬docker集装箱: selenium/standalone-chrome:3.0.1-germanium
  • Facebook的PHP WebDriver: 请参阅GitHub
  • Docker PHP: 参见GitHub

我已经find了另外一个关于这个的post,build议将这个环境variables设置为DBUS_SESSION_BUS_ADDRESS=/dev/null容器: DBUS_SESSION_BUS_ADDRESS=/dev/null ,但是这不起作用。

我们如何从代码pipe理容器:

 $Docker = new Docker(); $Manager = $Docker->getContainerManager(); $Container = $Manager->find($container_name); if ($Container) { if ($Container->getState()->getRunning()) { // Restart container based on some logic around runtime and usage } else { $Manager->start($Container->getId()); } } 

我们如何处理“点击”操作:

 $Element = $this->WebDriverSession->findElement(By::cssSelector($css_selector)); if ($Element->isDisplayed()) { $Element->click(); } 

编辑:

我已经将我们的Selenium容器升级到了3.4.0-einsteinium ,我仍然看到问题。

我们一直有一些目标网站没有加载第一次和selenium抛出这个错误的问题…

 Curl error thrown for http POST to /session/cd18695c-bf88-482f-998e-4d8039c22359/url 

我们通过捕获错误并在放弃之前重试x次来解决这个问题。 这个更新还没有解决这个问题。

docker-selenium问题163中报告了同样的错误,似乎与selenium单独有关。
这就是为什么现在(2017年8月)是SeleniumHQ/selenium问题4384 (现在是2017年10月closures,作为“性能问题”)。

在Docker-selenium问题20 (2015)中也看到了这个错误,更多关于Chrome崩溃的信息:

  • 以特权模式启动:

     docker run --privileged 
  • 修复小/ dev / shm大小

     docker exec $id sudo umount /dev/shm docker exec $id sudo mount -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=512M tmpfs /dev/shm