1

这件事似乎给我一个又一个问题。

我之前发布了另一个问题,试图解决通过 Watir 在关闭和打开之间保留会话状态的问题。Firefox 自己实现了这一点,所以我想如果我正确设置首选项,它会保存我的状态。selenium-webdriver为了在现实中实现这一点,我最终不得不进入源代码并进行一些更改。

所以,我只是在测试我的应用程序。它的部分行为是遍历一堆页面并从中提取文本。当它在循环时,我只是将它放在一个真正的循环中,并想“嘿,我可以用 Ctrl+C 停止程序”。好吧,到目前为止,这一切都很好,直到它拯救了国家。

Ctrl+C导致它不保存其状态。我的猜测是为什么你需要真正关闭浏览器(我实际上在 IRB 中重新创建了错误,所以我很确定是这种情况)。很简单,对吧?为什么不直接在其中使用一个ensure@browser.close呢?这是我的第一个想法。

因此,当我以这种方式尝试时,它确实命中了该ensure块,并且该ensure块调用了一个名为kill. 杀死电话@browser.close if @browser.exists?。问题是,当它尝试执行这一行时,我会得到一个很长的错误列表,导致selenium-webdriver. 似乎它正在尝试将 HTTP 请求作为其close功能的一部分,并且失败是因为可能Ctrl+C退出了应用程序。

堆栈跟踪位于https://gist.github.com/Inkybro/5557085

我想到的最后一件事是,也许我需要完成对对象的任何调用,所以我在这些代码周围@browser放置了一堆trap('INT', 'IGNORE')和行。trap('INT', 'DEFAULT')这似乎也不起作用。

我不太确定为什么,这就是我在这里发帖的原因。我认为需要发生的是,在Ctrl+C需要完成处理之前正在进行的任何处理都@browser.close可以被调用。如果有人有使用 Watir 和/或 Selenium 的经验,或者即使你没有,也许你可以帮助我?

4

2 回答 2

1

您应该测试浏览器本身还是您的产品?因为实际上,如果您正在执行上述操作(登录、关闭并重新打开浏览器以查看您是否仍然登录),在我看来,您基本上是在测试浏览器存储和读取 cookie 的能力并正确在发出页面请求时提供它们。

如果您暂时假设浏览器实际上在 cookie 管理和使用方面做了它应该做的事情,那该怎么办?如果你这样做,那么什么变得重要?我认为您的应用程序会告诉浏览器使用正确的内容创建正确的 cookie。

因此,也许与其实际尝试测试firefox是否会正确使用它的cookie(或任何其他浏览器这样做),为什么不简单地测试用户登录时是否已创建正确的cookie?您可能还需要测试 cookie 是否会定期更新,以便用户的会话在他们积极使用网站时不会过期。再次很容易通过查看 cookie 进行测试

您可能还想测试您的服务器是否对 cookie 的更改或丢失的 cookie 敏感。服务器正在查看 cookie 并且不依赖于会话变量,这也很容易测试、登录、更改或清除 cookie,尝试访问页面并查看它是否失败。

因此,您将获得三件事 1) 登录时创建的正确 cookie。2) Cookie 会随着各种页面的访问而不断更新。3) cookie 丢失或更改 == 您的用户没有汤。(#4 网站正常工作,如果上面三个和所有其他测试你的网站/应用程序暗示存在 cookie)

停止尝试做 Mozilla 测试团队的工作,重新专注于测试您的应用程序。

于 2013-05-16T23:17:04.110 回答
1

我仍然不确定您尝试实现什么,但是这段 hacky 代码确保浏览器在 Ctrl+C 上关闭,并且不会引发您的异常:

require 'watir-webdriver'

begin
  browser = Watir::Browser.new
  loop do
    # some code
  end
rescue SystemExit, Interrupt
  puts 'Exiting!'
ensure
  begin
    browser.close
  rescue Errno::ECONNREFUSED
    # do nothing
  end
end
于 2013-05-17T16:56:19.870 回答