我在 Windows 计算机上的 ruby mine 中有这个:
require 'watir-webdriver'
Before do
@browser = Watir::Browser.new :ie
end
我需要将@browser 更改为以更高的优先级运行,因为当其他程序同时运行时会出现一些超时问题。我知道如何增加允许超时的时间,但经过一些测试后,我发现我必须将超时设置得比我认为可以接受的要高。
我在 Windows 计算机上的 ruby mine 中有这个:
require 'watir-webdriver'
Before do
@browser = Watir::Browser.new :ie
end
我需要将@browser 更改为以更高的优先级运行,因为当其他程序同时运行时会出现一些超时问题。我知道如何增加允许超时的时间,但经过一些测试后,我发现我必须将超时设置得比我认为可以接受的要高。
我发现您实际上可以从对象深处找到网络驱动浏览器的 PID @browser
(读取所有受保护和私有组件),然后renice
使用负数来提高优先级,这可能需要sudo
非 root 用户允许。
我已经探索了将这个对象导出为 ASCII 格式进行存储,这实际上是可行的,尽管将其导入回来是另一个问题的主题。试试这个(每次我的代码启动一个新的代码时,我这样做只是为了好玩Watir::Browser
):
require "yaml"
File.open("browserObj.yaml", 'w').write YAML::dump($browser)
然后,当您查看此文件browserObj.yaml时,它会为您提供各种有趣的信息,例如:
server_url: !ruby/object:URI::HTTP
fragment:
host: 127.0.0.1
opaque:
parser:
password:
path: /hub/
port: 7055
query:
registry:
scheme: http
user:
timeout:
launcher: !ruby/object:Selenium::WebDriver::Firefox::Launcher
binary: !ruby/object:Selenium::WebDriver::Firefox::Binary
process: !ruby/object:ChildProcess::Unix::ForkExecProcess
args:
- ./firefox.sh
- -no-remote
- -foreground
detach: false
duplex: false
environment: {}
exit_code:
io:
pid: 6114
started: true
请注意最后第二行中的 PID,此时您的代码可以轻松检测并执行任何操作。
这甚至比简单地用例如解析分层进程树更安全。pstree -panu $PPID
查找子浏览器进程。
在我自己的东西中,我实际上并不打扰(例如,当我需要杀死正确的 Firefox 进程而不是其他进程时),因为我通过 DISPLAY 去。我所有的桌面/交互式用户的东西都发生在 DISPLAY :0 上,而我的 Watir Webdriver 的东西发生在由 Xvfb 或 Xephyr 托管的 DISPLAY :99 上,我可以更有选择性地kill
/xkill
借助xprop
和xwininfo
.
编辑kill
为了完整起见,如果需要,这是我用来向 watir-webdriver 浏览器的 pid
发送命令的 Unix/Cygwin 命令:
awk '/pid:/ {print $2;}' browserObj.yaml |xargs -rt kill
浏览文档和代码,我没有看到任何现成的方法来查找驱动程序使用的 IE 的进程 ID。您可以尝试使用系统工具来发现正在侦听 webdriver 端口(默认 5555)的进程并对该进程进行 nicing。在 posix 上,您可以尝试lsof
或netstat
使用特定端口查找进程,我不知道如何在 Windows 上为您提供帮助。
当然,如果这是一个资源竞争问题,你为什么不给你的 watir 测试一个更好的受控环境,没有其他东西阻止它以你想要的速度运行。