Watir-WebdriverにIEの無効な証明書画面を使用させるにはどうすればよいですか?

おそらく、テスト時にこの画面が表示されています。必要なのは、自己署名証明書付きのHTTPSサイトです。このWebサイトのセキュリティ証明書に問題があります。この画面では、リンクをクリックして続行する必要があります。

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

<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>
      Shield icon 
    </td>
    <td id=mainTitleAlign vAlign=middle align=left>
      

There is a problem with this website's security certificate

    </td>
  </tr>
  <tr>
    <td>
      

<div id=linkdiv name="linkdiv"></div>

 
    </td>
  </tr>
  <tr>
  <!-- This row is for the the divider-->
    <td id=errorCodeAlign class=errorCodeAndDivider align=right> 
      <div class=divider></div>
    </td>
  </tr>
  <!-- Error Body -->
  <tr>
    <td></td>
    <td>
      

<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>
Security certificate problems may indicate an attempt to fool you or intercept any data you send to the server.

 
    </td>
  </tr>
  <!-- Recommendation-->
  <tr>
    <td> </td>
    <td>

We recommend that you close this webpage and do not continue to this website.

 </td>
  </tr>
  <!-- close webpage-->
  <tr>
    <td> </td>
    <td id=closeWebpageAlign vAlign=middle align=left>
      

Recommended icon Click here to close this webpage.

 
    </td>
  </tr>
  <!-- continue to site-->
  <tr>
    <td> </td>
    <td id=continueToSiteAlign vAlign=middle align=left>
      

Not recommended icon Continue to this website (not recommended).

 
    </td>
  </tr>
  <!-- InfoBlock -->
  <tr>
    <td id=infoBlockAlign vAlign=top align=right>  </td>
    <td id=moreInformationAlign vAlign=middle align=left>
      

<table> <tbody> <tr> <td vAlign=top> More information </td> <td vAlign=top> More information </td> </tr> </tbody> </table>

 
      <div style="DISPLAY: none" id=infoBlockID class=infoBlock>
        
  • 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.
    • When going to a website with an address such as https://example.com, try adding the 'www' to the address, https://www.example.com.

      For more information, see "Certificate Errors" in Internet Explorer Help.

    • </div> </td> </tr> </tbody> </table> </body> </html> => nil irb(main):020:0>
  • 3
    追加された 編集された
    ビュー: 1
    あらかじめIEで例外を追加しようとしましたか?おそらく、より厳格ではない証明書チェックのためのIEの設定があります。
    追加された 著者 m33lky,
    Internet ExplorerがWebdriverの内部構造を壊してしまうこの警告を挿入すると、何かが起きているかもしれません。
    追加された 著者 m33lky,
    @ M33lky、回避策としてはうまくいくかもしれないが、Watirがリンクをクリックするのに問題はないので、私はそれもwatir-webdriverでもうまくいくと期待している。これが壊れていると私は確かに理由を知りたいと思います。なぜなら私が見ることのできるページソースについては特別なことは何もないようです。
    追加された 著者 Chuck van der Linden,
    JavaScriptが無効になっているように見えます。これはウェブドライブがブラウザを操作するのを妨げているようです
    追加された 著者 Chuck van der Linden,

    2 答え

    私は自分のページを作成するために投稿したHTMLを使用することを含め、少しの実験を行いました。JavaScriptはありません。私がそのページを操作すると、JavaScriptの動作をブロックすることになります。その場合、browser.textやbrowser.link.exists?のようなことをしようとすると、IEの警告ポップアップが表示され、IEがJSがそのページで作業するのを妨げていることがわかります。 (実際の証明書のエラーページでは決して見かけることはありません)watir-webdriverでは、私が報告したのと同じエラーが発生します。 JSを許可する選択肢をクリックすると、watir-webdriverのページで作業できます。

    つまり、ページの性質上、WebdriverのページへのアクセスをブロックするJSレベルの自動化が妨げられているように見えます。

    私はMSがこれをやっている理由を知っている、彼らはそのような警告を回避するためにJavaScriptを何らかの方法で使用する偽のサイトを望んでいない。明らかにWatirが物事を(OLEを介して)動かす方法は、あなたが遠隔から行うことができるものとは見なされず、ページへのアクセスが許可されている。

    解決方法は、IEオートメーションにWatirを使用するか、証明書が信頼できるようにして警告が表示されないようにすることです。

    Watir-Webdriverを使用する場合は、テストサーバーで使用されている証明書を信頼されたルート証明機関ストアに追加する必要があります。デフォルトの「個人的な」ストアではありません!証明書を追加するときは、証明書を置く場所を変更するか、基本的にはそのセッション承認のために1回だけ行う必要があります。その権限を持つすべての証明書が信頼されるようになるという警告が表示されます。私は、テストシステム上でのみ、あなた自身の内部テストサーバーからの証明書を信頼するためにのみ、これを非常に注意して使用します。

    手動でページに進むと、証明書が無効であることを暗示する赤い警告をダブルクリックすることで、これを行うのはかなり簡単です。あなたがそうしたなら、ブラウザを閉じて、再度開いて、ナビゲーションをしてエラーを起こさないようにすることができます。

    2
    追加された
    driver.goto("javascript:document.getElementById('overridelink').click()")
    
    2
    追加された
    面白いことに、次回はこの画面に直面してみる必要があるかもしれません。この時点での私の好みの解決方法は、テストシステムの信頼できるリストに自己署名証明書を追加するだけです。これにより、実際のユーザーのブラウザが、私たちが推測する本番サイトにアクセスするときと同じように反応します有効な証明書を持っています。
    追加された 著者 Chuck van der Linden,