自動化しようとしているクライアント証明書ベースの認証を使用するアプリケーションがあります。別の証明書を選択することで、ユーザーは別のアプリケーション権限を取得できます。アイデアは、watir-webdriver
ベースのスクリプトとrautomation
gem を使用してアプリケーションにログインすることです。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.timeout
5 秒では短すぎます。
問題があると思ったgoto
ので、他の方法を試しましたが、すべて同じように動作するようです:
b.driver.navigate.to 'https://example.com' # => Net::ReadTimeout
b.execute_script('window.location.href = "https://example.com"') # => Net::ReadTimeout
上記のクライアント証明書を処理するための最適化のアドバイスやその他の最適な方法を教えてもらえますか?