“ [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
答案 0 :(得分:1)
此错误消息...
[PHPUnit\Framework\Exception] Undefined index: ELEMENT
...表示 ChromeDriver 的click()
通过 Codeception 出现问题。
根据讨论comment中@reinholdfuereder的facebook/php-webdriver - W3C WebDriver protocol support:
Undefined index: ELEMENT
操作中,waitForElement()
导致Codeception(v2.5.6)测试失败。waitForElement()
操作成功完成,随后似乎也成功的click()
操作成功执行,但在waitForElementNotVisible()
操作中失败了。click()
操作被转换为clickElement
WebDriver命令,而 ChromeDriver v75 似乎不再支持该命令。如果您使用的是 ChromeDriver v75.x 和 Chromium v75.x ,并且看到此错误,则需要传递一个附加的 chromeOptions w3c
设置为 true
。
您可以在以下位置找到一些详细的讨论:
答案 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
。