2014-08-20 2 views
0

watir-webdriver를 사용하여 화면의 일부 알려진 텍스트 (이 경우 "An Example") 옆에있는 "아래로"버튼을 클릭하려고합니다. 아래쪽 버튼을 클릭하면 텍스트 자체가 임의 길이의 목록으로 이동합니다. 텍스트가 목록에 표시되는 위치를 항상 알지 못하며 텍스트에 ID가 없거나 클릭 할 위치를 고유하게 식별하는 아래쪽 단추가 없습니다. 단추에는 클래스 ("rowDown down")가 첨부되어 있지만 여러 행의 텍스트가있을 수 있으므로 단추 클래스는 고유하지 않습니다.Ruby와 watir-webdriver를 사용하면 텍스트가 알려진 경우 요소의 XPath를 어떻게 얻을 수 있습니까?

고유 한 ID를 얻을 수없는 상황에서는 항상 XPath로 전환합니다. 이 경우

, 나는 더 구체적으로 내가 원하는 버튼의 XPath가 div[1]/button[2]

로 끝나는 것, 내가 /div[2] 로 끝납니다 신경 텍스트와 div[1]에서 내가 클릭합니다 버튼입니다의 XPath를 알고 문제는 watir-webdriver를 사용하여 텍스트에 대한 XPath를 얻는 방법입니다. (처리 할 수있는 전체 XPath의 예는 "//*[@id='sortOrder0']/tbody/tr[2]/td[1]/div[2]"입니다.) 다른 방법으로는 신뢰할 수있는 방법으로 내가 알고있는 버튼에 도달 할 수 있습니까? 당신은 text()를 사용하는 XPath 동안 노드의 텍스트를 확인할 수 있습니다

<div> 
    <button class="rowUp up"></button> 
    <br /> 
    <button class="rowDown down"></button> 
</div> 
<div> 
    An Example 
</div> 

답변

1

: 여기

는 "예제"단어 옆에 위쪽 화살표와 아래쪽 화살표를 만들어 내 HTML의 관련 부분입니다 . 따라서 당신은 텍스트 "예제"와 사업부를 찾아 앞의 사업부로 이동하는 XPath를 작성할 수 후 아래 버튼을 클릭 :
browser.button(xpath: '//div[normalize-space(text())="An Example"] 
         /preceding-sibling::div[1] 
         /button[contains(@class, "rowDown")]').click 

가 개인적으로 읽고 오류가 발생하기 쉬운이 하드를 찾을 수 있습니다. 기본 로케이터를 사용하고 Watir-Webdriver의 내부에 XPath 생성을 남기는 것을 선호합니다.

browser.div(text: 'An Example').parent.button(class: 'rowDown').click 
+0

고마워, Justin. XPath와 비슷한 효과를 얻을 수 있습니다. 이 작업을 통해 필요한 작업을 수행 할 수 있는지 알아보기 위해 조금만 노력하겠습니다. 선호하는 구문에서 버튼은 부모 요소 안에 직접 있지 않고 div가 있고 버튼이 있습니다. 문제의 웹 페이지가 때로는 숨겨진 요소를 가지고 있기 때문에 다른 문제는 '예제'텍스트에서 곧바로 벗어납니다. 이 텍스트를 사용하면 대다수의 시간에 효과적이지만, 때때로 한 번에 하나의 와트가 혼란스러워집니다. – pjd

+0

Watir 접근법을 사용하면 버튼이 div 내에있는 것이 좋습니다. Watir은 부모 내 어디에서나 단추를 찾습니다. xpath를 사용하는 것과 다를 바없는 텍스트 사용에 대한 우려를 잘 모르겠습니다. 그러나 아마도 그것을 사용하여 정규식을 해결할 것인가? –

+0

아, 나는 단지 parent.button을 할 수 있다는 것을 몰랐다. 알아 둘만한! – pjd