Codeception 中的 jQuery 未定义
jQuery in Codeception is undefined
我正在使用 Codeception 为依赖 jQuery 的应用编写验收测试。我让 WebDriver 打开 FireFox 并登录。 JavaScript 已启用,我可以执行 $I->executeJS('return document.getElementById("some-element")');
其中 return 元素。对于我来说,我根本无法访问 jQuery。我知道它已加载,因为页面上的 jQuery 插件正在运行。我需要和那个互动。
到目前为止,我已经尝试了两种方法。第一个是当 DOM 准备就绪时,我创建了一个带有 ID 的隐藏 div。然后在我的测试中,我这样做:
public function foo(AcceptanceTester $I) {
$I->waitForElement('#dom-ready');
$var = $I->executeJS('return jQuery.fn.jquery');
var_dump($var);
}
var_dump 应该 return jQuery 版本。 return 为空。
我也试过这个:
public function foo(AcceptanceTester $I) {
$I->wait(20); // Some really high number of seconds
$var = $I->executeJS("return window.jQuery != undefined && jQuery.active == 0");
var_dump($var);
}
那 var_dump 应该是真的。它总是错误的。我完全不知所措。我在这里没看到什么?
这是我的 acceptance.suite.yaml
文件
class_name: AcceptanceTester
modules:
enabled:
- WebDriver:
url: 'http://site.local/' # put your local url
browser: firefox
capabilities:
javascriptEnabled: true
handlesAlerts: true
webStorageEnabled: true
- \Helper\Acceptance
知道了!问题确实出在 Firefox,而不是 Selenium。感谢 Florent B 提出 geckodriver 可能是问题所在的想法。简短的回答是您至少需要 FF >= 48 才能访问 jQuery.
https://github.com/mozilla/geckodriver/issues/108
希望这对某人有所帮助。我花了将近一周的时间来解决这个问题。
我正在使用 Codeception 为依赖 jQuery 的应用编写验收测试。我让 WebDriver 打开 FireFox 并登录。 JavaScript 已启用,我可以执行 $I->executeJS('return document.getElementById("some-element")');
其中 return 元素。对于我来说,我根本无法访问 jQuery。我知道它已加载,因为页面上的 jQuery 插件正在运行。我需要和那个互动。
到目前为止,我已经尝试了两种方法。第一个是当 DOM 准备就绪时,我创建了一个带有 ID 的隐藏 div。然后在我的测试中,我这样做:
public function foo(AcceptanceTester $I) {
$I->waitForElement('#dom-ready');
$var = $I->executeJS('return jQuery.fn.jquery');
var_dump($var);
}
var_dump 应该 return jQuery 版本。 return 为空。
我也试过这个:
public function foo(AcceptanceTester $I) {
$I->wait(20); // Some really high number of seconds
$var = $I->executeJS("return window.jQuery != undefined && jQuery.active == 0");
var_dump($var);
}
那 var_dump 应该是真的。它总是错误的。我完全不知所措。我在这里没看到什么?
这是我的 acceptance.suite.yaml
文件
class_name: AcceptanceTester
modules:
enabled:
- WebDriver:
url: 'http://site.local/' # put your local url
browser: firefox
capabilities:
javascriptEnabled: true
handlesAlerts: true
webStorageEnabled: true
- \Helper\Acceptance
知道了!问题确实出在 Firefox,而不是 Selenium。感谢 Florent B 提出 geckodriver 可能是问题所在的想法。简短的回答是您至少需要 FF >= 48 才能访问 jQuery.
https://github.com/mozilla/geckodriver/issues/108
希望这对某人有所帮助。我花了将近一周的时间来解决这个问题。