2009-11-03 7 views
2

셀렌을 사용하여 웹 페이지를 테스트하고 있습니다. 나는 모든 '리프 요소와 텍스트를 포함하는 요소'를 원합니다. 나는 다음의 작동하는 XPath를 사용한다.자손 관계 + 셀렌의 색인 생성

//*[. != '' or not(*)] 

위대한 작품입니다.

하지만 이제 각 요소를 반복하고 명령을 실행하고 싶습니다. 나는 실제로 자신의 직책을 원하지만 GetXpathCount를 사용하여 문제를 설명합니다.

int elementCount = this.selenium.GetXpathCount("//*[. != '' or not(*)]"); 
for (int i = 1; i <= elementCount; ++i) 
{ 
    Console.WriteLine(this.selenium.GetXpathCount("//*[. != '' or not(*)][" + i + "]")); 
} 

에 elementCount의 값은 242 이며 콘솔 출력 142 45 30 13 본체에 4 4 1 1 1 1 0 0 0 0 0 0 ... [200 다른 제로] 숫자이며 항상 elementCount에 합하지만 ~ 10 이후에는 항상 0입니다.

//*[. != '' or not(*)][1] 

내 의도 한 의미를 가지고 있지 않습니다 내 XPath는 것을

그것은 나에게 분명했다.

(//*[(. != '' or not(*))])[1] 

야호 : 그리고 대신하고

//*[(. != '' or not(*)) and position() = 1] 

그래서, 내가 괄호를 사용

에 해당 "부모의 첫 번째 자식 모든 잎 요소와 텍스트를 포함하는 모든 요소가"이 실수를 해결하기 위해 반환 . 콘솔 출력은 이제 모든 요소에 대해 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1입니다. 하지만 실제로 요소 @ 경로에 대한 연산을 수행하기 위해 루핑 코드를 업데이트 해 봅시다.

int elementCount = this.selenium.GetXpathCount("//*[. != '' or not(*)]"); 
for (int i = 1; i <= elementCount; ++i) 
{ 
    Console.WriteLine(this.selenium.GetElementPositionLeft("(//*[. != '' or not(*)])[" + i + "]")); 
} 

아니오 !!! GetXpathCount는 작동하지만 GetElementPositionLeft (및 기타)는 모두 실패합니다. 뭐라 구요? 이 문제를 어떻게 해결할 수 있습니까? : [Selenium.SeleniumException] 여기

는 셀레늄 예외이다 { "ERROR 요소 [1]없는 (// [= '여부 ().!])"} { "ERROR : 요소 ( // [= '여부 ().!') [1]을 찾을 수 없습니다 "} 데이터 {} System.Collections.ListDictionaryInternal 헬프 : NULL 의 InnerException : NULL 메시지"ERROR : 요소 ( [.! = ''또는 없음 ()]) [1] 찾을 수 없음 " 출처 :"ThoughtWorks.Selenium.Core "

답변

4

셀레늄은 (//*[. != '' or not(*)])[1]에 어떤 위치 전략을 사용해야할지 모릅니다.

int elementCount = selenium.getXpathCount("/descendant::*[. != '' or not(*)]").intValue(); 
for (int i = 1; i <= elementCount; ++i) { 
    System.out.println(i + ": " + selenium.getElementPositionLeft("xpath=/descendant::*[. != '' or not(*)][" + i + "]")); 
} 
+0

N00b 실수 : 대안 로케이터으로 xpath=

를 앞에보십시오, 나는 이것이 (자바) 다음과 같은 작업을 얻었다. 셀레늄은 시작 문자가 // 일 때 xpath임을 전제로합니다. 함수 GetXpathCount는 모든 식별자가 xpath임을 가정합니다. 내 실수는 xpath (// 경로) 주위에 대괄호를 추가하면 Selenium이 깨져서 xpath =를 추가해야한다는 것이 었습니다. 감사합니다. – Kenn