所以,我忠实地遵循了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。
有什么想法吗?
问题显然是Facebook的php-webdriver与当前的Firefox不兼容。
These threads更详细地讨论了这个问题,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。
在我的情况下,唯一的解决方案是:
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