Hoe kunnen we Watir-Webdriver laten werken met het IE invalid cert scherm?

We hebben waarschijnlijk allemaal dit scherm gezien tijdens het testen, het enige wat je nodig hebt is een HTTPS-site met een zelfondertekend certificaat en je krijgt het scherm "Er is een probleem met het beveiligingscertificaat van deze website", dat vereist dat je op een link klikt om door te gaan.

Met Watir is dit geen probleem, ik automatiseer het scherm zoals elke andere webpagina, door op de link te klikken volgens de tekst of ID-waarde.

Met Watir-Webdriver is het alsof niets in de HTML kan worden herkend. en ik ben niet de enige in dit Zie deze vraag

Het is niet alleen maar proberen om op een link te klikken, bijna alles wat je hier probeert zal mislukken op deze pagina Zelfs een eenvoudige functie zoals puts browser.text zal een fout retourneren.

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

Je kunt de bron bekijken, ontwikkelaarstools gebruiken, of het browserelement de HTML laten uitspugen en duidelijk de verdraaide body-tag zien, maar Webdriver is er om een ​​of andere reden blind voor.

Ik weet niet of het een aanwijzing is of een rode haring, maar ik weet dat webdriver een ton XPATH onder de motorkap gebruikt en ik denk dat XPATH hoofdlettergevoelig is. en in dat opzicht zie ik iets heel ongewoons wanneer ik zet browser.html tegen deze pagina, omdat elke afzonderlijke tag-naam volledig in hoofdletters is. Enigszins ongebruikelijke maar juridisch geldige HTML in ieder geval. Het gebruik van browser.html op andere pagina's toont kleine letters. Zou dit de oorzaak kunnen zijn van een probleem met deze pagina voor webdriver?

Heeft iemand heldere ideeën over hoe ik in staat zou kunnen zijn om webdriver het linkelement te laten zien zodat ik erop kan klikken?

Uitvoer van het browserobject wanneer ik het naar de HTML-pagina vraag

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
    Heb je geprobeerd de uitzondering in IE vooraf toe te voegen? Misschien is er een instelling in IE voor minder strenge cert checking.
    toegevoegd de auteur m33lky, de bron
    Er kan iets grappigs gebeuren wanneer IE deze waarschuwing invoert die de binnenkant van webdriver in de war schopt.
    toegevoegd de auteur m33lky, de bron
    @ M33lky, ik veronderstel dat dit zou kunnen werken als een tijdelijke oplossing, maar eerlijk gezegd, aangezien Watir geen probleem heeft om op de link te klikken, zou ik verwachten dat het ook werkt in watir-webdriver. En als dit is verbroken, zou ik zeker willen weten waarom, omdat er niets bijzonders lijkt aan de paginabron die ik kan zien.
    toegevoegd de auteur Chuck van der Linden, de bron
    het lijkt JavaScript uit te schakelen, wat lijkt te voorkomen dat webdriver de browser bestuurt
    toegevoegd de auteur Chuck van der Linden, de bron

    2 antwoord

    Ik heb een beetje geëxperimenteerd, inclusief het gebruik van de HTML die ik heb gepost om mijn eigen pagina te maken, zonder enige JavaScript. Als ik met die pagina werk, vind ik JavaScript-acties geblokkeerd. In dat geval, wanneer ik dingen als browser.text of browser.link.exists? Probeer te doen, zie ik een IE-waarschuwingspop-up die zegt dat IE JS verhindert om op die pagina te werken. (iets wat ik nooit zie op de feitelijke pagina met de cert error) En in watir-webdriver krijg ik dezelfde fouten die ik heb gerapporteerd. Als ik op de keuze klik om JS toe te staan, dan kan ik met de pagina werken in watir-webdriver.

    Dus het lijkt erop dat iets in de aard van de pagina elke JS-niveau-automatisering verhindert die de toegang van Webdriver tot de pagina blokkeert.

    Ik zie waarom MS dit doet, ze willen niet dat een valse site op de een of andere manier JavaScript gebruikt om deze waarschuwing te omzeilen. Blijkbaar wordt de manier waarop Watir dingen stuurt (via OLE?) Niet gezien als iets dat je op afstand zou kunnen doen en dus toegang tot de pagina wordt toegestaan.

    De oplossing is dan om Watir te gebruiken voor uw IE-automatisering, of het zo te maken dat het certificaat vertrouwd wordt en u dus de waarschuwing niet ziet.

    Als u Watir-Webdriver wilt gebruiken, moet u de certificaten die op uw testservers worden gebruikt toevoegen aan het archief Vertrouwde basiscertificeringsinstanties. Let op NIET de standaard 'persoonlijke' winkel! Wanneer u het certificaat toevoegt, moet u wijzigen waar het certificaat wordt geplaatst of u doet eigenlijk maar één keer de machtiging voor die sessie. Er zal een waarschuwing zijn dat nu alle certificaten van die autoriteit zullen worden vertrouwd. Ik zou dit met de grootste zorg gebruiken, alleen op testsystemen, en alleen voor vertrouwende certificaten van uw eigen interne testservers.

    Het is vrij eenvoudig om dit te doen nadat je handmatig naar de pagina bent gegaan, door te dubbelklikken op de rode waarschuwing die je eraan herinnert dat het certificaat ongeldig is. Als u dat goed hebt gedaan, kunt u de browser sluiten, opnieuw openen, uw navigatie uitvoeren en geen foutmelding krijgen.

    2
    toegevoegd
    driver.goto("javascript:document.getElementById('overridelink').click()")
    
    2
    toegevoegd
    Interessant, misschien moet ik dat de volgende keer dat ik voor dit scherm sta, proberen. Mijn voorkeursoplossing op dit moment is nog steeds alleen maar om de zelfondertekende certificaten aan de vertrouwde lijst op de testsystemen toe te voegen, dit zorgt ervoor dat ze reageren zoals de browser van een echte gebruiker zou reageren wanneer het uw productiesite raakt die wij veronderstellen heeft een geldig cert.
    toegevoegd de auteur Chuck van der Linden, de bron