Selenium WebDriver为单击操作抛出错误,但单击实际上成功了

当使用Selenium和Google Chrome运行综合浏览器测试时,我们会在特定网站上间歇性地收到Selenium错误(见下文)。流程为:

  1. 加载起始页
  2. 输入搜索词
  3. 截取屏幕截图
  4. 点击搜索按钮
  5. 截取结果的屏幕截图

该错误发生在点击操作(步骤4)期间,但最终的屏幕截图(步骤5)与此相矛盾,并显示搜索已启动(只能通过单击 - 网站上未实现某种形式的自动搜索)并返回结果。

错误:

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

叠:

  • 硒/铬 Docker 容器:selenium/standalone-chrome:3.0.1-germanium
  • Facebook PHP WebDriver:参见 GitHub
  • Docker PHP:参见 GitHub

我发现另一篇关于此的帖子建议将此环境变量设置为docker容器:但是,这不起作用。DBUS_SESSION_BUS_ADDRESS=/dev/null

我们如何从代码中管理容器:

$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();
}

编辑:

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

我们一直遇到一些问题,一些目标网站没有第一次加载,硒抛出这个错误...

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

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


答案 1

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

该错误也出现在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
    

2017 年底更新:第 163 期提及

也许在 supervisord 中有一个错误,你可以尝试颠簸版本,甚至回到旧的版本。


答案 2

推荐