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