Angularjs Selenium/Ruby-等待,然后单击?
如果我运行脚本时没有首先等待元素快速移动,并且由于该项不可用而失败。我正在使用的页面是HTML5/Angular。我的问题是-有没有更有效的方法来等待一个项目,然后点击它?我在下面所做的工作很好,但必须等待,然后单击,然后等待下一件事,然后反复单击似乎不是最好的方法 设置:Angularjs Selenium/Ruby-等待,然后单击?,angularjs,selenium,Angularjs,Selenium,如果我运行脚本时没有首先等待元素快速移动,并且由于该项不可用而失败。我正在使用的页面是HTML5/Angular。我的问题是-有没有更有效的方法来等待一个项目,然后点击它?我在下面所做的工作很好,但必须等待,然后单击,然后等待下一件事,然后反复单击似乎不是最好的方法 设置: def wait_for(timeout = 55) Selenium::WebDriver::Wait.new(:timeout => timeout).until { yield } end def
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
我们在QA脚本中遇到了类似的问题,我们的解决方案是隐藏元素(ng hide),直到控制器和服务完成所有工作。我认为您的问题是,在构建和填充时,角度视图代码可能都是可见的,因此Selenium通过了显示检查,但实际上还不能使用它。QA最好将其隐藏起来,直到功能正常为止。所以我认为您在角度上完全正确,所有的东西都是可见的,但不可用。不过,我自己也要想办法解决这个问题,dev肯定不会在这方面为我做任何改变。老实说,你的解决方案可能是最好的选择。当我开始使用WebDriver时,我写的第一件事就是一个类似于您自己的“等待并单击”功能。我不太熟悉Ruby绑定,但如果您没有使用显式等待,请使用它而不是隐式等待。