2012-04-27 86 views
1

我在Windows计算机上的红宝石矿有这样的:变化进程优先级

require 'watir-webdriver' 

Before do 
    @browser = Watir::Browser.new :ie 
end 

我需要改变@browser以更高的优先级运行,因为一些时间我遇到的问题是在其他程序同时运行时引起的。我知道如何增加超时时间,但经过一些测试后,我发现我必须设置超出我认为可以接受的时间。

+1

关闭其他程序。 – 2012-04-28 03:56:56

回答

0

浏览文档和代码,我没有看到任何准备的方式找到IE的进程ID,该驱动程序使用。您可以尝试使用系统工具来发现在Web驱动程序端口上侦听的进程(默认为5555)并禁止该进程。 POSIX上,你可以尝试lsofnetstat找到使用特定端口的过程,我不知道怎么帮你的窗户。

当然,如果这是一个资源竞争的问题,你为什么不只是给你的Watir测试一个更好的控制环境,没有其他的东西,防止它在您需要的速度运行。

1

我发现,你其实可以从深找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托管,我可以更有选择性地使用xpropxwininfo等工具的帮助下,更有选择性地使用kill/xkill

编辑 为了完整起见,这里的的Unix/Cygwin的命令,我用它来发送kill命令到的Watir-webdriver的浏览器的PID,如果我需要:

awk '/pid:/ {print $2;}' browserObj.yaml |xargs -rt kill 
+1

哦,等你使用Windows。不要忘了关于'sudo'的一点。如果你使用Cygwin,'renice'确实会出现,否则可能有人可以使用更多的本地方法来为脚本/脚本提供更高的优先级。我以前使用短的.vbs脚本来做这件事,也许Sysinternals也有。 – Marcos 2012-04-28 21:23:41