Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 尝试关闭Watir浏览器时出现连接被拒绝错误?_Ruby_Selenium_Selenium Webdriver_Watir_Watir Webdriver - Fatal编程技术网

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

Ruby 尝试关闭Watir浏览器时出现连接被拒绝错误?,ruby,selenium,selenium-webdriver,watir,watir-webdriver,Ruby,Selenium,Selenium Webdriver,Watir,Watir Webdriver,这件事似乎给我带来了一个又一个问题 我之前发布了另一个问题,试图通过Watir解决在关闭和打开会话之间保持会话状态的问题。Firefox本身就可以实现这一点,所以我想如果我只是正确设置了首选项,它就会保存我的状态。最后,我不得不进入SeleniumWebDriver的源代码中进行一些更改,以便在现实中实现这一点 所以,我只是在测试我的应用程序。它的部分行为是循环浏览一堆页面并从中提取文本。当它循环时,我只是将它放在一个While-true循环中,并计算“嘿,我可以用Ctrl+C停止程序”。到目前

这件事似乎给我带来了一个又一个问题

我之前发布了另一个问题,试图通过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)?”谢谢。:)