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 -