2011-03-30 3 views
2

#{selenium} 태그를 사용하여 셀렌 테스트를 만들 때 복잡한 XPath 로케이터는 어떻게 사용합니까? 좀 더 단순한 예제가 있지만 실제로 테스트를 용이하게하기 위해 모든 요소에 ID를 부여하지 않으려 고합니다. 이와 같은특정 요소에 텍스트가 있는지 확인

내가 시도한 변화 :

#{selenium 'Sitemap'} 
... 
// These work: 
assertTitle('Site Map') 
verifyTextPresent('Site Map') 
verifyTextPresent('Login') 
verifyText('id=test', 'Login') 
verifyText('//ul', 'Login') 
verifyText('//ul[2]', 'Login') 

// this one results in "Element //ul[@class=sitemap] not found" 
verifyText('Login','//ul[@class=sitemap]') 

#{/selenium} 

는 사람이 작업을 더 복잡한 버전을받은 적이 있습니까? 그것은 셀렌 문서에 따라 작동 해야하는 것 같습니다. Play의 컨텍스트에서 셀레늄 테스트를 만들면 어디서나 문서화가 가능합니까? 내가 찾을 수있는 유일한 언급은 these trivial examples입니다.

답변

4

//ul[@class='sitemap'] 

사이트 맵 주위에 따옴표를 시도했다. XPath를 사용하면 테스트 속도가 느려지고 ID, 이름을 사용하는 것이 더 좋습니다.

+0

아하. 'verifyText ('// ul [@ class ='sitemap '// li [1]/ul', '* Login *')'일부는 아포스트로피처럼 이스케이프해야하지만 괜찮은 것 같습니다. –

+0

또는 인용 부호와 아포스트로피를 사용하면 사물을 간단하게 유지할 수 있습니다. (* // ul [@ class = 'sitemap']/li [1] ","* Login * ") – Ardesco

8

나는 어느 정도 의견이 맞지 않습니다. DOM 전체를 검색하는 잘못 구성된 xpath는 테스트 속도를 떨어 뜨립니다. 그러나 잘 구성된 xpath는 속도에 최소한의 영향을 주어야합니다 (IE를 사용하는 경우는 무시 무시한 JavaScript 렌더링 엔진이 필요합니다).

이상적으로 xpath를 가능한 한 검색하려는 DOM 영역에 가까운 ID에 입력하고 싶다면 xpath를 사용하는 대신 DOM의 특정 영역을 검색하는 것이 좋습니다. 위에 표시된 DOM 전체를 검색해도 일치하는 요소를 빠르게 찾습니다.

예를 들어 http://www.lazeryattack.com을 사용하여 좋은 xpaths를 호출하는 예제를 제공 할 것입니다. 당신이 마음의 소리에 특정 아무것도하고 내가 도움이 무엇을 할 수 있는지 볼 경우

  • 음성 컴즈 링크 : // UL [ID @ = 'leftMenu']/리/A [. = 'Voice Comms']
  • "January VAT Increase"텍스트가있는 범위 요소가 포함 된 H3 요소 : //div[@id='news']/h3[span[.='January VAT Increase ' ]]
  • 위 요소의 첫 번째 단락은 //div[@id='news']/h3[span[.='January VAT Increase ']]/다음 형제 자매 : 1]
  • 위 요소의 두 번째 단락 : //div[@id='news']/h3[span[.='January VAT Increase ']]/다음 형제 자매 :: p [2]
  • featuredNews div에서 검색을 시작하고 "New Look And Feel"텍스트로 h2 요소로 드롭 다운 : //div[@id='featuredNews']/descendant::h2[.='New Look And Feel ']

FireBug와 FirePath 확장을 사용하여 xpaths를 해결하는 데 도움이 될 것입니다. 이것이 개인적으로 가장 좋아하는 조합입니다.

+0

6 년 후에 그것을 읽고, 당신은 자리에 있습니다. – Tarun

관련 문제