我们怎样才能让 Watir-Webdriver 处理 IE 无效证书屏幕?

2023-12-01

我们在测试时可能都见过这个屏幕,您所需要的只是一个带有自签名证书的 HTTPS 站点,然后您会看到“此网站的安全证书有问题”屏幕,这需要您单击链接才能继续。

对于 Watir,这不是问题,我可以像处理任何其他网页一样自动化屏幕,根据其文本或 ID 值单击链接。

使用 Watir-Webdriver 就好像 HTML 中的任何内容都无法识别。我并不孤单看到这个问题

这不仅仅是尝试单击链接,几乎您在这里尝试的任何操作都会在此页面上失败,即使是一个简单的功能,例如puts browser.text将返回一个错误。

Selenium::WebDriver::Error::NoSuchElementError: Unable to find element with tag name == body

您可以查看源代码,使用开发人员工具,或者让浏览器元素吐出它的 HTML,并清楚地看到该死的 body 标签就在那里,但 Webdriver 由于某种原因对此视而不见。

我不知道这是线索还是转移注意力,但我知道 webdriver 在底层使用了大量的 XPATH,而且我相信 XPATH 是区分大小写的。在这方面,当我使用时,我看到一些非常不寻常的东西puts browser.html与此页面相比,每个标签名称都是全大写的。无论如何,有点不寻常但合法有效的 HTML。使用browser.html其他页面上显示小写标签。这可能是导致 webdriver 此页面出现如此多问题的原因吗?

对于如何让 webdriver 查看链接元素以便我可以单击它,有人有任何好主意吗?

当我请求页面 HTML 时浏览器对象的输出

irb(main):019:0> puts $browser.html  #note, indentation is added later for clarity
<HTML dir=ltr>
<HEAD>
<TITLE>Certificate Error: Navigation Blocked</TITLE>
<LINK rel=stylesheet type=text/css href="ErrorPageTemplate.css">
<META name=MS.LOCALE content=EN-US>
<META content="text/html; charset=utf-8" http-equiv=Content-Type>
<META content=Yes http-equiv=MSThemeCompatible>
<SCRIPT language=javascript type=text/javascript src="errorPageStrings.js">
</SCRIPT>
<SCRIPT language=javascript type=text/javascript src="httpErrorPagesScripts.js">
</SCRIPT>
<SCRIPT language=javascript type=text/javascript src="invalidcert.js">
</SCRIPT>
</HEAD>
<BODY onload="BodyLoad(); initMoreInfo('infoBlockID');" class=securityError>
<TABLE border=0 cellSpacing=0 cellPadding=0 width=730>
  <!-- Main title -->
  <TBODY>
  <TR>
    <TD id=shieldIconAlign vAlign=top rowSpan=3 width=60 align=left>
      <IMG id=shieldIcon alt="Shield icon" src="red_shield_48.png"> 
    </TD>
    <TD id=mainTitleAlign vAlign=middle align=left>
      <H1 id=mainTitle>There is a problem with this website's security certificate</H1>
    </TD>
  </TR>
  <TR>
    <TD>
      <H3>
        <DIV id=linkdiv name="linkdiv"></DIV>
      </H3>
    </TD>
  </TR>
  <TR>
  <!-- This row is for the the divider-->
    <TD id=errorCodeAlign class=errorCodeAndDivider align=right>&nbsp;
      <DIV class=divider></DIV>
    </TD>
  </TR>
  <!-- Error Body -->
  <TR>
    <TD></TD>
    <TD>
      <H3>
        <DIV style="DISPLAY: block" id=CertUnknownCA name="CertUnknownCA">
          The security certificate presented by this website was not issued by a trusted certificate authority.
        </DIV>
        <DIV style="DISPLAY: none" id=CertExpired name="CertExpired"></DIV>
        <DIV style="DISPLAY: none" id=CertCNMismatch name="CertCNMismatch"></DIV>
        <DIV style="DISPLAY: none" id=CertRevoked name="CertRevoked"></DIV>
        <NOSCRIPT id=securityCert1></NOSCRIPT><BR>
          <ID id=securityCert2>
            Security certificate problems may indicate an attempt to fool you or intercept any data you send to the server.
          </ID>
      </H3>
    </TD>
  </TR>
  <!-- Recommendation-->
  <TR>
    <TD>&nbsp;</TD>
    <TD><H2 id=recommendation><B>We recommend that you close this webpage and do not continue to this website. </B></H2></TD>
  </TR>
  <!-- close webpage-->
  <TR>
    <TD>&nbsp;</TD>
    <TD id=closeWebpageAlign vAlign=middle align=left>
      <H4 id=closeWebpage>
        <IMG class=actionIcon border=0 alt="Recommended icon" src="green_shield.png">
        <A href="javascript:closePage()">Click here to close this webpage.</A> 
      </H4>
    </TD>
  </TR>
  <!-- continue to site-->
  <TR>
    <TD>&nbsp;</TD>
    <TD id=continueToSiteAlign vAlign=middle align=left>
      <H4 id=continueToSite>
        <IMG id=ImgOverride class=actionIcon border=0 alt="Not recommended icon" src="red_shield.png">
        <A id=overridelink href="http://admanager.qa-prod.local/signups/lead_form" name=overridelink>Continue to this website (not recommended).</A> 
      </H4>
    </TD>
  </TR>
  <!-- InfoBlock -->
  <TR>
    <TD id=infoBlockAlign vAlign=top align=right>&nbsp; </TD>
    <TD id=moreInformationAlign vAlign=middle align=left>
      <H4>
        <TABLE>
          <TBODY>
            <TR>
              <TD vAlign=top>
                <A onclick="javascript:expandCollapse('infoBlockID', true); return false;" href="#">
                  <IMG id=infoBlockIDImage class=actionIcon border=0 alt="More information" src="down.png">
                </A>
              </TD>
              <TD vAlign=top>
                <SPAN id=moreInfoContainer>
                  <A href="javascript:expandCollapse('infoBlockID', true);">More information</A>
                </SPAN>
                <NOSCRIPT></NOSCRIPT>
              </TD>
            </TR>
          </TBODY>
        </TABLE>
      </H4>
      <DIV style="DISPLAY: none" id=infoBlockID class=infoBlock>
        <P>
        <LI id=errorExpl1>If you arrived at this page by clicking a link, check the website address in the address bar to be sure that it is the address you were expecting.
        <LI id=errorExpl2>When going to a website with an address such as https://example.com, try adding the 'www' to the address, https://www.example.com.
          <P></P>
          <P id=moreInfoSeeHelpPF>For more information, see "Certificate Errors" in Internet Explorer Help.
          </P>
        </LI>
      </DIV>
    </TD>
  </TR>
</TBODY>
</TABLE>
</BODY>
</HTML>
=> nil
irb(main):020:0>

我做了一些实验,包括使用我发布的 HTML 创建我自己的页面,没有任何 JavaScript。如果我使用该页面,我发现它会阻止 JavaScript 操作。在这种情况下,当我尝试执行 browser.text 或 browser.link.exists? 之类的操作时,我会看到一个 IE 警告弹出窗口,告诉我 IE 正在阻止 JS 在该页面上工作。 (我在实际的证书错误页面上从未看到过这种情况)并且在 watir-webdriver 中我得到了与我报告的相同的错误。如果我单击允许 JS 的选项,那么我可以使用 watir-webdriver 中的页面。

因此,页面本质上的某些东西似乎正在阻止任何 JS 级别的自动化,从而阻止 Webdriver 访问页面。

我明白 MS 这样做的原因,他们不希望虚假网站以某种方式使用 JavaScript 来绕过该警告。显然,Watir 驱动事物的方式(通过 OLE?)不被视为您可以远程执行的操作,因此允许访问该页面。

解决方案是使用 Watir 进行 IE 自动化,或者使其证书受信任,这样您就不会看到警告。

如果您想使用 Watir-Webdriver,则需要将测试服务器上使用的证书添加到受信任的根证书颁发机构存储中。注意不是默认的“个人”商店!添加证书时,您需要更改放置证书的位置,否则您基本上只对该会话授权执行一次。将出现一条警告,表明现在来自该机构的所有证书都将受到信任。我会非常小心地使用它,仅在测试系统上,并且仅用于信任来自您自己的内部测试服务器的证书。

手动进入该页面后,通过双击提醒您证书无效的红色警告,可以很容易地执行此操作。如果您做得正确,您可以关闭浏览器,重新打开,进行导航,而不会收到错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们怎样才能让 Watir-Webdriver 处理 IE 无效证书屏幕? 的相关文章

随机推荐

  • 为什么我的 ML 函数推断的类型与我预期的不同?

    我做了一个函数 它的名字是maptree 下面是我的代码 datatype a tree LEAF of a NODE of a tree a tree fun maptree f NODE X Y NODE maptree f X map
  • Linux 中有标准的退出状态代码吗?

    在 Linux 中 如果进程的退出状态为 0 则认为该进程已正确完成 我发现分段错误通常会导致退出状态为 11 尽管我不知道这只是我工作的约定 像这样失败的应用程序都是内部的 还是标准 Linux 中的进程有标准退出代码吗 第 1 部分 高
  • ASP.Net / MySQL:将内容翻译成多种语言

    我有一个 ASP Net 网站 它使用 MySQL 数据库作为后端 该网站是一个英语电子商务系统 我们正在考虑将其翻译成大约五种其他语言 法语 西班牙语等 的可能性 我们将让人工翻译人员来执行翻译 我们已经研究过自动化服务 但这些还不够好
  • Azure 使用文件共享从 IIS VM 共享照片?

    如何创建可在 VM 中运行的 Web 服务器之间共享的文件共享 以直接访问 Azure 中的 Blob 存储 我正在将用 net 1 1 编写的现有 n 层网站应用程序迁移到 Azure 虚拟机 这是一个遗留应用程序 我想将其以当前形式移动
  • MPMoviePlayerController 处于纵向模式?

    我想知道是否可以在纵向模式下使用 MoviePlayer 感谢您的帮助 T 如果你使用 moviePlayer setOrientation UIDeviceOrientationPortrait animated NO API 您的应用程
  • 如何暂停 Windows 关闭

    我需要在启动和关闭时将声卡静音 取消静音 我找到了一些代码来完成这项工作 但 Windows 通常会突然关闭 并且声音永远不会静音 有人可以告诉我如何暂停关闭足够长的时间以使我的应用程序静音吗 我可以使用一个简单的 TTimer 来暂停应用
  • 在 SQL Server Management Studio 中生成脚本

    如果我有一个包含 SQL Server 数据库中数据的表 我如何生成一个脚本来创建该表并添加数据 如果我右键单击表格然后选择Script Table As gt Create to gt File 它生成一个脚本来仅创建没有数据的表 我需要
  • php pdo多数组插入

    我已经玩了几个小时并试图解决这个问题 但看起来很难解决 我能够进行单个数组插入 person array name gt Wendy age gt 32 但如果我想要多个这样的 person array array name gt Dan
  • GCE + K8S - 访问推荐IP地址

    通过 Google Container Engine 上的标准 Kubernetes 部署 要包含使用 Kubernetes 负载均衡器设置配置的服务来创建网络负载均衡器 是否可以在应用程序中访问用户 或引用 的 IP 地址 对于 PHP
  • 将 utf8 字符串拆分为字符数组

    我正在尝试拆分utf8将字符串编码为字符数组 我现在使用的功能曾经可以工作 但由于某种原因它不再工作了 可能是什么原因 更好的是 我该如何解决它 这是我的字符串 Zelf heb ik maar n vraag wie ben jij 这是
  • 不允许用户保存 TFS 凭据

    这是这个问题的后续问题 加载 Visual Studio 时 如何更改用于连接到 Visual Studio Online TFSPreview 的默认凭据 我遇到的问题是 如果用户选中了 记住我的凭据 框 我需要按照我链接的问题中给出的答
  • 向 UIView 添加宽度边框,显示外面的小背景

    我正在尝试添加圆形边框UIView以绿色背景 我创建了简单的UIView具有 borderWidth cornerRadius 和 borderColor 属性的子类 我从故事板中设置它 IBDesignable class Rounded
  • 从现有集合中初始化对象初始值设定项中的仅获取集合

    我有一个具有仅获取集合属性的类 我想使用现有集合中的值来初始化集合 我知道可以初始化集合使用集合初始值设定项 我还可以创建该对象然后使用AddRange在集合上添加现有集合的项目 然而 这将创建具有空列表的对象 然后添加现有项目 有没有办法
  • 在 Shell 中重命名逆序编号的文件

    我正在寻找一种实用的方法来在 shell 中进行此练习 我有这些文件 1 txt 2 txt 3 txt 4 txt 5 txt 50 txt 我想这样重命名 50 txt 1 txt 49 txt 2 txt 48 txt 3 txt 以
  • MySQL计算N行的移动平均值

    我正在尝试计算移动平均值ofN 行 for单个查询中的所有行 在示例中 我尝试计算 50 行的移动平均值 SELECT h1 date h1 security id SELECT AVG last50 close FROM SELECT h
  • jsdom.env 不是将 svg 导出到图像的函数

    我正在尝试根据以下教程将 d3 svg 图像转换为图像 https github com hugolpz svgcreator node js 我安装以下语句 sudo npm install g jsdom d3js npm instal
  • 如何在我的 Netbeans 项目中包含外部 jar

    当我运行 清理并构建 时 jar正在创建的文件仅在以下情况下运行lib文件夹与 jar file 因此 如果我将 jar 文件移动到桌面并保留lib文件夹中的dist文件夹中 jar 文件会给我一个例外 我该如何处理这个问题 我通过仅创建一
  • docker run 命令出现“Exec 格式错误”

    我有这个基于 Golang 的 Dockerfile FROM golang latest RUN mkdir p app WORKDIR app COPY bin huru CMD huru 我检查了一下 huru 二进制文件位于工作目录
  • X11 - 图形渲染改进

    我目前正在将无符号整数数组渲染到窗口上的二维图像 但是 对于我想要用它完成的任务来说 它太慢了 这是我的代码 int x 0 int y 0 GC gc XGCValues gcv gc XCreateGC display drawable
  • 我们怎样才能让 Watir-Webdriver 处理 IE 无效证书屏幕?

    我们在测试时可能都见过这个屏幕 您所需要的只是一个带有自签名证书的 HTTPS 站点 然后您会看到 此网站的安全证书有问题 屏幕 这需要您单击链接才能继续 对于 Watir 这不是问题 我可以像处理任何其他网页一样自动化屏幕 根据其文本或