环境:
问题:
我将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元素而无需通过元素数组。
答案 0 :(得分:0)
如果您可以发布一些您想要自动化的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中的“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")