Php Codeception未定义索引:元素错误

Php Codeception未定义索引:元素错误,php,selenium,webdriver,codeception,Php,Selenium,Webdriver,Codeception,我正在使用Codeception进行验收测试。在我的本地pc上,我可以用selenium和chromedriver运行测试。直到1周,它在我的git上也可以正常工作,但是现在,出现了这个错误 “[PHPUnit\Framework\Exception]未定义的索引:元素” 本地它工作正常,没有错误 我已经搜索了这个错误并找到了一个提示,我必须以“-enablepassthrough false”开头。但这并没有真正起作用 在使用相同设置的1周之前,它可以正常工作 这是我的承诺。suite.yml

我正在使用Codeception进行验收测试。在我的本地pc上,我可以用selenium和chromedriver运行测试。直到1周,它在我的git上也可以正常工作,但是现在,出现了这个错误

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

本地它工作正常,没有错误

我已经搜索了这个错误并找到了一个提示,我必须以“-enablepassthrough false”开头。但这并没有真正起作用

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

这是我的承诺。suite.yml:

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

[PHPUnit\Framework\Exception] Undefined index: ELEMENT
…意味着ChromeDriver
点击()
通过Codeception出现问题

根据讨论中的@reinholdfuereder:

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

解决方案 如果您正在使用ChromeDriver v75.x和ChromeV75.x,并且看到此错误,则需要传递附加的chromeOptions
w3c
设置为
true


奥特罗 您可以在以下内容中找到一些详细的讨论:


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

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

你的yaml让我猜你在使用
selenium/standalone-chrome
docker图像。随着最新版本的发布(
3.141.59-pd
),他们将附带的Chrome版本从
74
更新为
75
(请参阅:)

您的本地计算机可能仍然运行Chrome74的旧版本,因此没有问题。但是,无论何时重建docker机器(例如,当使用某些CI环境时),您都会获得最新版本。在这种情况下,一个新的Chrome版本。这“迫使”您也使用新的facebook/php Web驱动程序升级php机器

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

image: selenium/standalone-chrome:3.141.59-oxygen

或者,如果您已经使用Chrome 75运行,则Chrome/ChromeDriver v79的
3.141.59-paradium
设置
w3c
acceptance.suite.yml
中帮助:

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

这是我在Mac和chrome上唯一的选择。