让Watir等到所有第三方脚本都加载完毕

时间:2013-09-02 10:26:43

标签: css ruby rspec watir watir-webdriver

问题

由于改变了一些CSS来加载来自Googlefonts的字体我发现偶尔在本地运行我们的Watir测试会失败,因为他们正在等待加载Googlefonts并且我们的连接已挂起或者只是花时间。

因为这是一个CSS加载问题,所以页面的所有元素都是可访问的,所以我不能使用类似wait_until_present的东西,因为这些东西存在,但Watir无论出于什么原因都不想玩用它。

我不希望在本地测试时将我的资产管道更改为不加载这些内容,因为这会破坏完整性测试的目的。

我尝试了什么

我试过传递类似的内容;

browser.wait.until do
  window_loaded = browser.execute_script '$(window).load(function() { return true; });'
  window_loaded == true
end

但我无法让这个工作,而且我不相信这是解决这个问题的正确方法。

2 个答案:

答案 0 :(得分:1)

取自:http://watirwebdriver.com/waiting/

require 'watir-webdriver'
b = Watir::Browser.start 'bit.ly/watir-webdriver-demo'
b.select_list(:id => 'entry_1').wait_until_present
b.text_field(:id => 'entry_0').when_present.set 'your name'
b.button(:value => 'Submit').click
b.button(:value => 'Submit').wait_while_present
Watir::Wait.until { b.text.include? 'Thank you' }

你也可以使用:

sleep 2

我个人使用sleep等待所有内容都加载完毕。与AJAX配合得非常好。

答案 1 :(得分:0)

请参阅this answer

begin
  Timeout::timeout(10) do
    # perform actions that may hang here
  end
rescue Timeout::Error => msg
  put "Recovered from Timeout"
end