【发布时间】:2013-05-18 00:56:19
【问题描述】:
这件事似乎给我一个又一个问题。
我之前发布了另一个问题,试图通过 Watir 解决在关闭和打开之间保留会话状态的问题。 Firefox 自己实现了这一点,所以我想如果我正确设置首选项,它会保存我的状态。我最终不得不进入selenium-webdriver 源并进行一些更改以实现这一目标。
所以,我只是在测试我的应用程序。它的部分行为是遍历一堆页面并从中提取文本。当它在循环时,我只是将它放在一个真正的循环中,并想“嘿,我可以用 Ctrl+C 停止程序”。好吧,到目前为止,这一切都很好,直到它拯救了国家。
Ctrl+C 导致它不保存其状态。我的猜测是为什么您需要实际关闭浏览器(实际上我在 IRB 中重新创建了错误,所以我很确定是这种情况)。很简单,对吧?为什么不直接使用带有@browser.close 的ensure 块呢?这是我的第一个想法。
所以,当我这样尝试时,它确实命中了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 的经验,或者即使你没有,也许你可以帮助我?
【问题讨论】:
标签: ruby selenium selenium-webdriver watir watir-webdriver