php Codeception 不那么快开始:[PHPUnit\Framework\Exception] 未定义索引:ELEMENT
Posted
技术标签:
【中文标题】php Codeception 不那么快开始:[PHPUnit\\Framework\\Exception] 未定义索引:ELEMENT【英文标题】:php Codeception not-so-quick start: [PHPUnit\Framework\Exception] Undefined index: ELEMENTphp Codeception 不那么快开始:[PHPUnit\Framework\Exception] 未定义索引:ELEMENT 【发布时间】:2018-04-05 10:03:51 【问题描述】:所以,我忠实地遵循了 Codeception Quick Start instructions。我使用 phpBrowser 运行第一个示例测试...
# Codeception Test Suite Configuration
#
# [further comments omitted]
#
actor: AcceptanceTester
modules:
enabled:
- PhpBrowser:
url: 'http://office.localhost/'
browser: 'firefox'
- \Helper\Acceptance
和测试:
<?php
class FirstCest
public function frontpageWorks(AcceptanceTester $I)
$I->amOnPage('/');
$I->see('We hope you enjoy it');
一切都很好。
然后我把配置改成这样:
actor: AcceptanceTester
modules:
enabled:
- WebDriver:
url: 'http://office.localhost/'
browser: 'firefox'
- \Helper\Acceptance
按照说明,我已经安装并启动并运行了 Selenium,然后我们就走了......
1) FirstCest: Frontpage works
Test tests/acceptance/FirstCest.php:frontpageWorks
[PHPUnit\Framework\Exception] Undefined index: ELEMENT
Scenario Steps:
2. $I->see("InterpretersOffice") at tests/acceptance/FirstCest.php:22
1. $I->amOnPage("/") at tests/acceptance/FirstCest.php:21
#1 /opt/www/court-interpreters-office/vendor/facebook/webdriver/lib/Remote/RemoteWebDriver.php:198
#2 Codeception\Module\WebDriver->see
#3 /opt/www/court-interpreters-office/tests/_support/_generated/AcceptanceTesterActions.php:363
#4 /opt/www/court-interpreters-office/tests/acceptance/FirstCest.php:22
#5 FirstCest->frontpageWorks
Selenium 正在驱动 Firefox,页面已加载,$I
想要 see()
的内容在那里,所以这不是问题。我已经在源头上戳了一下,但还没有弄清楚。我尝试将 $I->see()
更改为 $I->seeInSource()
并发现确实有效,FWIW。
有什么想法吗?
【问题讨论】:
当前版本的 Firefox 似乎与 facebook/webdriver 不兼容,因为 facebook/webdriver 尚未实现新协议。 你得到的错误是由facebook/webdriver代码中的错误处理不充分直接引起的:github.com/facebook/php-webdriver/blob/1.4.1/lib/Remote/…欢迎你做一些调试,看看那里实际发生了什么。 github.com/facebook/php-webdriver/issues/468 先做简单的事。只需使用 Chrome 而不是 Firefox。 phptest.club/t/does-anyone-set-up-selenium-3-and-codeception/… 似乎暗示“只使用 Chrome 而不是 Firefox”是目前唯一可用的解决方案。仅供参考,我确实进行了一些调试,检查了github.com/facebook/php-webdriver/blob/1.4.1/lib/Remote/… 发生的情况,而且——毫不奇怪——index 'ELEMENT' 确实是未定义的。 【参考方案1】:问题显然是 Facebook 的 php-webdriver 与当前的 Firefox 不兼容。
Thesethreads 更详细地讨论该问题,php-webdriver issue #469 跟踪添加完整的 W3C WebDriver 支持(这将解决不兼容问题)。
一种解决方法是在启动 Selenium 时添加 -enablePassthrough false
参数。例如:
java -Dwebdriver.gecko.driver=./geckodriver -jar selenium-server-standalone-3.8.1.jar -enablePassThrough false
很遗憾,Selenium removed support for pass through mode in 3.9,所以你必须使用旧版本。
另一种解决方法是切换到 Chrome。
【讨论】:
我试过这个:java -jar selenium-server-standalone-3.11.0.jar -enablePassThrough false
并得到了this error。还有其他选择吗?
@Shad - 不幸的是,看起来 -enablePassThrough
在 Selenium 3.9 中已被删除。见github.com/SeleniumHQ/selenium/blob/master/java/CHANGELOG。【参考方案2】:
就我而言,唯一的解决方案是:
Install chromedriver in a path that is in $PATH (/usr/bin or /bin)
并在您的测试类中使用:
$capabilities = DesiredCapabilities::chrome()
它适用于执行 Selenium 标准方式:
java -jar selenium-server-standalone-3.14.0.jar
【讨论】:
【参考方案3】:我的 Ubuntu 版本有不同的情况。 18.x:
供应商文件已经存在多年,我必须 rm 供应商折叠并使用 php composer.phar require facebook/webdriver
为我的 PHP 库重建它。
selenium-server-standalone-x.jar 和 chromedriver 的版本不匹配。所以下载更多版本并尝试,最后你会得到一对工作。
【讨论】:
以上是关于php Codeception 不那么快开始:[PHPUnit\Framework\Exception] 未定义索引:ELEMENT的主要内容,如果未能解决你的问题,请参考以下文章
使用 PHP Codeception 验收测试检查源代码中的单次出现
如何在 Codeception\Util\Stub 中正确使用 atLeastOnce 方法?