2015-01-12 2 views
1

그냥 분명히 나는 ​​머리가없는 CasperJS를 허용하는 라이브러리 인 SpookyJS를 사용하고 있습니다.모든 XPath가 CasperJS에 존재하지 않는 오류를 반환합니까?

다른 모든 페이지에서 다른 XPath를 클릭해도 문제가 없지만 페이지가 완벽하게로드되지만 모든 XPath는이 오류를 반환합니다.

는 함수가 XPath를 클릭을 시도하고 스크린 샷 페이지가 완전히로드되었는지 보여줍니다 전에 내가 찍은 스크린 샷이 존재하지 않는 선택

에 mousedown 이벤트를 전달 할 수 없습니다.

waitForSelector 기능을 사용하려고 할 때 시간 초과 오류가 발생하면 다른 페이지에서 다른 XPath를 시도했지만 그 중 아무 것도 작동하지 않습니다.

여기 커피 스크립트에 내 코드가 spooky.then 그냥 casper.then로 생각 괜찮다입니다 :

// 3 steps occur before this and they work perfectly 
spooky.then([{x:selectXPath},() -> 
    @wait(3000,() -> 
    eval(x) // This loads the xPath function 
    @capture('server/components/spooky/img.png') 
    @click(xPath('//*[@id="wp-page-header-middle"]/table/tbody/tr/td[1]/a')) 
) 
]) 

내가 관심이있는 테이블은 iframe 대응의 내부입니다.

+0

평가 후면 (x)가 반환 무시하세요 'XPATH = 함수() {...}' . 여기서 문제가되지 않습니다. 난 그냥 크롬에서 xPath의 복사했지만 심지어 하나는 사용자 정의 (테이블) 작동하지 않았다 썼습니다. 또한 어떻게 브라우저처럼 렌더링 할 수 있습니까? – grasshopper

답변

2

문제는 요소가 iframe 내부에 있다는 것입니다. 요소를 선택할 수는 있지만 먼저 iframe의 컨텍스트로 전환하여 작업을 실행해야합니다. 이것은 withFrame()을 통해 이루어집니다. 색인 또는 이름으로 iframe을 선택할 수 있습니다. 당신은 또한 tbody 처음 마크 업에 존재하지 않을 수 있기 때문에, 당신의 XPath를 조정해야 할 수도 있습니다

@withFrame(0,() -> 
    @click(xPath('//*[@id="wp-page-header-middle"]/table/tbody/tr/td[1]/a')) 
) 

: 여기 지수 (처음은 iframe)에 의한 예입니다. 현대적인 브라우저처럼 동적으로이 작업을 수행해야 할 수 있습니다 있도록 PhantomJS 1.x에서, 그것은을 추가하지 않습니다 :

'//*[@id="wp-page-header-middle"]/table//tr/td[1]/a' 
+0

그것은 작동합니다! 고마워, 내가 tbody 문제를 테스트하지 않았지만 다른 xPaths 확실히 작동 알아요. – grasshopper

관련 문제