2012-03-03 24 views
0

私はブラウザを制御するためにWATIRを使用していますが、すべてがスタックしているページはありません。 60秒のタイムアウト後、WATIRは私にエラーを与え、私はコマンドを書き続けますが、WATIRを使ってブラウザを閉じると、すべての機能が停止します。Ruby:Chromeのプロセスを終了

私がブラウザを手動で閉じると、すべてがうまくいくように見えるので、私はchromeプロセスID、PIDを見つけて、ルビを使ってプロセスを終了するオプションを探しています。

IRB

require "watir-webdriver" 

proxy = "78.159.102.86:49295" 
browser = Watir::Browser.new :chrome, :switches => ['--proxy-server=' + proxy] 

bridge = browser.instance_variable_get(:@bridge) 
launcher = bridge.instance_variable_get(:@launcher) 
binary = launcher.instance_variable_get(:@binary) 
process = binary.instance_variable_get(:@process) 
process.pid 

すべてこの方法は私にNILを与える:ここで

は、私が見つけたコードサンプルです。 最後の1つ - NoMethodError:未定義メソッド `pid 'for nil:NilClass

私の研究から、私はPIDを取得する必要があると思います。 それから私はプロセスを閉じることができます。

ヒント?私は窓を使用しています! これまでのところ、Rubyに名前でプロセスを殺す方法はありません。

編集:

私は、Windowsのコマンドラインからどのような作品が見つかりました:

taskkill /im Firefox.exe /f /t >nul 2>&1 

しかし、私はルビーの上だので、それは私にエラーを与える:

SyntaxError: (irb):1: unknown regexp option - f (irb):1: syntax error, unexpected tINTEGER, expecting keyword_do or '{' or '(' taskkill /im Firefox.exe /f /t >nul 2>&1

cmdのコマンドを実行する方法ルビーから?

+0

実行しているOSはどれですか? – Yossi

+0

私は窓にいる! – user1237898

+0

ロックがかかっているようにクロムがつまっていますので、手動で閉じることはできません。開発チームに影響がある場合は、問題を解決するように依頼してください。 –

答えて

2

私はシステムがウィンドウ上で動作するのかどうかはわかりませんが、試してみてください。

system("taskkill /im Firefox.exe /f /t >nul 2>&1") 
0

あなたはこれを行うことができます。

a)のクローム・プロセスのPIDを取得:

system("taskkill pid #{browser_pid} /f /t >nul 2>&1") 
0

サンプルコード:

browser_pid = @browser.driver.instance_variable_get(:@bridge).instance_variable_get(:@service).instance_variable_get(:@process).pid 

がシステム殺すためにbrowser_pidを渡しを@daremkdと組み合わされた元の投稿には、の内部変数があります。およびクロム。それらを一緒に入れて、ここで私はワチール-webdriverをワチール::ブラウザ#のPIDとして使用することがありますものです:

require 'watir-webdriver' 

module Watir 
    class Browser 
    def pid 
     if driver.browser == :firefox 
     [:@bridge, :@launcher, :@binary, :@process, :@pid] 
     elsif driver.browser == :chrome 
     [:@bridge, :@service, :@process, :@pid] 
     else 
     raise NotImplementedError.new "PID lookup undefined for Watir::Browser :#{driver.browser}" 
     end. 
     inject(browser.driver) { |pv, sym| pv.instance_variable_get sym } 
    end 
    end 
end 


ここでは両方のブラウザを閉じるために使用されるコンテキストで使用モンキーパッチです:

browser = Watir::Browser.new :firefox 
pid = browser.pid 
`taskkill /pid #{pid}` # browser.close 

browser = Watir::Browser.new :chrome 
pid = browser.pid 
`taskkill /pid #{pid} /f /t` # note the `/t` to kill the spawned tree 
関連する問題