Ruby 尝试关闭Watir浏览器时出现连接被拒绝错误?
这件事似乎给我带来了一个又一个问题 我之前发布了另一个问题,试图通过Watir解决在关闭和打开会话之间保持会话状态的问题。Firefox本身就可以实现这一点,所以我想如果我只是正确设置了首选项,它就会保存我的状态。最后,我不得不进入SeleniumWebDriver的源代码中进行一些更改,以便在现实中实现这一点 所以,我只是在测试我的应用程序。它的部分行为是循环浏览一堆页面并从中提取文本。当它循环时,我只是将它放在一个While-true循环中,并计算“嘿,我可以用Ctrl+C停止程序”。到目前为止,这一切都很好,直到它拯救了美国Ruby 尝试关闭Watir浏览器时出现连接被拒绝错误?,ruby,selenium,selenium-webdriver,watir,watir-webdriver,Ruby,Selenium,Selenium Webdriver,Watir,Watir Webdriver,这件事似乎给我带来了一个又一个问题 我之前发布了另一个问题,试图通过Watir解决在关闭和打开会话之间保持会话状态的问题。Firefox本身就可以实现这一点,所以我想如果我只是正确设置了首选项,它就会保存我的状态。最后,我不得不进入SeleniumWebDriver的源代码中进行一些更改,以便在现实中实现这一点 所以,我只是在测试我的应用程序。它的部分行为是循环浏览一堆页面并从中提取文本。当它循环时,我只是将它放在一个While-true循环中,并计算“嘿,我可以用Ctrl+C停止程序”。到目前
Ctrl+C
使其不保存状态。我猜原因是你需要关闭浏览器(我实际上在IRB中重新创建了这个bug,所以我很确定这是真的)。很简单,对吧?为什么不在@浏览器中使用确保块。在其中关闭?这是我的第一个想法
因此,当我以这种方式尝试时,它确实命中了sure
块,sure
块调用了一个名为kill
的方法。如果@browser.exists存在,则终止呼叫@browser.close?
。问题是,当它尝试执行这一行时,我得到了一个很长的错误列表,导致seleniumwebdriver
。它似乎试图发出HTTP请求作为其close
功能的一部分,但失败的原因可能是Ctrl+C
退出了应用程序
堆栈跟踪位于
我最后想到的是,可能我需要让对@browser
对象的任何调用都完成,所以我在这些代码段周围放置了一堆trap('INT','IGNORE')
和trap('INT','DEFAULT')
行。这似乎也不起作用
我真的不知道为什么,这就是为什么我在这里张贴。我认为需要发生的是,在Ctrl+C
时正在进行的任何处理都需要在@browser.close可以调用之前完成处理。如果有人有使用Watir和/或Selenium的经验,或者即使你没有,也许你可以帮我一把?你应该测试浏览器本身还是你的产品?因为事实上,如果你在做上述事情,(登录、关闭并重新打开浏览器以查看是否仍在登录),我觉得你基本上是在测试浏览器存储和读取cookie的能力,并在请求页面时正确提供cookie
如果您假设浏览器实际上在cookie管理和使用方面做了它应该做的事情,那又如何呢?如果你这样做,那么什么变得重要?我认为你的应用程序会告诉浏览器创建具有适当内容的适当cookie
因此,与其测试firefox是否会正确使用其Cookie(或者其他浏览器是否会正确使用),不如干脆测试用户登录后是否创建了正确的Cookie?您可能还必须测试cookie是否定期更新,以便用户在积极使用站点时会话不会过期。再简单一点,只要看看饼干就可以测试了
您可能还希望测试服务器是否对cookie中的更改或丢失的cookie敏感。服务器正在查看cookie并且不依赖于会话变量,这也非常容易测试、登录、更改或清除cookie,尝试访问页面并查看它是否失败
因此,你可以得到三样东西
1) 登录时创建的正确cookie。
2) Cookies在访问各种页面时保持更新。
3) 缺少或更改了cookie==您的用户没有汤。
(#如果上述三个测试和所有其他测试都暗示存在cookie,那么站点可以正常工作)
停止尝试做mozilla测试团队的工作,重新专注于测试您的应用程序 我仍然不确定您试图实现什么,但这段代码确保浏览器在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
我不知道你是否真的回答了他的问题,但至少你回答了我的问题。“如何在程序中断时正确关闭WATIR浏览器(ctrl+c)?”谢谢。:)