2017-02-05 2 views
1

ich mit der folgenden HTML bin funktionierenden Link klicken Sie ‚watir-WebDriver‘ zu simulieren, die innerhalbein verschachtelten Link klicken Sie ‚watir-WebDriver‘ Simulieren

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

Mein Skript verschachtelt ist sehr einfach:

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 

in den Konsolen ich folgende Fehlermeldung zu sehen bin:

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>' 

Jede auf dieser Hilfe?

+0

Sie berücksichtigen sollten, die Umstellung auf die Watir mit 6.1.0 statt Watir-WebDriver als Verbesserungen nicht mehr freigesetzt werden unter Watir-WebDriver –

Antwort

1

Das Problem ist wahrscheinlich eine Überspezifikation des Pfades des Elements. Wenn Sie das tun:

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

Es findet tatsächlich den ersten passenden "Drop-head" div und innerhalb dass das ersten li Elements. Angesichts der Tatsache, dass jeder Link wahrscheinlich in seinem eigenen li Element ist, finden Sie nur den ersten Link. Zum Beispiel in:

<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> 

für den zweiten Link Suche "#restaurants":

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

tatsächlich für den Link in dem ersten li Elemente suchen werden:

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

Der Die Lösung besteht darin, den Pfad des Elements nur dann anzugeben, wenn dies zur Unterscheidung des Elements erforderlich ist. Angenommen, es ist nur eine Verbindung mit diesem href, können Sie wahrscheinlich nur tun:

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

Aber das gibt mir: 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 ': Element ist nicht sichtbar (Selenium :: WebDriver :: Fehler :: ElementNotVisibleError) – kallada

+0

Ist dies eine Art Dropdown-Menü? Wenn dies der Fall ist, müssen Sie das Dropdown-Menü zuerst auslösen, wahrscheinlich durch Verwendung von '# Hover' in der Menüüberschrift. –

Verwandte Themen