2013-01-23 7 views
1

내가 사용 목록에서이 개 항목을 찾을 수 있습니다일부 목록 항목이 표시되지

br.span(:text, "Customer").click

그러나 다른 사람이 나에게 Selenium::WebDriver::Error::ElementNotVisibleError을 제공합니다. 목록에있는 항목 중 일부를 선택할 수 있고 Watir이 볼 수있는 것이 약간 이상하게 보입니다. 아래는 html입니다. 텔레콤 프로필을 선택할 수는 있지만 기회는 선택할 수 없습니다. 왜 다른 사람이 볼 수 있지만 다른 사람은 볼 수 없는지에 대한 생각은 무엇입니까?

<TD style="PADDING-BOTTOM: 3px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; PADDING-TOP: 3px" id=apy0m1i2ITD vAlign=center width="100%" noWrap align=left> 
    <SPAN style="MARGIN: 0px 13px">Opportunity</SPAN> 
</TD> 
</TR></TBODY></TABLE></TD></TR> 


<TD style="PADDING-BOTTOM: 3px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; PADDING-TOP: 3px" id=apy0m1i3ITD vAlign=center width="100%" noWrap align=left> 
    <SPAN style="MARGIN: 0px 13px">Telecom Profile</SPAN> 
</TD> 
</TR></TBODY></TABLE></TD></TR> 
+3

을 조작하는 것입니다 알고 때로는 어렵다. 그게 니가 원하는거야? 올바른 HTML을 게시 했습니까? – Droogans

+0

조금 혼란 스럽습니다. 예는 br.span (: text, "Telecom Profile")입니다. 이상한 점은 목록의 2 개 항목을 찾을 수 있고 나머지는 찾을 수 없다는 것입니다. 내 드롭 다운 목록에는 고객, 연락처, 텔레콤 프로필, 활동 및 몇 가지가 있습니다. 나는 스크립트가 목록에있는 모든 것을 보거나 전혀 기대하지 않을 것으로 기대한다. – user2001386

+0

예외에 따라 watir이 요소를 찾습니다. 문제는 요소가 보이지 않는다는 것입니다. 페이지의 스크린 샷을 게시 할 수 있습니까? –

답변

0

먼저 그러나 당신이 보여 HTML, 단지 테이블과 행에 존재하는 어떤 HTML select 요소가 없습니다 : 그렇다면,이 시도. 그래서 제게 '목록'컨트롤이 jQuery 또는 유사한 라이브러리에서 자바 스크립트 애니메이션 위젯 일종이라고 생각하게합니다.

그런 작업이 많은 점은 풀다운 메뉴를 말하는 것처럼 보이지만 물건을 볼 수 없도록 클래스를 설정한다는 것입니다. 풀다운 맨 위에 클릭 (click-on) 또는 마우스 오버 (mouseover)와 같은 작업을 수행하면 CSS에 의해 표시되는 것으로 클래스가 변경됩니다. 종종 그들은 마우스가 항목 위에있을 때 트리거되는 psuedo-class라는 것을 사용하기 때문에 메뉴가 표시되면 마우스가 위에있는 한 계속 표시됩니다.

웹 플레이어가 마우스 오버 또는 마우스 오버 이벤트를 만들기 위해 실제 마우스 포인터를 움직이지 않기 때문에 자동화가 특히 까다로운 작업 일 수 있습니다. 따라서 메뉴 상단에서를 클릭하는 것과 같은 메뉴를 표시 할 수있는 무언가를 할 수는 있지만 브라우저가 마우스가 사물 위에 있지 않다는 것을 매우 빠르게 감지 할 수 있습니다.

webdriver를 사용하여 브라우저를 구동하는 거의 모든 것이 (watir-webdriver, Selenium, Capybara) 사용자의 관점에서 '존재하지 않는'요소를 클릭하거나 상호 작용하지 않습니다 (즉, 표시 및 사용 가능). 일반적으로 사용자가 클릭 할 수없는 경우 자동화 도구가 클릭해야하는 이유는 무엇입니까? 이것은 '보이지 않는'메시지의 출처 일 가능성이 높습니다. 즉, DOM에서이 항목을 찾을 수 있지만 사용자에게는 표시되지 않으므로 클릭하지 않는 것이 webdriver입니다.

보통 IRB의 페이지에서 watir-webdriver 명령으로 문제를 해결합니다. 메뉴를 표시하고 메뉴를 클릭 한 다음 요소를 클릭하면됩니다. 작업 할 수 있다면 가능성이 있습니다. 스크립팅 속도로 작업하십시오.

예를 들어 뭔가가 표시되거나 이전 작업의 결과로 나타나고 너무 빨리 처리하려고하지 않는 경우 '현재 선물'데코레이터를 사용해야 할 수도 있습니다. 좀 더 우아한 @ TrinitronX의 제안보다는, 그러나 문제는 요소가 나타나는 경우 기본적으로 이러한 접근은 그러나 도움이되지 않습니다

같은 일이며, 한 줄의 코드 사이에 사라

browser.span(:text => "Customer").when_present.click 

실행중인 코드와 다음 코드 행 너무 빨리지나 가면.

그런 경우 요소를 표시하도록 강제로 자바 스크립트를 실행하는 것과 같은 방법을 사용해야 할 수도 있습니다.또는 요소에서 onclick 이벤트를 수동으로 실행하여 사용자가 클릭 한 것처럼 자바 스크립트가 응답하는지 확인할 수 있습니다. 사이트 자체, 또는에서 동일한 컨트롤이 샘플 사이트를 보지 않고

, 그것은 가장 좋은 방법은 내가 더 스팬 텍스트 일치 "고객에게"볼 요소

1

WebDriver가 보이지 않는 경우 요소를 클릭 할 수 없습니다.

요소가 표시되기 전에 페이지가 변경됩니까? 당신이 '목록에서 선택'라고, 모든

br.wait_until { br.span(:text => 'Customer').visible? } 
br.span(:text, "Customer").click 
관련 문제