2009-03-16 6 views
35

Selenium을 사용하여 몇 가지 테스트를 작성하려고하는 GWT 애플리케이션이 있습니다.XPath를 사용하여 보이는 요소 만 어떻게 선택합니까?

XPath를 사용하여 테스트 페이지의 요소를 식별합니다. id을 사용하면 id 값이 GWT에 의해 자동 생성되어 변경 될 수 있으므로 작동하지 않습니다. 나는 다음과 같이 내가 그들의 라벨로 버튼을 찾을 수 깨달았을 때 상황이 잘 진행 시작일 :

//button[.='OK'] 

을하지만, 내가 문제가 시작 여러 테스트를 실행하기 시작했을 때. 나는이 문제점이 JavaScript에 의해 생성 된 GWT 앱의 모든 다른 "페이지"가 ​​숨겨진 <div> 요소의 HTML에 남아 있다는 것을 깨달았다. 이것은 셀레늄 테스트가 때때로 현재 뷰에서 볼 수있는 버튼 대신 숨겨진 버튼을 클릭한다는 것을 의미했습니다.

Firebug으로 HTML을 검사하면 style 속성에 display: none을 추가하여 GWT가 <div> 요소를 숨 깁니다. 이것은 다음과 같이 내가 모든 숨겨진 OK 버튼을 찾을 수 있다는 것을 의미합니다 :

//div[contains(@style,'display: none')]//button[.='OK'] 

이는 styledisplay: none을함으로써 숨겨진 조상 <div>이 버튼 즉 모든 숨겨진 OK 버튼을 찾을 수 있습니다.

내 질문은 : 어떻게 표시 가능한 확인 단추 만 찾으려면 XPath를 사용합니까? 요소가있는 버튼이 display: nonestyle에있는 것을 어떻게 찾을 수 있습니까?

답변

46

이 작동합니다 :

.//button[.='OK' and not(ancestor::div[contains(@style,'display:none')]) 
and not(ancestor::div[contains(@style,'display: none')])] 

편집 :

간단하고 효율적으로 표현 아래 :

//div[not(contains(@style,'display:none'))]//button[.='OK'] 

제대로 작동하지 않는 모든 버튼을 볼 수있어 적어도 하나 개의 사업부를 가지고 있기 때문에 그것의 조상에서.

+0

을 찾을 수 있습니다. 많은 감사합니다. –

+1

숨겨진 DOM 트리에 다른 div가있는 경우 마지막으로 작동하지 않습니다.

Fortega

+0

@Fortega 및 그 텍스트 주위에 말합니다 –

12

Selenium 2 Webdriver는이 문제를 처리하는 isDisplayed() 메서드의 옵션을 제공합니다. 셀레늄 기고가의 멋진 작품.

+1

디스플레이 숨김 속성이 요소 자체가 아닌 부모 요소에있는 경우 작동합니까? –

+2

예, 특정 요소에 대해이를 확인해야하며 전체 컬렉션과 일치 할 수는 없습니다. – sitnarf

+1

검색 ('find by *')과'isDisplayed()'를 사용하여 시정을 검사 할 때 요소가 변경 될 때'StaleElementReferenceException' 예외를 발생시킬 수 있으므로주의하십시오. – Blaise

-3
//div[contains(@style,'display: block')] 

이 코드는 눈에 보이는 요소 XPath는 그것 뿐이다

관련 문제