我尝试关闭Watir浏览器时连接被拒绝错误?

时间:2013-05-10 19:57:10

标签: ruby selenium selenium-webdriver watir watir-webdriver

这件事似乎在问题之后给我带来了问题。

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

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

Ctrl+C导致它不保存其状态。我猜测为什么你需要实际关闭浏览器(我实际上在IRB中重新创建了bug,所以我很确定就是这种情况)。简单吧?为什么不在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的经验,或者即使你没有,也许你可以帮助我?

2 个答案:

答案 0 :(得分:1)

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

如果你假设浏览器实际上做了与cookie管理和使用有关的事情,那该怎么办呢?如果你这样做,那么重要的是什么?我认为应用程序会告诉浏览器使用正确的内容创建正确的cookie。

所以也许而不是实际尝试测试firefox实际上会正确地使用它的cookie(或任何其他浏览器就此而言)为什么不简单地测试用户登录后的那个,正确的饼干已经创建?您可能还必须测试cookie是否定期更新,以便用户的会话在他们积极使用网站时不会过期。通过查看cookie再次非常容易测试

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

所以你得到了三件事  1)登录时创建正确的cookie。  2)随着各种页面的访问,Cookie会不断更新。  3)缺少或改变cookie ==没有汤给你的用户。  (#4网站如果上面提到的三个网站以及您运行网站/应用程序的所有其他测试都暗示了cookie,则可以正常工作)

停止尝试执行mozilla测试团队的工作,并重新关注测试您的应用程序。

答案 1 :(得分: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