我在windows计算机上的ruby mine中有这个:
require 'watir-webdriver'
Before do
@browser = Watir::Browser.new :ie
end
我需要更改@browser以更高的优先级运行,因为我得到的一些超时问题是在其他程序同时运行时引起的。我知道如何增加超时所允许的时间,但经过一些测试后我发现我必须将时间设置得比我认为可以接受的时间更长。
答案 0 :(得分:1)
我发现你实际上可以从@browser
对象的深处找到webdriven浏览器的PID(读取所有受保护和私有组件),然后使用负数renice
来增加优先级,可能需要非root用户允许sudo
。
我已经将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事件发生在由Xvfb或Xephyr托管的DISPLAY:99上,我可以借助工具更有选择性kill
/ xkill
例如xprop
和xwininfo
。
修改强>
为了完整性,这是我用来向watir-webdriver浏览器的pid发送kill
命令的Unix / Cygwin命令,如果我需要:
awk '/pid:/ {print $2;}' browserObj.yaml |xargs -rt kill
答案 1 :(得分:0)
浏览文档和代码我没有看到任何现成的方法来查找驱动程序使用的IE的进程ID。您可以尝试使用系统工具来发现正在侦听Webdriver端口的进程(默认为5555)并确定该进程。在posix上,您可以尝试lsof
或netstat
使用特定端口查找进程,我不知道如何在Windows上帮助您。
当然,如果这是一个资源竞争问题,你为什么不给你的watir测试一个更好的控制环境,没有其他东西阻止它以你想要的速度运行。