【问题标题】:Ruby/Selenium WebDriver 2: Find New Elements FastRuby/Selenium WebDriver 2:快速查找新元素
【发布时间】:2013-02-16 06:50:56
【问题描述】:

环境:

  • Ruby 1.8.7
  • Selenium WebDriver 2
  • Ubuntu 12.04 桌面版
  • 火狐13.0.1

问题:

我有 div 标签被用作选择。您单击 div 并显示一个下拉样式窗口,其中包含更多 div 标记作为选择选项。现在我可以进入并创建一种方法来为每个“div as select”单击这些选项中的每一个,但我真正想要的是编写一段代码来单击我知道的 div,然后确定哪些 div现在显示并在单击后启用。然后我可以随意点击其中一个选项。

所以我当前的代码是这样的:

allDivs = brwsr.find_elements(:tag_name, 'div')
origDivs = allDivs
allDivs.each do |e|
  if ... # Get the div I want
    e.click
    newDivs = brwsr.find_elements(:tag_name, 'div')
    origDivs.each do |orig|
      newDivs.delete(orig)
    end
    # Do something with remaining new divs here
  end
end

我遇到的主要问题是这非常慢。我目前有大约 200 个 div 可以旋转,这个方法需要几分钟才能完成。通常,我不会期望通过几百个数组元素旋转需要很长时间。但确实如此。

为了缩短我尝试过滤 allDivs 和 newDivs 的时间,方法是旋转它们一次并删除任何未显示和启用的内容。

所以我目前遇到了一个非常缓慢的解决方案。我不介意这种“发现新 div”的速度有点慢,因为它也会导致脚本开发时间更短。但是,花费几分钟来完成太长了。

第一个问题: Selenium 能否只返回在 find_elements 调用周围通过一些额外的 API 字符串显示和启用的元素?

第二个问题:是否有人有更好的方法来查找新的 div 元素,而无需遍历元素数组。

【问题讨论】:

    标签: ruby selenium-webdriver


    【解决方案1】:

    如果您可以发布一些您尝试自动化的 DOM 的示例 HTML,将会非常有帮助。

    话虽如此,ruby webdriver 绑定确实支持通过链接查找元素。因此,给定一些像这样的 html:

    <div class="outer">
      <div class="one">
        <div class="alpha">A</div>
        <div class="beta">B</div>
        <div class="gamma">C</div>
      </div>
      <div class="two">
        <div class="alpha">A</div>
        <div class="beta">B</div>
        <div class="gamma">C</div>
      </div>
      <div class="three">
        <div class="alpha">A</div>
        <div class="beta">B</div>
        <div class="gamma">C</div>
      </div>
    </div>
    

    你可以这样写来在第二组 div(“two”)中找到“B”div:

    group = brwsr.find_element(:class => "two")
    desired_item = group.find_element(:class => "beta")
    

    或者,更简单的是通过 ruby​​ 的链接功能:

    desired_item = brwsr.find_element(:class => "two").find_element(:class => "beta")
    

    我最喜欢的另一种方法是通过 CSS 选择器选择元素,它可以通过易于阅读的语法更快地选择元素:

    desired_item = brwsr.find_element(:css => "div.two div.beta") 
    

    【讨论】:

      猜你喜欢
      • 2017-09-10
      • 2021-03-31
      • 1970-01-01
      • 2021-07-04
      • 2014-08-13
      • 2017-07-03
      • 1970-01-01
      • 2012-12-12
      相关资源
      最近更新 更多