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

yip*_*yay 17 php selenium selenium-chromedriver selenium-webdriver docker

使用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
Run Code Online (Sandbox Code Playgroud)

堆:

我找到了另一个关于这个建议将此环境变量设置为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());
    }
}
Run Code Online (Sandbox Code Playgroud)

我们如何处理"点击"操作:

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

编辑:

我已将Selenium容器升级为3.4.0-einsteinium仍然存在问题.

我们一直有一些目标网站没有第一次加载而Selenium抛出此错误的问题...

Curl error thrown for http POST to /session/cd18695c-bf88-482f-998e-4d8039c22359/url
Run Code Online (Sandbox Code Playgroud)

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

Von*_*onC 3

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

该错误也出现在docker-selenium Issue 20 (2015) 中,其中包含以下评论,更多关于 Chrome 崩溃的信息:


2017 年底更新:第 163 期提及

也许supervisord有一个bug,你可以尝试升级版本,甚至回到旧版本。