这件事似乎在问题之后给我带来了问题。
我之前发布了另一个问题,尝试通过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的经验,或者即使你没有,也许你可以帮助我?
答案 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