更改由rubyWatir Webdriver创build的浏览器的进程优先级

我在ruby的电脑上有这个:

require 'watir-webdriver' Before do @browser = Watir::Browser.new :ie end 

我需要更改@browser以更高的优先级运行,因为在其他程序同时运行时,会导致出现问题。 我知道如何增加超时时间,但经过一些testing后,我发现我必须把时间设定得高于我认为可以接受的时间。

我发现你实际上可以在@browser对象的内部找到webdriven浏览器的PID(读取所有受保护的和私有的组件),然后用一个负数来renice它以增加优先级,这可能需要sudo被非允许 – 根用户。

我已经探索出口这个对象到一个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:seleniumium::WebDriver::Firefox::Launcher binary: !ruby/object:seleniumium::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:0,而我的Watir Webdriver的东西发生在DISPLAY:99由Xvfb或Xephyr托管,我可以更有选择地kill / xkill工具,如xpropxwininfo的帮助。

编辑为了完整起见,下面是我用来发送kill命令给watir-webdriver浏览器的pid的Unix / Cygwin命令,如果我需要的话:

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

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

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