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

希望这对某人有所帮助。我花了将近一周的时间来解决这个问题。