Watir - Objetos de página

Page Object en Watir nos ayuda a reutilizar el código en forma de clases. Usando la función de objeto de página, podemos automatizar nuestra aplicación sin tener que duplicar ningún código y también hace que el código sea manejable.

Al probar, podemos crear un objeto de página para cada una de las páginas que vamos a probar. Luego, vamos a acceder a los métodos y propiedades usando el objeto page.

Las razones detrás del uso del objeto de página:

  • En caso de que se realicen cambios en la página al modificar los cambios, no es necesario volver a escribir el código.

  • Para evitar la redundancia de código.

Vamos a utilizar RSpec para hacer uso de page-object en Watir. En caso de que no esté familiarizado con RSpec, aquí hay un tutorial completo disponible para RSpec para que lo aprenda.

La página en la que vamos a realizar la prueba se da aquí:

textbox.html

<html>
   <head>
      <title>Testing UI using Watir</title>
   </head>
   
   <body>
      <script type = "text/javascript">
         function wsentered() {
            console.log("inside wsentered");
            var firstname = document.getElementById("firstname");
            
            if (firstname.value != "") {
               document.getElementById("displayfirstname").innerHTML = 
                  "The name entered is : " + firstname.value;
               
               document.getElementById("displayfirstname").style.display = "";
            }
         }
      </script>
      
      <div id = "divfirstname">
         Enter First Name : 
         <input type = "text" id = "firstname" name = "firstname" onchange = "wsentered()" />
      </div>
      <br/>
      <br/>
      <div style = "display:none;" id = "displayfirstname"></div>
   </body>
</html>

Salida

Ahora crearemos un objeto de página para la página anterior como se muestra a continuación:

pageobjecttest.rb

class InitializeBrowser
   def initialize(browser)
      @browser = browser
   end
end

class TestPage lt; InitializeBrowser
   def textbox
      @textbox = TestTextbox.new(@browser)
   end
   def close
      @browser.screenshot.save 'usingpageobject.png'
      @browser.close
   end
end # TestPage

class TestTextbox < InitializeBrowser
   URL = "http://localhost/uitesting/textbox.html"

   def open
      @browser.goto URL
      self
   end
   def enterdata_as(name)
      name_field.set name
      name_field.fire_event('onchange')
   end

private
   def name_field
      @browser.text_field(:id > "firstname")
   end
end # TestTextbox

Hay tres clases definidas: InitializeBrowser, TestPage y TestTextbox -

  • InitializeBrowser - Esto inicializará el navegador abierto y compartirá el objeto del navegador con las clases TestPage y TestTextbox.

  • TestPage - Esta clase tendrá una referencia de objeto a TestTextbox y contiene el método para capturar la captura de pantalla y cerrar el navegador.

  • TestTextbox - Esta clase tendrá métodos para abrir la URL de la página, dar referencia al campo de texto, configurar los datos y activar el evento de cambio.

Una vez que ejecute el código que se muestra arriba, puede ver el resultado como se muestra a continuación: