如何在 Selenium

⚡ 智能摘要

SSL证书错误导致程序停止运行 Selenium 测试浏览器拒绝不受信任或已过期证书的时机,因此每个 WebDriver 脚本都需要一个特定于浏览器的功能来接受证书并允许自动化继续进行。

  • 🔘 定义: SSL 对浏览器和服务器之间的通信进行加密,证书则证明服务器的身份。
  • ☑️ 错误触发: 浏览器会阻止不受信任的、过期的、已吊销的或自签名的证书,并显示警告页面。
  • Firefox: A Firefox 在驱动程序启动之前,配置文件设置 setAcceptUntrustedCertificates 和 setAssumeUntrustedCertificateIssuer。
  • 🧪 Chrome: DesiredCapabilities 和 ACCEPT_SSL_CERTS 接受证书 Selenium 2和 Selenium 3.
  • 🛠️ Internet Explorer: A Java点击 overridelink 元素上的脚本会跳过警告页面。
  • ⚠️ Selenium 4: 在 ChromeOptions 中设置 setAcceptInsecureCerts, FirefoxOptions 或 EdgeOptions 取代了 DesiredCapabilities。

如何在 Selenium

SSL 证书 Selenium

SSL(安全套接字层)是一种标准安全协议,用于在服务器和客户端(即浏览器)之间建立安全连接。

SSL证书通过强大的加密和数字签名来保护服务器和客户端应用程序之间传输的数据。网站所有者可以安装SSL证书或代码签名证书。

SSL 证书的好处

使用 SSL 证书有很多好处,例如:

  • 可以提高用户和客户的信任,从而快速促进业务增长
  • 这些证书有助于保护在线交易和客户敏感信息(如信用卡/借记卡数据等)的安全。
  • 签名证书往往会获得最大的下载量和用户的好评。

SSL 保护的网站以 https:// 如果连接安全建立,您将看到锁定图标或绿色地址栏。

例如,如果你想通过网上银行进行一些交易,或者想购买 电话 通过 Flipkart 等电子商务网站打电话或 Amazon.

Web 浏览器和服务器之间发生了什么

  1. 浏览器尝试连接使用 SSL 保护的网站。浏览器请求网络服务器确认自己的身份
  2. 服务器向浏览器发送其 SSL 证书的副本
  3. 浏览器验证 SSL 证书是否真实。如果是,它会向服务器发送一条消息
  4. 服务器发回数字签名的确认信息以启动 SSL 加密会话
  5. 加密数据在服务器和浏览器之间共享

卡号和登录凭证会在该会话中传输,因此交易必须保持端到端加密,不能被拦截。

例如,下面的挂锁和地址栏确认证书已被接受。

  1. 类型 https://netbanking.hdfcbank.com/netbanking/ .
  2. 按Enter键。
  3. 您将在浏览器中看到一个绿色的地址栏,如下所示:-

浏览器中显示的绿色地址栏指向采用 SSL 加密的 HDFC 网上银行页面。

SSL 证书如何创建安全连接

下图 trac握手即是正式的握手,接下来的步骤将逐一解释每一次交流。

Web浏览器和Web服务器之间SSL握手的示意图

  1. 浏览器 向服务器发送 HTTPS 请求。
  2. 现在服务器必须向浏览器提供一些标识来证明它是可信的。这可以通过将其 SSL 证书的副本发送到浏览器来完成。
  3. 每个浏览器都有自己的受信任 CA 列表。 浏览器根据其受信任的 CA 列表检查证书根,确保证书未过期、未被撤销,并且通用名称对于其所连接的网站有效。
  4. 如果浏览器信任该证书,则会在服务器和浏览器之间创建加密会话。
  5. 服务器和浏览器可以发送加密消息

SSL证书的类型

浏览器和服务器使用SSL证书机制才能建立安全的连接。这个连接涉及三种类型的证书的验证。

  • 根源
  • 中级
  • 服务器证书

获取 SSL 证书的流程

获取 SSL 证书的过程包括以下步骤:-

  1. 首先,您必须创建 CSR(创建证书签名请求)请求。
  2. CSR 请求创建 CSR 数据文件,该文件被发送给称为 CA(证书颁发机构)的 SSL 证书颁发机构。
  3. CA 使用 CSR 数据文件为您的服务器创建 SSL 证书。
  4. 收到 SSL 证书后,您必须将其安装在您的服务器上。
  5. 还需要安装一个中间证书,将您的 SSL 证书与 CA 的根证书绑定在一起。

下图代表所有三个证书- 根证书、中间证书和服务器证书。

证书链,显示根证书、中间证书和服务器 SSL 证书

如何验证 SSL 证书

SSL 通过 Web 服务器计算机和 Web 服务器浏览器上存在的程序和加密/解密例程组合来工作。

SSL 证书主要包含以下信息。

  1. 主题是网站所有者的身份。
  2. 有效性信息——一个公钥和一个私钥。

私钥和公钥是两个唯一关联的加密密钥(数字)。任何由公钥加密的内容只能由私钥解密。浏览器在检查证书时会显示这些字段,如下所示。

证书详细信息窗格列出了主题、有效期和公钥

当服务器和客户端之间因证书而无法建立安全连接时,将出现以下SSL证书错误。

SSL 证书错误的类型

假设您输入一个 https 请求,浏览器返回“此连接不受信任”或“该网站的安全证书不受信任”。浏览器无法使用提供的证书建立安全连接,因此会停止请求并提示用户采取相应措施。

你可能在不同浏览器中看到的证书错误类型可能类似于以下内容

  1. 大火Fox - 当前连接不可信任
  2. Google Chrome 此网站的安全性不可信。
  3. 互联网浏览器 (IE) – 该网站提供的安全证书未受到受信任的证书颁发机构 (CA) 的信任

下面的屏幕截图显示了不受信任的证书产生的插页广告。

浏览器显示“不受信任的连接”警告页面,提示 SSL 证书无效。

如何使用处理 SSL 证书错误 Selenium 网络驱动程序

假设 测试脚本 会跳转到上面的“不受信任的连接”页面。需要调整脚本,使其能够完全通过自身处理 SSL 例外。 自动化.

此更改取决于所使用的浏览器实例,而这正是所需功能发挥作用的地方。所需功能配置驱动程序实例。 Selenium Webdriver,包括 ChromeDriver Firefox驱动程序和 Internet Explorer。

以下步骤可以添加到 Selenium 编写脚本以清除每个浏览器的“不受信任的连接”状态。

⚠️ Selenium 4 年备注: DesiredCapabilities 类在 Selenium 4. 浏览器选项类现在通过单一的 W3C 功能承载相同的设置, 接受不安全证书.

浏览器 Selenium 4班 电话联系
铬系列 ChromeOptions setAcceptInsecureCerts(true)
Firefox Firefox可选项 setAcceptInsecureCerts(true)
沟通特长 EdgeOptions setAcceptInsecureCerts(true)
Safari Javascript执行者 临时绕过脚本
ChromeOptions options = new ChromeOptions();
options.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(options);

SSL 证书错误处理 Firefox

处理 SSL 证书错误 Firefox,我们需要使用所需的能力 Selenium Webdriver 并按照以下步骤操作。

步骤1) 首先我们需要创建一个新的 Firefox 轮廓 说 ”我的简历“。

步骤2) 现在按如下方式访问脚本中的 myProfile 并创建 Firefox配置文件对象。

ProfilesIni prof = new ProfilesIni()				
FirefoxProfile ffProfile= prof.getProfile ("myProfile")

步骤3) 现在我们需要在 Fire 中设置“setAcceptUntrustedCertificates”和“setAssumeUntrustedCertificateIssuer”属性。 Fox 个人资料。

ffProfile.setAcceptUntrustedCertificates(true) 
ffProfile.setAssumeUntrustedCertificateIssuer(false)

步骤4) 现在使用火Fox 火中的轮廓Fox 驱动程序对象。

WebDriver driver = new FirefoxDriver (ffProfile)

注意:设置接受不受信任的证书“ 和 ”设置假设不受信任的证书颁发者“是处理网络浏览器中证书错误的功能。

⚠️ 版本说明: 上述基于配置文件的代码目标 Selenium 2和 Selenium 3。 上 Selenium 4. 通过以下方式附加配置文件 Firefox选项和 Firefox 默认接受不安全的证书。

Chrome 中的 SSL 证书错误处理

为了处理 Chrome 中的 SSL 错误,下面的 DesiredCapabilities 对象接受每个 SSL 证书,因此用户在运行期间不会看到任何证书警告。

我们需要创建 DesiredCapabilities 类的实例,如下所示:-

DesiredCapabilities handlSSLErr = DesiredCapabilities.chrome ()       
handlSSLErr.setCapability (CapabilityType.ACCEPT_SSL_CERTS, true)
WebDriver driver = new ChromeDriver (handlSSLErr);

⚠️ 版本说明: CapabilityType.ACCEPT_SSL_CERTS 属于旧的 JSON Wire 协议。运行后,请将其替换为前面显示的 ChromeOptions 代码片段。 Selenium 4.

IE 中的 SSL 证书错误处理

与在 Chrome 浏览器中处理 SSL 证书不同, Firefox在IE浏览器中,您可能需要使用以下方式处理它: JavaScript的.

在 IE 中处理 SSL 证书,您可以通过两种方式处理这种情况。

方法1) 点击插页式广告上的“继续访问此网站(不推荐)”链接。该链接的 ID 为“overridelink”,您可以在按 F12 打开的 HTML 窗格中确认,如下图所示。

Internet Explorer 证书警告,并带有“继续访问此网站”覆盖链接

使用 driver.navigate() 方法单击链接 Java脚本如下:

driver.navigate ().to ("javascript:document.getElementById('overridelink').click()");

方法2) 第二种方法与 Chrome 的 SSL 处理代码非常相似。

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
System.setProperty("webdriver.ie.driver","IEDriverServer.exe");
WebDriver driver = new InternetExplorerDriver(capabilities);

上述代码将有助于处理 IE 中的 SSL 证书错误。

⚠️ 版本说明: Internet Explorer 11 已于 2022 年 6 月停止支持。针对以下情况运行相同的场景: Microsoft Edge 使用 EdgeOptions,或者在旧版应用程序仍然需要的情况下,以 IE 模式驱动 Edge。

常见问题

Chromium 项目运行 badssl.com该网站提供过期、自签名、已吊销和错误主机的子域名。请将测试脚本指向 expired.badssl.com,以安全地重现真实的证书失效情况。

序号 Selenium 4 版将其移除,转而使用浏览器选项类。构建 ChromeOptions, Firefox选项或 EdgeOptions 对象,调用 setAcceptInsecureCerts(true) 并将其传递给驱动程序构造函数。

创建一个 EdgeOptions 对象,调用 setAcceptInsecureCerts(true) 方法,并将其传递给 EdgeDriver 构造函数。此模式与 Chrome 浏览器匹配,因为这两个浏览器都使用 Chromium 内核。

SafariDriver 没有 accept-insecure-certs 开关。 Javascript执行器运行 CertificateWarningController.visitInsecureWebsiteWithTemporaryBypass(),该函数仅清除该会话的插页广告。

ERR_CERT_DATE_INVALID 表示证书已过期,ERR_CERT_REVOKED 表示证书已被吊销,ERR_CERT_AUTHORITY_INVALID 表示自签名证书或来自不受信任的颁发者。此代码会在您修改任何脚本之前指出错误原因。

机器学习会根据错误代码和主机对证书故障进行分组,从而将过期的测试证书与真正的缺陷区分开来。这种分组方式可以避免将一个环境问题记录为多个不相关的测试错误。

是的。 GitHub 副驾驶 从注释中草拟 Options 对象和驱动程序构造函数,但检查它是否建议使用 setAcceptInsecureCerts 而不是已删除的 DesiredCapabilities 调用。

仅限测试环境。接受所有证书会隐藏证书过期、主机名和证书链缺陷,因此请勿在生产环境的冒烟测试中启用此功能,并在安全测试期间显式声明证书。

总结一下这篇文章: