Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs Selenium/Ruby-等待,然后单击?_Angularjs_Selenium - Fatal编程技术网

Angularjs Selenium/Ruby-等待,然后单击?

Angularjs Selenium/Ruby-等待,然后单击?,angularjs,selenium,Angularjs,Selenium,如果我运行脚本时没有首先等待元素快速移动,并且由于该项不可用而失败。我正在使用的页面是HTML5/Angular。我的问题是-有没有更有效的方法来等待一个项目,然后点击它?我在下面所做的工作很好,但必须等待,然后单击,然后等待下一件事,然后反复单击似乎不是最好的方法 设置: def wait_for(timeout = 55) Selenium::WebDriver::Wait.new(:timeout => timeout).until { yield } end def

如果我运行脚本时没有首先等待元素快速移动,并且由于该项不可用而失败。我正在使用的页面是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  

我们在QA脚本中遇到了类似的问题,我们的解决方案是隐藏元素(ng hide),直到控制器和服务完成所有工作。我认为您的问题是,在构建和填充时,角度视图代码可能都是可见的,因此Selenium通过了显示检查,但实际上还不能使用它。QA最好将其隐藏起来,直到功能正常为止。

所以我认为您在角度上完全正确,所有的东西都是可见的,但不可用。不过,我自己也要想办法解决这个问题,dev肯定不会在这方面为我做任何改变。老实说,你的解决方案可能是最好的选择。当我开始使用WebDriver时,我写的第一件事就是一个类似于您自己的“等待并单击”功能。我不太熟悉Ruby绑定,但如果您没有使用显式等待,请使用它而不是隐式等待。