【问题标题】:Simulating a nested link click with 'watir-webdriver'使用“watir-webdriver”模拟嵌套链接点击
【发布时间】:2017-06-22 09:55:09
【问题描述】:

我正在使用以下 HTML 来模拟链接点击,其中嵌套了“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>'

有什么帮助吗?

【问题讨论】:

  • 您应该考虑改用 Watir 6.1.0 而不是 Watir-Webdriver,因为在 Watir-Webdriver 下不再发布改进

标签: ruby automated-tests watir watir-webdriver


【解决方案1】:

问题可能是元素路径的过度规范。当你这样做时:

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

它实际上找到了第一个匹配的“drop-head”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

【讨论】:

  • 但这给了我: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)
  • 这是某种下拉菜单吗?如果是这样,您需要先触发下拉菜单,可能是在菜单标题上使用#hover
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
相关资源
最近更新 更多