【发布时间】:2016-01-06 00:54:32
【问题描述】:
我有一个基于客户端证书的身份验证的应用程序,我一直在尝试将其自动化。通过选择不同的证书,用户可以获得不同的应用权限。这个想法是使用基于watir-webdriver 的脚本和rautomation gem 并登录到应用程序。在 Chrome 网络浏览器中,它看起来很像这样:
基本思路如下:
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
谁能为我提供优化建议或其他一些最佳方式来处理提到的客户端证书?
【问题讨论】:
标签: ruby google-chrome watir-webdriver client-certificates rautomation