我在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