【问题标题】:Getting Watir to wait until all 3rd party scripts have loaded让 Watir 等到所有 3rd 方脚本都加载完毕
【发布时间】:2013-09-02 10:26:42
【问题描述】:

问题

自从更改了一些 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

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

【问题讨论】:

  • 您首先看到了什么问题?
  • Watir 拒绝对元素进行操作,即使它们在 DOM 中,我认为是因为它正在等待这些第三方连接。
  • 显示使用您正在使用的代码,哪些会引发错误,哪些会引发错误。在我看来,您认为元素在 DOM 中,但实际上并非如此。例如,Watir 可能会在该元素进入 DOM 之前尝试访问它。如果你使用不同的等待函数会发生什么?

标签: css ruby rspec watir watir-webdriver


【解决方案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 配合得非常好。

【讨论】:

  • 我曾考虑过使用睡眠,但它太脆弱了 - 如果互联网连接挂起 10 秒,我需要将其设置为 11 秒,这很好,但是当连接为 100% 时我的测试将无缘无故地运行 11 秒。
  • 是的,同意 - 不要在测试中使用sleep。这真是个坏主意。
【解决方案2】:

this answer

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

【讨论】:

    猜你喜欢
    • 2019-02-24
    • 2011-06-14
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    相关资源
    最近更新 更多