0

自動化しようとしているクライアント証明書ベースの認証を使用するアプリケーションがあります。別の証明書を選択することで、ユーザーは別のアプリケーション権限を取得できます。アイデアは、watir-webdriverベースのスクリプトとrautomationgem を使用してアプリケーションにログインすることです。Chrome Web ブラウザーでは、次のように表示されます。

クライアント証明書

基本的な考え方は次のとおりです。

require 'watir-webdriver'
require 'rautomation'

b = Watir::Browser.new :chrome  
b.goto 'https://example.com' 

# Get the Chrome window
window = RAutomation::Window.new(:title => /Chrome/i)
# Select client certificate     
window.send_keys :return

ただし、スクリプトが実行されて到達すると、b.goto 'https://example.com'証明書が選択されるまでページが読み込まれないため、スタックします。60 秒後にクライアントがタイムアウトになり、Net::ReadTimeout例外が発生します。したがって、証明書選択のコードに到達することはありません。

Net::ReadTimeout例外をキャッチしてこれを解決しました:

begin
 b.goto 'https://example.com' 
rescue      
  window = RAutomation::Window.new(:title => /Chrome/i)   
  window.send_keys :return
end

スクリプトが実行を開始するまで 60 秒待たなければならないため、このソリューションは最適とは言えません。次のコードを使用して、タイムアウトを妥当な待機時間まで短縮できます。

client = Selenium::WebDriver::Remote::Http::Default.new
client.timeout = 5 # seconds – default is 60
b = Watir::Browser.new :chrome, :http_client => client

しかし、スクリプトの残りのclient.timeout5 秒では短すぎます。

問題があると思ったgotoので、他の方法を試しましたが、すべて同じように動作するようです:

b.driver.navigate.to 'https://example.com' # => Net::ReadTimeout
b.execute_script('window.location.href = "https://example.com"') # => Net::ReadTimeout

上記のクライアント証明書を処理するための最適化のアドバイスやその他の最適な方法を教えてもらえますか?

4

2 に答える 2

3

Threadここであなたを助けませんか?Ruby (グローバル インタープリター ロック) と基礎となる Webdriver の技術に依存するため、そうなるかどうかはGILわかりませんが、試してみることはできます。

これらの行に沿った何かが機能する可能性があります(テストされていません):

t = Thread.start { b.goto }

# Not sure if getting handle works or not, but if it does
# then it should be a better way to locate the browser window
window = RAutomation::Window.new(:hwnd => b.window.handle)

# Wait until client certificate window exists
RAutomation::WaitHelper.wait_until { window.windows.any? { |w| w.text =~ /Select a certificate/ }}

# Select client certificate     
window.send_keys :return

# Wait for the page load to finish
t.join
于 2015-12-15T21:43:25.743 に答える
0

Watir は、ブラウザーでレンダリングされたページでのみ機能します。証明書を完全に無視してみてください。http://watirwebdriver.com/browser-certificates/

于 2015-12-02T15:02:59.643 に答える