我在Windows计算机上的红宝石矿有这样的:变化进程优先级
require 'watir-webdriver'
Before do
@browser = Watir::Browser.new :ie
end
我需要改变@browser以更高的优先级运行,因为一些时间我遇到的问题是在其他程序同时运行时引起的。我知道如何增加超时时间,但经过一些测试后,我发现我必须设置超出我认为可以接受的时间。
我在Windows计算机上的红宝石矿有这样的:变化进程优先级
require 'watir-webdriver'
Before do
@browser = Watir::Browser.new :ie
end
我需要改变@browser以更高的优先级运行,因为一些时间我遇到的问题是在其他程序同时运行时引起的。我知道如何增加超时时间,但经过一些测试后,我发现我必须设置超出我认为可以接受的时间。
浏览文档和代码,我没有看到任何准备的方式找到IE的进程ID,该驱动程序使用。您可以尝试使用系统工具来发现在Web驱动程序端口上侦听的进程(默认为5555)并禁止该进程。 POSIX上,你可以尝试lsof
或netstat
找到使用特定端口的过程,我不知道怎么帮你的窗户。
当然,如果这是一个资源竞争的问题,你为什么不只是给你的Watir测试一个更好的控制环境,没有其他的东西,防止它在您需要的速度运行。
我发现,你其实可以从深找webdriven浏览器的PID的@browser
对象(阅读所有受保护和私有组件)内,然后renice
其与负数增加优先级,这可能需要sudo
被允许由非root用户。
我已经探索exporting this object到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的东西发生在DISPLAY:99由Xvfb或Xephyr托管,我可以更有选择性地使用xprop
和xwininfo
等工具的帮助下,更有选择性地使用kill
/xkill
。
编辑 为了完整起见,这里的的Unix/Cygwin的命令,我用它来发送kill
命令到的Watir-webdriver的浏览器的PID,如果我需要:
awk '/pid:/ {print $2;}' browserObj.yaml |xargs -rt kill
哦,等你使用Windows。不要忘了关于'sudo'的一点。如果你使用Cygwin,'renice'确实会出现,否则可能有人可以使用更多的本地方法来为脚本/脚本提供更高的优先级。我以前使用短的.vbs脚本来做这件事,也许Sysinternals也有。 – Marcos 2012-04-28 21:23:41
关闭其他程序。 – 2012-04-28 03:56:56