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

标签 php selenium docker selenium-webdriver selenium-chromedriver

在使用 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

堆栈:

  • Selenium/Chrome Docker 容器:selenium/standalone-chrome:3.0.1-germanium
  • Facebook PHP WebDriver:see on GitHub
  • Docker PHP: see on 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();
}

编辑:

我已将 Selenium 容器升级到 3.4.0-einsteinium,但仍然遇到问题。

我们总是遇到一些目标网站没有第一次加载和 Selenium 抛出此错误的问题...

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

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

最佳答案

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

该错误也出现在 docker-selenium issue 20 中。 (2015) 与 this comment ,更多关于 Chrome 崩溃的信息:

  • Started in privileged mode:

    docker run --privileged
    
  • Fix small /dev/shm size

    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 年底更新:issue 163 mentions

可能supervisord有bug,可以试试bump the version or even go back to an older one .

关于php - Selenium WebDriver 为 Click 操作抛出错误,但 Click 实际上是成功的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45632739/

相关文章:

php - 使用 PHP 变量将 HTML 写入 PDF 文件?

php - 从请求填充实体的更好方法?

python-3.x - 无法使用 Selenium/Splinter 保存和重新加载 Gmail Cookie

xpath - Selenium findByXpath 中的运算符不起作用

python - ImportError:libgthread-2.0.so.0:无法打开共享对象文件:使用Docker容器导入cv2时没有此类文件或目录

node.js - Node.js child_process.exec “/bin/sh: 1: docker: not found”错误

javascript - 仅当监听器存在时才发布消息?

php - INNER JOIN SQL/PHP - 需要单行且列上有数组

google-chrome - Chrome 扩展测试

docker - 如何从 docker run 命令向主管传递环境变量