0

就搜索而言,我找不到 watir 支持的浏览器的最新列表。

我刚刚将 firefox 升级到 18 版,在升级时,还将 watir-webdriver 版本更新到最新版本(使用gem update watir-webdriver)。

到目前为止,我遇到了一个问题,我似乎无法找到解决方案。

当我尝试检查一个元素是否存在时,可以说使用$browser.a(:href, "#{$url}/admin/").exists?$url变量被定义到我的测试服务器的主 url,所以这不是问题。此外,即使我用实际地址替换变量,我仍然遇到同样的问题),当元素存在时,我总是会收到超时错误。

当元素确实存在时,我会立即得到true. 所以超时问题仅在元素不存在时发生

所以我的问题是:

  1. 有没有办法使该.exists?方法起作用?
  2. 有谁知道最新版本的 Firefox(V. 18)还有其他类似的问题?
  3. 如果有人能指出我支持的 watir 浏览器的更新列表,我将不胜感激。最好是定期更新的列表。

PS,我确实看到有人发布了有关该present?方法的问题,我不知道它是否相关,但是我仍然没有解决方案。我不想降级到以前版本的ff。

非常感谢任何愿意提供帮助的人,

亲切的问候,阿萨夫。

4

1 回答 1

0

我到处都有这样的问题,解决方案是捕获异常并重新运行触发此异常的代码。当然,我假设你的异常是由一些暂时的原因触发的,可能是由 Watir 中的一个小故障触发的。

简而言之,您可以执行以下操作:

begin
  $browser.a(:href, "#{$url}/admin/").exists?
rescue Timeout::Error
  puts("Caught a TIMEOUT ERROR!")
  sleep(1)
  # Retry the sode that generates the esception.
  retry
end

这是最简单的形式。您还可以通过执行以下操作确保不要将自己锁定在无限循环中:

retries_left = 3
begin
  $browser.a(:href, "#{$url}/admin/").exists?
rescue Timeout::Error
  puts("Caught a TIMEOUT ERROR!")

  # You may want to wait for a while before retrying.
  sleep(1)

  # Retry the code that generates the exception.
  retries_left -= 1
  retry if retries_left > 0

  # No more retries left - time to bail out! Re-raise the exception.
  raise
end

您可以通过将此异常处理代码抽象为一个接受块并以更简洁的方式使用它的测试助手方法来改进这一点,而无需重复自己,例如:

handle_transient_exceptions {
  $browser.a(:href, "#{$url}/admin/").exists?
}

但这不是你问的。:)

关于你的第三个问题,我可以说 watir-webdriver 很好地支持最新的 Chrome、Firefox 和 IE9。我目前正在使用这些浏览器,还没有发现任何阻塞问题。

于 2013-01-17T10:45:44.993 回答