Selenium测试HTTPs信任所有证书适用于FF但不适用于IE

时间:2010-08-26 13:59:06

标签: selenium selenium-rc

我一直在使用Selenium RC进行功能测试。

当测试进入我们网站的登录页面并切换到 HTTPS 时,我一直遇到问题。

我不断更改设置但是,每个浏览器都会失去工作。

使用** iehta *和** chrome *作为我的浏览器和信任所有SSL证书& 确保清理会话设置我可以让FF3登录我们的网站,但IE会抛出“此网站的安全证书存在问题。”错误。 (我已安装证书)

为什么不信任所有证书都可以与IE一起使用?

6 个答案:

答案 0 :(得分:6)

有两个步骤。一种是使用“-trustAllSSLCertificates”选项启动服务器,另一种是将浏览器配置为使用Selenium服务器作为其代理。 * iexploreproxy和* firefoxproxy为您处理代理设置。如果使用“-trustAllSSLCertificates”标志,Selenium(从2.0a5开始)将自动配置* firefox以使用Selenium服务器作为代理。使用HTA的iexplore永远不会被Selenium配置为使用代理。因此,您需要先处理或通过自定义启动器处理。

以下文章中的更多详细信息:http://nirvdrum.com/2010/04/13/how-to-accept-self-signed-ssl-certificates-in-selenium.html

答案 1 :(得分:1)

我已设法通过设置-trustAllSSLCertificates来实现此功能 并在FireFox中创建默认配置文件。

到目前为止,我可以愉快地使用任一浏览器,而不用担心出现不受信任的证书错误。

值得注意的是,我告诉selenium使用的浏览器只是* chrome和* iehta。

答案 2 :(得分:1)

我没有在最新版本的Selenium RC中看到此错误,即2.31.0。如果您正在使用:

RemoteControlConfiguration rc= new RemoteControlConfiguration();
    rc.trustAllSSLCertificates();
    SeleniumServer server;
    server=new SeleniumServer(rc);

答案 3 :(得分:0)

由于一些随机的原因,IE现在看起来很好,所以我坚持使用配置,并尝试对FF问题进行排序。

答案 4 :(得分:0)

这个答案没有直接回答“为什么不信任所有证书都可以与IE一起使用?”,但它确实提供了一个问题的答案,这个问题很可能引起了这里提出的问题。即对于任何将Selenium作为Windows服务运行并发现它不信任其自签名证书的人。

问题

IE不信任root并发布自签名权限的证书,因此呈现请求用户决定他/她是否想要继续并信任该站点的页面。这可以防止任何硒测试进展。

解决方案

该解决方案在概念上相对简单且合乎逻辑,根证书和颁发证书必须作为可信证书安装在计算机上。

但是,如果服务在系统帐户下运行,则复杂性在于使运行Selenium RC的Windows服务信任证书。要纠正此问题,需要执行以下步骤。

  1. 将根证书安装为计算机范围的受信任证书颁发机构。
  2. 将颁发证书安装为计算机范围的中间证书颁发机构
  3. 将证书添加到本地计算机的“受信任的根证书颁发机构”商店

    管理员是完成此过程所需的最低组成员资格。

    将证书添加到本地计算机的“受信任的根证书颁发机构”存储

    1. 单击“开始”,单击“开始搜索”,键入mmc,然后按Enter。
    2. 在“文件”菜单上,单击“添加/删除管理单元”。
    3. 在“可用的管理单元”下,单击“证书”,然后单击“添加”。
    4. 在“此管理单元将始终管理证书”下,单击“计算机帐户”,然后单击“下一步”。
    5. 单击“本地计算机”,然后单击“完成”。
    6. 如果您没有更多管理单元要添加到控制台,请单击“确定”。
    7. 在控制台树中,双击“证书”。
    8. 右键单击“受信任的根证书颁发机构”商店。
    9. 单击“导入”以导入证书,然后按照“证书导入向导”中的步骤进行操作。
    10. 将证书添加到本地计算机的中间证书颁发机构商店

      1. 在控制台树中,双击“证书”。
      2. 右键单击“中级证书颁发机构”商店。
      3. 单击“导入”以导入证书,然后按照“证书导入向导”中的步骤进行操作。

答案 5 :(得分:0)

IE将cert错误显示为普通的html页面。既然如此,您可以找到该元素并在其上执行.click()作为临时解决方法。 :)你可以创建一个cert帮助程序类来执行它并只执行cert.acceptCert(driver);