Watir - Objetos de Página

Objeto de página em Watir nos ajuda a reutilizar o código na forma de classes. Usando o recurso de objeto de página, podemos automatizar nosso aplicativo sem ter que duplicar nenhum código e também tornar o código gerenciável.

Ao testar, podemos criar um objeto de página para cada uma das páginas que vamos testar. Então, vamos acessar os métodos e propriedades usando o objeto de página.

As razões por trás do uso do objeto de página -

  • No caso de quaisquer mudanças serem feitas na página ao alterar as mudanças, não é necessário reescrever o código.

  • Para evitar redundância de código.

Vamos usar RSpec para fazer uso de objeto de página em Watir. Caso você não esteja familiarizado com RSpec, aqui está um tutorial completo disponível para RSpec para você aprender.

A página em que vamos realizar o teste é fornecida aqui -

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>

Resultado

Vamos agora criar um objeto de página para a página acima, conforme mostrado abaixo -

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

Existem três classes definidas - InitializeBrowser, TestPage e TestTextbox -

  • InitializeBrowser - Isso inicializará o navegador aberto e compartilhará o objeto do navegador com as classes TestPage e TestTextbox.

  • TestPage - Esta classe terá referência de objeto para TestTextbox e contém o método para capturar a tela e fechar o navegador.

  • TestTextbox - Esta classe terá métodos para abrir a url da página, dar referência ao textfield, definir os dados e disparar o evento onchange.

Depois de executar o código mostrado acima, você pode ver a saída conforme mostrado abaixo -