编解码未定义索引:ELEMENT错误

时间:2019-06-12 07:24:00

标签: php selenium webdriver codeception

我正在使用Codeception进行验收测试。在我的本地PC上,使用硒和chromedriver运行测试没有问题。直到1周,在我的git上也可以正常工作,但是现在,出现此错误。

“ [PHPUnit \ Framework \ Exception]未定义的索引:ELEMENT”

本地运行正常,没有错误。

我已经搜索了此错误并找到了一个提示,我必须使用“ -enablepassthrough false”来启动硒。但这并不能真正起作用。

在使用相同设置的1周之前,它可以正常工作。

这是我的accept.suite.yml:

actor: AcceptanceTester
modules:
    enabled:
        - WebDriver:
            url: 'https://website.com' 
            host: 'selenium__standalone-chrome'
            port: 4444
            browser: chrome 
            window_size: 1920x1080 

3 个答案:

答案 0 :(得分:1)

此错误消息...

[PHPUnit\Framework\Exception] Undefined index: ELEMENT

...表示 ChromeDriver click()通过 Codeception 出现问题。

根据讨论comment中@reinholdfuereder的facebook/php-webdriver - W3C WebDriver protocol support

  • 使用默认的W3C协议时,在Undefined index: ELEMENT操作中,waitForElement()导致Codeception(v2.5.6)测试失败。
  • 在使用旧版协议时,测试对于waitForElement()操作成功完成,随后似乎也成功的click()操作成功执行,但在waitForElementNotVisible()操作中失败了。
  • Codeception的click()操作被转换为clickElement WebDriver命令,而 ChromeDriver v75 似乎不再支持该命令。

解决方案

如果您使用的是 ChromeDriver v75.x Chromium v​​75.x ,并且看到此错误,则需要传递一个附加的 chromeOptions w3c 设置为 true


Outro

您可以在以下位置找到一些详细的讨论:

答案 1 :(得分:1)

对于Chrome / ChromeDriver v79,在w3c中将 false 设置为 acceptance.suite.yml 有助于:

modules:
  enabled:
    - WebDriver:
        capabilities:
          chromeOptions:
            w3c: false

答案 2 :(得分:0)

正如@DebanjanB所解释的那样,设置所述选项是一种解决方案,这就是通过将facebook / php-webdriver更新为版本> = 1.7.0而得到的

我认为您的应用程序更可靠的解决方案(或习惯)是使用特定的docker映像。

您的Yaml让我猜测您正在使用selenium/standalone-chrome泊坞窗映像。他们使用最新版本(3.141.59-palladium将包含的Chrome版本从74更新为75(请参阅:https://github.com/SeleniumHQ/docker-selenium/releases)。

您的本地计算机可能仍在运行旧版本的Chrome 74,因此那里没有问题。但是每当您重建docker机器时(例如在使用某些CI环境时),您都会获得最新版本。在这种情况下,将使用新的Chrome版本。哪个“迫使”您还要使用新的facebook / php-webdriver升级php机器。

我建议指定图像的版本,以防止出现这些不必要的副作用,例如

image: selenium/standalone-chrome:3.141.59-oxygen

,或者,如果您已经使它与Chrome 75一起运行,请3.141.59-palladium