使用 'watir-webdriver' 模拟嵌套 link 点击
Simulating a nested link click with 'watir-webdriver'
我正在使用以下 HTML 来模拟 link 点击嵌套在
中的 '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>'
有什么帮助吗?
问题可能是对元素路径的过度指定。当你这样做时:
menu = browser.div(:class => "drop-head").li.a(:href => "#hotel").click
它实际上找到了第一个匹配的 "drop-head" div
和第一个 li
元素。鉴于每个 link 可能在其自己的 li
元素中,您将只能找到第一个 link。例如:
<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>
寻找第二个link,“#restaurants”:
browser.div(:class => "drop-head").li.a(:href => "#restaurants")
实际上会在第一个 li
元素中寻找 link:
<li>
<a href="#hotel" aria-label="go to Hotels" title="Hotels">Hotels</a>
</li>
解决方案是仅在确实需要区分元素时才指定元素的路径。假设只有一个 link 和 href
,你可以这样做:
browser.a(:href => "#hotel").click
我正在使用以下 HTML 来模拟 link 点击嵌套在
中的 '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>'
有什么帮助吗?
问题可能是对元素路径的过度指定。当你这样做时:
menu = browser.div(:class => "drop-head").li.a(:href => "#hotel").click
它实际上找到了第一个匹配的 "drop-head" div
和第一个 li
元素。鉴于每个 link 可能在其自己的 li
元素中,您将只能找到第一个 link。例如:
<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>
寻找第二个link,“#restaurants”:
browser.div(:class => "drop-head").li.a(:href => "#restaurants")
实际上会在第一个 li
元素中寻找 link:
<li>
<a href="#hotel" aria-label="go to Hotels" title="Hotels">Hotels</a>
</li>
解决方案是仅在确实需要区分元素时才指定元素的路径。假设只有一个 link 和 href
,你可以这样做:
browser.a(:href => "#hotel").click