如果我在没有先等待元素的情况下运行脚本,它会快速移动并失败,因为该项目不可用。我与之交互的页面是HTML5 / Angular。我的问题是 - 是否有更有效的方式等待一个项目,然后点击它?我在下面做的很棒但是必须等待,然后点击,然后等待下一件事,然后一遍又一遍地点击并不是最好的方式。
设置:
def wait_for(timeout = 55)
Selenium::WebDriver::Wait.new(:timeout => timeout).until { yield }
end
def displayed?(how, what)
@driver.manage.timeouts.implicit_wait = 55
@driver.find_element(how, what).displayed?
end
执行:
wait_for { displayed?(:xpath, "//div[text() = 'Previous Year']") }
@driver.find_element(:xpath, "//div[text() = 'Previous Year']").click
答案 0 :(得分:1)
我们遇到了与QA脚本类似的问题,我们的解决方案是隐藏元素(ng-hide),直到控制器和服务完成所有工作。我认为你的问题是Angular视图代码在构建和填充时可能都是可见的,所以Selenium通过了显示检查,但实际上还没有使用它。更好的QA保持隐藏,直到功能。