2012-04-27 85 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