2016-08-11 7 views
1

ElementNotVisibleError - 특정 Watir과-Webdriver 문제는

<div class="beds col-sm-2 hidden-xs"> 
    <div class="form-group"> 
     <select class="form-control wide" name="bedroomsMin"> 
      <option value="null">All Beds</option> 
      <option value="0">0+ Beds</option> 
      <option value="1">1+ Beds</option> 
      <option value="2">2+ Beds</option> 
      <option value="3">3+ Beds</option> 
      <option value="4">4+ Beds</option> 
      <option value="5">5+ Beds</option> 
     </select> 
    </div> 
</div> 

b.select_list(:name => "bedroomsMin").select '3+ Beds' 

을하려고하지만, 다음과 같은 오류 얻을 :

element not visible: Element is not currently visible and may not be manipulated (Selenium::WebDriver::Error::ElementNotVisibleError). 

이 목록 선택기 드롭 다운에 포함됩니다 다음과 같이 클릭 된 요소 :

b.link(:class => 'btn-open-filers').when_present.click 

보이지 않는 경우 어떻게 선택할 수 있습니까? 가시성을 강제 할 수있는 방법이 있습니까?

답변

3

소리가 타이밍 문제와 같습니다. 링크를 클릭하면 Watir이 상호 작용을 시도하기 전에 선택 목록이 포함 된 대화 상자가 나타나지 않을 수 있습니다. 선택 목록을 기다리고

시도해보십시오 <div class="beds col-sm-2 hidden-xs">이 함께 할 수있는 뭔가가있을 수 있습니다 숨겨진 데 같은

b.select_list(:name => "bedroomsMin").when_present.select '3+ Beds' 
0

보인다.

또한 요소가 있는지를 확인하는 것입니다. 즉, HTML로로드되었지만 이 보이지 않으면 여전히 true를 반환합니다.

여기가에 빠른 읽기입니다 :

What's the difference between `visible?` and `present?`?

당신이 존재의 것이 확인 후 드롭 다운을 클릭 가지고 있기 때문에

는, 타이밍 문제가있을 수 있습니다. 어떤 경우에는 드롭 다운이 DOM에 있는지 확인할 수 있지만 드롭 다운을 실제로 여는 것은 아닙니다.

같은 뭔가를 시도 할 수 있습니다 :

dropdown = b.link(:class => 'btn-open-filers') 
dropdown.click if dropdown.visible? 
b.select_list(:name => "bedroomsMin").select '3+ Beds' 
0

Watir과 사용자가 상호 작용할 수있는 요소와 상호 작용하도록 설계되었습니다. 따라서 사용자가 볼 수없는 경우 해당 사용자와 상호 작용할 수 없습니다. 그래서, 그것은 기능이 아니라 버그입니다. :)

즉, 귀하의 게시물에서 어떤 조치가 오류의 원인인지는 분명하지 않습니다. 당신이 그 안에 옵션을 선택하기 전에이 코드가 표시되고 선택 목록을 기다립니다 :

b.link(class: 'btn-open-filers').when_present.click 
b.div(class: 'form-group').wait_until_present 
b.select_list(name: 'bedroomsMin").select '3+ Beds' 

저스틴의 대답은 기능이 동일하며, when_present 아마 더 우아한입니다.