php Codeception不那么快开始:[PHPUnit \ Framework \ Exception]未定义的索引:ELEMENT

时间:2017-10-24 14:36:36

标签: php selenium-webdriver phpunit codeception

所以,我忠实地遵循了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。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

问题显然是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。

答案 1 :(得分:0)

在我的情况下,唯一的解决方案是:

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

答案 2 :(得分:0)

我的Ubuntu版本有不同的情况。 18.x:

  1. 供应商文件已经有好几年了,我必须将供应商折叠起来并用php composer.phar require facebook/webdriver来为我的PHP库重建它。

  2. selenium-server-standalone-x.jar和chromedriver的版本不匹配。因此,下载更多版本并尝试,最终您将获得一对工作。