在Selenium Grid环境中使用Watir-WebDriver绕过证书错误

时间:2014-09-26 15:34:58

标签: ruby ssl internet-explorer-8 watir-webdriver selenium-grid

我已经设置了一个带有4个Windows(IE8,IE9,IE10,IE11)虚拟机的网格环境和一个带有Chrome和Firefox的Ubuntu 12.04虚拟机。

Selenium网格和节点版本为2.41.0 至于ruby,我正在使用rvm,并使用ruby 2.1.2p95(2014-05-08修订版45877)[x86_64-linux]

我正在驾驶CentOs VM进行测试。现在,当我尝试运行IE8测试时,我看到远程Windows机器启动IE8,但首先在浏览器中收到消息:

“这是WebDriver服务器的初始启动页面。”

后来我又得到了另一个带有证书警告的页面。

证书错误:导航已被阻止 错误: 本网站提供的安全证书不是由受信任的证书颁发机构颁发的。 安全证书问题可能表示试图欺骗您或拦截您发送到服务器的任何数据

我试图做注册表黑客攻击,使IE8中的所有4个安全级别相等      HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones      HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones

并均衡所有区域中0x2500位置的值。

但似乎没有用。 这里的任何想法是什么工作解决方案是ruby / watir-webdriver

这是基类

#!/usr/bin/env ruby -W0
require "rubygems"
require "test/unit"
require 'rspec'
require 'watir-webdriver'
require 'headless'
require 'mysql2'
require_relative 'lib/basic_ops'
require_relative 'data/data'
require_relative 'main_class'

include  GC
caps = Selenium::WebDriver::Remote::Capabilities.ie
caps.version = "8"
caps[:name] = "IE 8 on win7 , port 5560"

    BROWSER = Watir::Browser.new(
    :remote,
    :url => "http://selenium-hub-vm:4444/wd/hub",
    :desired_capabilities => caps)

URL = "https://target-vm/"
BROWSER.window.resize_to(950, 750)
BROWSER.window.move_to(0, 0)

main_class

所以main_class.rb是所有浏览器交互的地方。

2 个答案:

答案 0 :(得分:1)

您可以使用javascript来传递安全证书问题。我之前从未在Ruby中编码,因此语法可能有点偏差。

Python代码:

<% var _catBreeds = [['siamese', 'Siamese'], ['persian', 'Persian'], ...]; %>
<select id="cat-breed">
   <% for (var i = 0; i < _catBreeds.length; i++) { %>
   <option value="<%= _catBreeds[i][0] %>" <% if (catBreed === _catBreeds[i][0]) { %> 
           selected <% } %> >
       <%- _catBreeds[i][1] %>
   </option>
   <% } %>
</select>

Ruby尝试:

<% function options(vals, selectedVal) {
  // Can be moved into a helper library and injected when compiling template
  vals.forEach(function (val, i) {%>
    <option value="<%- val[0] %>" <%= (val[0] == selectedVal) ? "selected" : "" %>><%- val[1] %></option> <%
  });
} %>
<select id="cat-breed">
  <% options([["persian", "Persian"], ...], catBreed) %>
</select>

您可能还需要 if 语句,以便检查您需要的条件。

driver.get("javascript:document.getElementById('overridelink').click()")

如果我的建议都不起作用,以下thread会有类似的解决方案。

希望这有助于或接近您的需求。

答案 1 :(得分:0)

我所做的是添加证书,但没有删除证书错误,因此我使用了:

@browser.link(:id, "overridelink").click

之后

@browser.goto("https://<URL>/")