PHPUnit-Selenium2:使用execute方法

时间:2016-12-07 11:13:17

标签: javascript selenium selenium-webdriver phpunit

在使用PhpUnit及其Selenium2扩展生成Acceptance测试时,我想在PHPUnit_Extensions_Selenium2TestCase类中使用 execute 方法来执行Javascript代码,以检查文档是否准备就绪。

如果我执行此测试:

$this->waitUntil(function (LoginTest $driver) {
    if ( $driver->execute( 'return document.readyState;' ) == 'complete' ) {
        return true;
    }
    return null;
}, 10000);

我收到以下错误:

InvalidArgumentException: The JSON parameters must be an array, or a NULL value in case they are not required.

然后,看到它实际上是在期待一个阵列,我试过了:

$this->waitUntil(function (LoginTest $driver) {
    if ( $driver->execute( ['return document.readyState;'] ) == 'complete' ) {
        return true;
    }
    return null;
}, 10000);

现在我收到了另一个错误:

PHPUnit_Extensions_Selenium2TestCase_WebDriverException: java.util.ArrayList cannot be cast to java.util.HashMap

我应该如何调用执行方法?

1 个答案:

答案 0 :(得分:0)

https://github.com/giorgiosironi/phpunit-selenium/blob/master/Tests/Selenium2TestCaseTest.php#L107中检查执行方法的测试用例后,我发现调用执行的正确方法是:

$this->waitUntil(function (LoginTest $driver) {
    if ( $driver->execute( [
            'script' => 'return document.readyState;',
            'args' => [] 
        ] ) == 'complete' ) {
        return true;
    }
    return null;
}, 3000);