2016-11-03 4 views
3

jQuery를 사용하는 앱에 대한 수용 테스트를 작성하는 데 Codeception을 사용하고 있습니다. WebDriver에서 FireFox를 열고 로그인하십시오. JavaScript가 활성화되어 있으며 요소를 반환하는 $I->executeJS('return document.getElementById("some-element")');을 수행 할 수 있습니다. 나에게는 jQuery에 전혀 액세스 할 수 없다. 페이지의 jQuery 플러그인이 작동하기 때문에로드 된 것을 압니다. 나는 그 때와 상호 작용할 필요가있다.jQuery in Codeception이 정의되지 않았습니다.

지금까지 두 가지 방법을 시도했습니다. 첫 번째는 DOM이 준비되었을 때 ID가있는 숨겨진 div를 만드는 것입니다. 그렇다면 내 테스트에서 나는 다음과 같이한다.

public function foo(AcceptanceTester $I) { 
    $I->waitForElement('#dom-ready'); 
    $var = $I->executeJS('return jQuery.fn.jquery'); 
    var_dump($var); 
} 

var_dump는 jQuery 버전을 리턴해야한다. 그것은 null을 반환합니다.

나는 또한이 시도했습니다

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 사실이되어야한다. 그것은 항상 거짓입니다. 나는 완전히 상실감이있다. 나는 무엇을 여기에서 보지 않고 있냐?

여기

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 
+0

'$'속기를 사용해 보셨습니까? 'return! window. $ || 윈도우. $. 활성 == 0' –

+0

그래, 작동하지 않습니다. 게다가, jQuery가 정의되어 있지 않다면, 속기는 확실히되지 않을 것이다. –

+0

JQuery가'$'네임 스페이스에 자체적으로 포함되어있는 경우가있었습니다. 그것은 또한 geckodriver에서 문제로 인해 수 있습니다. 이것을 시도해 보라. var w = window.wrappedJSObject || 창문; 돌아오다 .w. $ || w. $. 활성 <1;' –

답변

0

이있어 내 acceptance.suite.yaml 파일입니다! 이 문제는 실제로 Firefox에서 발생했으며 Selenium에서는 발생하지 않았습니다. geckodriver가 문제가 될 수 있다는 아이디어를 제안 해 주신 Florent B에게 감사드립니다. 짧은 대답은 jQuery에 액세스하려면 FF> = 48 이상이 필요하다는 것입니다.

https://github.com/mozilla/geckodriver/issues/108

희망이 사람을 도움이됩니다. 이 문제를 해결하기 위해 거의 일주일이 걸렸습니다.