Em primeiro lugar se você pensa em escrever um código de teste legal aprenda o conceito de page objects. Isso ajudará você a economizar muitas linhas de código e facilitará a manutenção dos mesmos.
Iniciei a codificação mapeando os elementos da minha página em um objeto e criando métodos para que a minha classe de teste pudesse acessa-los. Os primeiros objetos mapeados, foram todos os campos do formulário como combos, inputs, buttons, etc. Feito isso já tinha o básico para iniciar a classe de testes.
public class PaginaFormularioCadastro {
private WebDriver driver;
public PaginaFormularioCadastro(WebDriver driver) {
super();
this.driver = driver;
}
public void selecionaPessoaFisica(){
driver.findElement(By.id("legalEntity.F")).click();
}
public void selecionaPessoaJuridica(){
driver.findElement(By.id("legalEntity.J")).click();
}
public void escreveNome(String nome){
driver.findElement(By.id("firstName")).sendKeys(nome);
}
public void escreveUsuario(String usuario){
driver.findElement(By.id("userName")).sendKeys(usuario);
}
public void escreveSenha(String senha){
driver.findElement(By.id("password")).sendKeys(senha);
}
public void reEscreveSenha(String senha){
driver.findElement(By.id("password2")).sendKeys(senha);
}
public void escreveEmail(String email){
driver.findElement(By.id("email")).sendKeys(email);
}
public void queroInfoGrupo(){
driver.findElement(By.id("complement.rbsEmail")).click();
}
public void queroInfoParceirosGrupo(){
driver.findElement(By.id("complement.otherEmail")).click();
}
public void aceitaTermo(){
driver.findElement(By.id("acceptTerms")).click();
}
public void cadastrar(){
driver.findElement(By.cssSelector("input[type=\"submit\"]")).click();
}
}
public class Teste {
protected WebDriver driver;
protected String baseUrl;
private StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws Exception {
driver = new FirefoxDriver();
baseUrl = "http://zerohora.clicrbs.com.br/wrs/action/update/newUser;jsessionid=ac19071f30d825732ff18c3a4149b3cfc47cf2a125ef.e34RbNaLchqQay0NbhmTc40.22?site=4446";
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.get(baseUrl);
}
@After
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
}
Comecei a chamar os métodos criados no objeto para fazer as simulações. Assim que essa etapa estava concluída e funcionando, precisava das assertivas para garantir que o teste passou, então implementei no objeto, métodos que faziam essas verificações.
Acabei os cenários de teste na minha classe e parti para verificar o funcionamentos. De cara eu sabia que teria problemas para atender aos critérios de aceite do teste devido a estar usando sempre o mesmo nome de usuário para cadastrar, mesmo assim executei o teste apenas modificando esse parâmetro e vi que o teste estava funcionando. Para resolver esse problema criei um objeto chamado usuário com o atributo username.
public class Usuario {
protected String username;
public Usuario(String username) {
super();
this.username = username.replaceAll("[ :]", "");
}
protected String getUsername() {
return username;
}
protected void setUsername(String username) {
this.username = username.replaceAll("[ :]", "");
}
}
O construtor desse atributo pegava a hora e data do sistema, retirava espaços em branco e barras e convertia para string. Cada vez que eu executava o teste ele pegava um timestamp diferente. Resolvido isso meu teste ficou pronto para ser executado várias vezes sem precisar de ajuste a cada execução.
Done? Done!
Nenhum comentário:
Postar um comentário