在使用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
我应该如何调用执行方法?
答案 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);