环境:
- 红宝石 1.8.7
- 硒网络驱动程序 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 元素而不必遍历元素数组。