2017-02-05 5 views
1

Я работаю со следующей HTML для имитации ссылки, нажмите на «Watir-WebDriver», который вложен вСимуляции вложенной ссылки щелчка «Watir-WebDriver»

<li> 
<div class="drop-head"> 
<ul> 
    <li> 
     <a href="#hotel" aria-label="go to Hotels" title="Hotels">Hotels</a> 
    </li> 
..... 
</ul> 
</div> 

Моего сценария очень прост:

require 'watir-webdriver' 

browser = Watir::Browser.new :firefox 
browser.goto "https://www.acme,com/reserve" 
wait = Selenium::WebDriver::Wait.new(:timeout => 5) 

menu = browser.div(:class => "drop-head").li.a(:href => "#hotel").click 

В консоли я вижу следующее сообщение об ошибке:

C:/apps/Ruby23/lib/ruby/gems/2.3.0/gems/watir-webdriver-0.9.9/lib/watir-webdriver/elements/element.rb:536:in `assert_element_found': unable to locate element, using {:href=>"#hotel", :tag_name=>"a"} (Watir::Exception::UnknownObjectException) 
     from C:/apps/Ruby23/lib/ruby/gems/2.3.0/gems/watir-webdriver-0.9.9/lib/watir-webdriver/elements/element.rb:508:in `assert_exists' 
     from C:/apps/Ruby23/lib/ruby/gems/2.3.0/gems/watir-webdriver-0.9.9/lib/watir-webdriver/elements/element.rb:114:in `click' 
     from script4.rb:7:in `<main>' 

Любая помощь по этому вопросу?

+0

Вы должны рассмотреть вопрос о переходе на использование Watir 6.1.0 вместо Watir-WebDriver, как улучшения, больше не выпускается под Watir-WebDriver –

ответ

1

Проблема, скорее всего, связана со спецификацией пути элемента. Когда вы делаете:

menu = browser.div(:class => "drop-head").li.a(:href => "#hotel").click 

Это фактически находит первый найденный «раскрывающийся голова» div и в течение этого первого li элемента. Учитывая, что каждая ссылка, вероятно, в своем собственном li элементах, вы всегда найдете только одну ссылку. Например в:

<div class="drop-head"> 
    <ul> 
    <li> 
     <a href="#hotel" aria-label="go to Hotels" title="Hotels">Hotels</a> 
    </li> 
    <li> 
     <a href="#restaurants" aria-label="go to Restaurants" title="Restaurants">Restaurants</a> 
    </li> 
    </ul> 
</div> 

Глядя на вторую ссылку, "#restaurants":

browser.div(:class => "drop-head").li.a(:href => "#restaurants") 

Будет ли на самом деле искать ссылку в первом li элемент:

<li> 
<a href="#hotel" aria-label="go to Hotels" title="Hotels">Hotels</a> 
</li> 

решение должно указывать только путь элемента, когда на самом деле необходимо дифференцировать элемент. Предполагая, что есть только одна связь с этой href, вероятно, можно просто сделать:

browser.a(:href => "#hotel").click 
+0

Но это дает мне: C: /apps/Ruby23/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib/selenium/webdriver/remote/response.rb: 69: in 'assert_ok ': Элемент не отображается (Selenium :: WebDriver :: Error :: ElementNotVisibleError) – kallada

+0

Это какое-то раскрывающееся меню? Если это так, сначала нужно вызвать раскрывающийся список, вероятно, используя '# hover' в заголовке меню. –