2014-11-26 2 views
2

CasperJS에서 waitForSelector 함수를 사용하고 있으며 성공 콜백에 변수 (indexNumber)를 전달하려고합니다. 이 doesnt는 작동하는 것처럼 보인다. 이것이 가능합니까?casperjs waitForSelector 함수에서 success 콜백에 인수를 전달하는 방법은 무엇입니까?

casper.waitForSelector(x('//button[@class="addToShopcart"]'), 
    function success(indexNumber) { 
     casper.echo(stripLineBreaksTrim(casper.fetchText(x('//select[@id="artikel"]//option[' 
+ indexNumber + ']')))); 
    }, 
    function fail() {}); 

나는 옵션 목록의 색인을 반복하고 그 목록에서 데이터를 추출하고 싶습니다. 위의 스 니펫은 함수에 캡슐화되어 있습니다. 이 함수는 캐스퍼 테스트에서 호출됩니다.

버튼은 선택 상자의 옵션을 선택하자마자 (이 기능의 다른 부분에서 발생 함) ajax를 통해로드됩니다. 그런 다음 (위 참조) 특정 옵션 (indexNumber로 정의)의 가치를 얻고 싶습니다.

+0

'indexNumber'는 페이지의이 선택자에 맞는 버튼의 인덱스로되어 있습니까? 달성하고자하는 것은 무엇입니까? –

+0

나는 옵션 목록의 색인을 반복하고 그 목록에서 데이터를 추출하고 싶다. 위의 스 니펫은 함수에 캡슐화되어 있습니다. 이 함수는 캐스퍼 테스트에서 호출됩니다. – Jabb

+0

하지만, 'waitForSelector'는 ** 첫 번째 ** 버튼이 발견되는 즉시'success' 콜백을 트리거합니다. 버튼이 옵션 텍스트/값과 어떤 관련이 있습니까? –

답변

0

의 콜백은 단계 함수 콜백 (then)입니다. 이 콜백에 전달되는 것은 마지막 페이지 리소스이며로드 된 것이므로 indexNumber과 같은 다른 변수 이름을 사용하여이 동작을 변경할 수 없습니다.

설명에 따르면 실제로 마지막으로 변경된 옵션 인 선택한 옵션의 텍스트를 가져와야합니다. 그래서 다음과 같이 작동해야합니다 :

casper.echo(stripLineBreaksTrim(casper.evaluate(function(){ 
    return document.querySelector('#artikel').selectedOptions[0].innerHTML; 
}))); 
+0

다른 선택기를 사용하는 것이 좋습니다. 감사! – Jabb