2014-02-21 2 views
1

Mink와 Behat과 함께 Selenium2 드라이버를 사용하여 일부를 실행하고 있습니다. 수락 테스트를하고 대부분은 모든 것이 잘 진행되고 있습니다.Mink에서 XPath 오류 : '문서'에서 '평가'를 실행하지 못했습니다. 결과가 노드 집합이 아니므로 원하는 유형으로 변환 할 수 없습니다.

그러나 XPath를 사용하여 data- * 속성을 기반으로 요소를 대상으로 지정하려고 시도하고 있습니다.

나는 XPathHelper 및 FirePath을 사용했습니다 내 XPath는 그 확장의 모두에서 체크 아웃 : 표시

//html//@data-search-id='images'

올바른 요소를 대상으로. 그러나

, 나는 내가 Behat에서 다음과 같은 오류가

$el = $this->getSession()->getPage()->find('xpath', $this->getSession()->getSelectorsHandler()->selectorToXpath('xpath', "//@data-search-id='images'")); 
$el->click(); 

FeatureContext.php에 다음 사항을 추가 할 때 : 나는 당신이 찾고있는 XPath를가 생각

invalid selector: Unable to locate an element with the xpath expression 
//html//@data-search-id='images' because of the following error: 

TypeError: Failed to execute 'evaluate' on 'Document': 
The result is not a node set, and therefore cannot be converted 
to the desired type. 

답변

3

XPath 표현식은 완전히 유효한 표현식입니다. 모두 @data-search-id attr 그 중 하나가 '이미지'이면 true를 반환하고 그렇지 않으면 false를 반환합니다.

하지만 항목을 클릭하고 분명히 부울 값을 클릭하는 것은 다소 어렵습니다. 대신 조건을 충족 항목에 대한 쿼리 (따라서, 술어로 비교를 이동) :

//html//*[@data-search-id='images'] 

또한, 나는 //html을 제거하는 것입니다. HTML 노드는 어쨌든 루트 노드 여야하므로 /html은 괜찮 았을 것입니다 (모든 하위 트리에서 검색 할 이유가 없음). 임의의 자손을 검색 할 때 루트 노드가 아니기 때문에 (<html/>이므로) 완전히 생략해도 XPath 표현식의 의미는 변경되지 않습니다.

//*[@data-search-id='images'] 
+0

정답과 설명! 문제 및 해결 방법에 대한 설명 주셔서 감사합니다. – brianrhea

1

을 :

//html//*[@data-search-id='images']