SlideShare uma empresa Scribd logo
Introdução à
Automação de Testes
com Selenium
Rodrigo Gouveia
Agenda
1. Introdução
2. Visão Geral do Selenium
3. Selenium WebDriver
4. O Padrão Page Object
5. Boas Práticas
1. Introdução
Por que é importante testar software? Não é perda
de tempo?
1. Introdução
1. Introdução
 Técnicas de Teste:
 Caixa Branca
 Caixa Preta(Funcional)
 Caixa Cinza
 Tipos de Teste
 Manual
 Automático,
 Performance(carga, estresse),
 Segurança
 etc...
1. Introdução
O que são testes funcionais?
“Teste baseado na análise de
especificação da funcionalidade de
um componente ou sistema”
1. Introdução
 Por que é importante automatizar testes?
 Testes executados de forma mais rápida e mais barata
 Feedback sobre qualidade do código
 Permite aumentar a cobertura dos testes
 Racionalização de recursos
 Fiel reprodução do teste executado
 Aumentar qualidade do produto final
 Redução de custos(médio e longo prazo)
Visão Geral do Selenium
2. Visão Geral do Selenium
O que é Selenium?
“Selenium Automatiza navegadores”
2. Visão Geral do Selenium
 Realizar ações, comandos, entradas de valores em páginas
exibidas no navegador, executando tarefas como se fosse um
usuário real.
 Open Source(Licença Apache 2.0)
 Dois Sabores:
 Selenium Web Driver
 Selenium IDE
2. Visão Geral do Selenium
 Selenium IDE
 Permite “gravar” testes usando um plugin do Firefox
 Os testes são salvos como arquivos HTML
 Podem ser exportados para linguagens de programação:
O código exportado é geralmente frágil
Difícil manutenção
2. Visão Geral do Selenium
Script de Teste
em HTML
Selenium IDE
Plugin Firefox
Introdução À Automação de Testes com Selenium
2. Visão Geral do Selenium
 Quando usar?
 Deve ser usado apenas para criar scripts simples, para testes
exploratórios e possivelmente descartáveis
 Não devem ser usados para automação de grandes sistemas
Selenium Web Driver
3. Selenium Web Driver
 Testes são codificados utilizando alguma linguagem de
programação
 Testes mais robustos e escaláveis
 Permite que o teste seja distribuído em várias máquinas,
executado em diferentes tipos de navegadores e/ou
sistemas operacionais
3. Selenium Web Driver
 Os comandos são enviados para um driver que os
executa no navegador
 Cada navegador tem um driver específico
 Os testes podem ser executados na máquina local ou em
uma máquina remota (Selenium-Server)
 Os testes podem ser executados de forma distribuída
(Selenium-Grid)
3. Selenium Web Driver
Código-fonte Driver
3. Selenium Web Driver
 Etapas simplificadas de um script Selenium:
1. Inicializar o driver do navegador
2. Acessar(obter) a página do sistema que será testado
3. Obter um(alguns) elemento(s) da página
4. Executar alguma ação com esse(s) elemento(s)
5. Verificar o resultado da ação
3. Selenium Web Driver
1. Inicializar o driver do navegador
 Firefox:
 Chrome:
 Drivers disponíveis no site do Selenium
System.setProperty("webdriver.chrome.driver", “c:/chromedriver.exe");
WebDriver driver = new ChromeDriver();
System.setProperty("webdriver.gecko.driver", “c:/geckodriver.exe");
WebDriver driver = new FirefoxDriver();
http://www.seleniumhq.org/
3. Selenium Web Driver
2. Acessar(obter) a página do sistema que será testado
driver.get("http://www.ifpb.edu.br");
3. Obter um(alguns) elemento(s) da página
WebElement caixaBusca = driver.findElement(By.name("SearchableText"));
WebElement botaoPesquisar =
driver.findElement(By.className("searchButton"));
3. Selenium Web Driver
4. Executar alguma ação com esse(s) elemento(s)
5. Verificar o resultado da ação
caixaBusca.sendKeys("vestibular");
botaoPesquisar.click();
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
List<WebElement> resultados =
driver.findElements(By.xpath("//div[@id='search-results']/dl/dt"));
Assert.assertTrue(resultados.size() > 1);
3. Selenium Web Driver
 Formas de obter elementos de interação na página Web:
 XPath
 ID(atributo id do HTML)
 Nome da Classe CSS (atributo class do HTML)
 Seletor CSS
 Nome(atributo name do HTML)
 Conteúdo de um Link
 Nome da Tag
3. Selenium Web Driver
 Muitas vezes é necessário sincronizar a execução do teste
com a dinâmica do site
 Tipos de sincronização:
 Sincronização implícita
 Sincronização explícita
3. Selenium Web Driver
 Sincronização implícita:
 O Selenium esperará uma certa quantidade de tempo, se o
elemento procurado na página não estiver disponível
 Se após o tempo configurado o elemento ainda não estiver
disponível na página, o teste falhará
 Vantagens: mais prático e menos linhas de código nos testes
 Desvantagem: tempo uniforme de espera
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
3. Selenium Web Driver
 Sincronização explícita:
 O desenvolvedor controla o tempo de espera(sincronização) do
teste a cada etapa
 Deve-se informar uma condição de espera
Ex: Elemento visível na tela, texto presente na tela, valor de um
atributo de um elemento HTML, etc.
 Mais flexível que a sincronização implícita.
WebDriverWait wait = new WebDriverWait(driver, timeout);
wait.until(ExpectedConditions.visibilityOfElementLocated(
By.xpath("//div[@id='search-results']/dl/dt")));
3. Selenium Web Driver
 Resumindo os principais métodos da API:
 driver.get()
 driver.findElement(By)
 webElement.click()
 webElement.sendKeys()
 driver.switchTo().window()
 driver.switchTo().alert().accept();
 webDriverWait.until()
 driver.navigate()
4. Padrão Page Object
4. Padrão Page Object
 Testes funcionais automáticos de sistemas Web são suscetíveis
à mudanças na interface
 Uma alteração em um componente da tela pode quebrar
todos os testes
 Se o código que interage com esse componente for
repetido em vários testes, todos irão quebrar
 Manutenção dos testes ficará mais custosa
4. Padrão Page Object
 Solução: Padrão de projeto Page Object
 Crie uma classe para cada tela do sistema usadas nos testes
 As classes devem abstrair o código Selenium que interage
com os elementos da tela.
 Único ponto de mudança
4. Padrão Page Object
 Forneça uma API fácil de usar e que permita fazer tudo
aquilo que um humano poderia fazer usando a tela
 Ex: Se a tela possui dos campos de texto e um botão, a
API deve fornecer métodos para
preencher/limpar/recuperar o valor desses dois campos
e um método para pressionar o botão.
4. Padrão Page Object
 Ao invés de:
WebElement caixaBusca = driver.findElement(By.name("SearchableText"));
WebElement botaoPesquisar =
driver.findElement(By.className("searchButton"));
caixaBusca.sendKeys("vestibular");
botaoPesquisar.click();
List<WebElement> resultados =
driver.findElements(By.xpath("//div[@id='search-results']/dl/dt"));
Assert.assertTrue(resultados.size() > 1);
4. Padrão Page Object
 Use page object:
PaginaPrincipalPO paginaPrincipal = new PaginaPrincipalPO();
PageFactory.initElements(driver, paginaPrincipal);
paginaPrincipal.setCampoBusca(("vestibular");
paginaPrincipal.pesquisar();
PaginaResultadosPO paginaResultados = new PaginaResultadosPO();
PageFactory.initElements(driver, paginaResultados);
int totalResultados = paginaResultados.getTotalResultados();
Assert.assertTrue(totalResultados > 1);
Os métodos do
PageObjects
abstraem o código
do Selenium
Inicializa uma
instância de page
object
4. Padrão Page Object
public class PaginaPrincipalPO {
@FindBy(name="SearchableText")
private WebElement campoBusca;
@FindBy(className="searchButton")
private WebElement botaoPesquisar;
public String getCampoBusca(){
return campoBusca.getAttribute("value");
}
public void setCampoBusca(String valor){
campoBusca.sendKeys(valor);
}
public void pesquisar(){
botaoPesquisar.click();
}
}
5. Boas Práticas
5. Boas Práticas
 Escolha bem a forma como localizar os elementos da tela
 Isso definirá o quão “forte” seu teste será em relação às
mudanças de interface
 Prefira localizar elementos HTML pelo seu ID (atributo id do
HTML) ou nome(atributo name)
 Não use ID quando eles forem gerados automaticamente
 Um mesmo valor de name pode ser utilizado em vários
elementos
5. Boas Práticas
 Se não for possível utilizar ID ou nome, use Xpath ou um
seletor CSS
 Monte uma expressão Xpath ou seletor CSS que seja
resistente em relação à mudanças na interface
 Exemplo de Xpath fraco:
driver.findElements(By.xpath("//div[1]/div/div/div[2]/form/input"));
5. Boas Práticas
 Exemplo de Xpath forte:
 Use o inspetor de elementos do Chorme/Firefox para auxiliar
na criação do Xpath ou do seletor CSS
 Use plug-ins disponíveis para o Chrome e Firefox
driver.findElements(By.xpath("//*[@id='search-results']/ol/li"));
5. Boas Práticas
5. Boas Práticas
 Mantenha o código de seus testes limpo e organizado
 Trate o código dos testes da mesma forma que o código de
produção
 Baixo acoplamento
 Alta coesão
 Evite repetições de código
 Use PageObjects
5. Boas Práticas
 Sempre coloque ID nos elementos HTML de suas páginas Web
 Lembre-se: o código de seus testes também será mantido por
outros desenvolvedores
Outras opções(pagas)
Links úteis
 http://www.seleniumhq.org/
 https://martinfowler.com/bliki/PageObject.html
 https://www.w3schools.com/xml/xpath_syntax.asp
 https://www.w3schools.com/cssref/css_selectors.asp
 http://www.istqb.org/
 http://www.bstqb.org.br/
Obrigado!
rodrigoagouveia@gmail.com
@rodrigoagouveia

Mais conteúdo relacionado

PDF
Automation Testing with KATALON Cucumber BDD
PDF
머신러닝 도우미, Amazon SageMaker 따라하기: SageMaker 국내 적용 사례
PPTX
Selenium - WebDriver
PPTX
Presentation Analisis Sitasi
PDF
Internal Architecture of Amazon Aurora (Level 400) - 발표자: 정달영, APAC RDS Speci...
PDF
AWS Summit Seoul 2023 | Amazon Redshift Serverless를 활용한 LG 이노텍의 데이터 분석 플랫폼 혁신 과정
PDF
S3, 넌 이것까지 할 수있네 (Amazon S3 신규 기능 소개) - 김세준, AWS 솔루션즈 아키텍트:: AWS Summit Onli...
PDF
Deep Dive: Amazon Relational Database Service (March 2017)
Automation Testing with KATALON Cucumber BDD
머신러닝 도우미, Amazon SageMaker 따라하기: SageMaker 국내 적용 사례
Selenium - WebDriver
Presentation Analisis Sitasi
Internal Architecture of Amazon Aurora (Level 400) - 발표자: 정달영, APAC RDS Speci...
AWS Summit Seoul 2023 | Amazon Redshift Serverless를 활용한 LG 이노텍의 데이터 분석 플랫폼 혁신 과정
S3, 넌 이것까지 할 수있네 (Amazon S3 신규 기능 소개) - 김세준, AWS 솔루션즈 아키텍트:: AWS Summit Onli...
Deep Dive: Amazon Relational Database Service (March 2017)

Semelhante a Introdução À Automação de Testes com Selenium (20)

PDF
Automação de testes funcionais com selenium webdriver
PDF
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
PDF
98796699 selenium-framework
PPT
Automacão de Testes Funcionais com Selenium
PDF
Workshop de Selenium WebDriver.
PPT
Curso Básico de Selenium
PPTX
Selenium ide
PDF
Selenium Workshop
PDF
Selenium
PPTX
Automatização de testes funcionais com selenium etapa 1
PDF
Além do Webdriver e Page Objects - Versão completa
PDF
Automação de Teste em Front End - Caipira Ágil
PDF
Ruby para testers III - Selenium
PDF
Caipira agil automacao front end selenium
PDF
Testes com TestLink e Selenium
PPTX
2° Workshop de Testes em Uberlândia - Treinamento em Automação de Testes com ...
PPTX
Curso treinamento automação de testes com selenium
PPTX
Curso Treinamento Automação de testes com Selenium Qualister
PDF
Testes Funcionais com Selenium
PDF
Introdução ao Selenium WebDriver
Automação de testes funcionais com selenium webdriver
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
98796699 selenium-framework
Automacão de Testes Funcionais com Selenium
Workshop de Selenium WebDriver.
Curso Básico de Selenium
Selenium ide
Selenium Workshop
Selenium
Automatização de testes funcionais com selenium etapa 1
Além do Webdriver e Page Objects - Versão completa
Automação de Teste em Front End - Caipira Ágil
Ruby para testers III - Selenium
Caipira agil automacao front end selenium
Testes com TestLink e Selenium
2° Workshop de Testes em Uberlândia - Treinamento em Automação de Testes com ...
Curso treinamento automação de testes com selenium
Curso Treinamento Automação de testes com Selenium Qualister
Testes Funcionais com Selenium
Introdução ao Selenium WebDriver
Anúncio

Último (19)

PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Apple Pippin Uma breve introdução. - David Glotz
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
Aula 18 - Manipulacao De Arquivos python
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Processos na gestão de transportes, TM100 Col18
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Custos e liquidação no SAP Transportation Management, TM130 Col18
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Aula04-Academia Heri- Tecnologia Geral 2025
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Apple Pippin Uma breve introdução. - David Glotz
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
COBITxITIL-Entenda as diferença em uso governança TI
Aula 18 - Manipulacao De Arquivos python
Anúncio

Introdução À Automação de Testes com Selenium

  • 1. Introdução à Automação de Testes com Selenium Rodrigo Gouveia
  • 2. Agenda 1. Introdução 2. Visão Geral do Selenium 3. Selenium WebDriver 4. O Padrão Page Object 5. Boas Práticas
  • 3. 1. Introdução Por que é importante testar software? Não é perda de tempo?
  • 5. 1. Introdução  Técnicas de Teste:  Caixa Branca  Caixa Preta(Funcional)  Caixa Cinza  Tipos de Teste  Manual  Automático,  Performance(carga, estresse),  Segurança  etc...
  • 6. 1. Introdução O que são testes funcionais? “Teste baseado na análise de especificação da funcionalidade de um componente ou sistema”
  • 7. 1. Introdução  Por que é importante automatizar testes?  Testes executados de forma mais rápida e mais barata  Feedback sobre qualidade do código  Permite aumentar a cobertura dos testes  Racionalização de recursos  Fiel reprodução do teste executado  Aumentar qualidade do produto final  Redução de custos(médio e longo prazo)
  • 8. Visão Geral do Selenium
  • 9. 2. Visão Geral do Selenium O que é Selenium? “Selenium Automatiza navegadores”
  • 10. 2. Visão Geral do Selenium  Realizar ações, comandos, entradas de valores em páginas exibidas no navegador, executando tarefas como se fosse um usuário real.  Open Source(Licença Apache 2.0)  Dois Sabores:  Selenium Web Driver  Selenium IDE
  • 11. 2. Visão Geral do Selenium  Selenium IDE  Permite “gravar” testes usando um plugin do Firefox  Os testes são salvos como arquivos HTML  Podem ser exportados para linguagens de programação: O código exportado é geralmente frágil Difícil manutenção
  • 12. 2. Visão Geral do Selenium Script de Teste em HTML Selenium IDE Plugin Firefox
  • 14. 2. Visão Geral do Selenium  Quando usar?  Deve ser usado apenas para criar scripts simples, para testes exploratórios e possivelmente descartáveis  Não devem ser usados para automação de grandes sistemas
  • 16. 3. Selenium Web Driver  Testes são codificados utilizando alguma linguagem de programação  Testes mais robustos e escaláveis  Permite que o teste seja distribuído em várias máquinas, executado em diferentes tipos de navegadores e/ou sistemas operacionais
  • 17. 3. Selenium Web Driver  Os comandos são enviados para um driver que os executa no navegador  Cada navegador tem um driver específico  Os testes podem ser executados na máquina local ou em uma máquina remota (Selenium-Server)  Os testes podem ser executados de forma distribuída (Selenium-Grid)
  • 18. 3. Selenium Web Driver Código-fonte Driver
  • 19. 3. Selenium Web Driver  Etapas simplificadas de um script Selenium: 1. Inicializar o driver do navegador 2. Acessar(obter) a página do sistema que será testado 3. Obter um(alguns) elemento(s) da página 4. Executar alguma ação com esse(s) elemento(s) 5. Verificar o resultado da ação
  • 20. 3. Selenium Web Driver 1. Inicializar o driver do navegador  Firefox:  Chrome:  Drivers disponíveis no site do Selenium System.setProperty("webdriver.chrome.driver", “c:/chromedriver.exe"); WebDriver driver = new ChromeDriver(); System.setProperty("webdriver.gecko.driver", “c:/geckodriver.exe"); WebDriver driver = new FirefoxDriver(); http://www.seleniumhq.org/
  • 21. 3. Selenium Web Driver 2. Acessar(obter) a página do sistema que será testado driver.get("http://www.ifpb.edu.br"); 3. Obter um(alguns) elemento(s) da página WebElement caixaBusca = driver.findElement(By.name("SearchableText")); WebElement botaoPesquisar = driver.findElement(By.className("searchButton"));
  • 22. 3. Selenium Web Driver 4. Executar alguma ação com esse(s) elemento(s) 5. Verificar o resultado da ação caixaBusca.sendKeys("vestibular"); botaoPesquisar.click(); driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); List<WebElement> resultados = driver.findElements(By.xpath("//div[@id='search-results']/dl/dt")); Assert.assertTrue(resultados.size() > 1);
  • 23. 3. Selenium Web Driver  Formas de obter elementos de interação na página Web:  XPath  ID(atributo id do HTML)  Nome da Classe CSS (atributo class do HTML)  Seletor CSS  Nome(atributo name do HTML)  Conteúdo de um Link  Nome da Tag
  • 24. 3. Selenium Web Driver  Muitas vezes é necessário sincronizar a execução do teste com a dinâmica do site  Tipos de sincronização:  Sincronização implícita  Sincronização explícita
  • 25. 3. Selenium Web Driver  Sincronização implícita:  O Selenium esperará uma certa quantidade de tempo, se o elemento procurado na página não estiver disponível  Se após o tempo configurado o elemento ainda não estiver disponível na página, o teste falhará  Vantagens: mais prático e menos linhas de código nos testes  Desvantagem: tempo uniforme de espera driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
  • 26. 3. Selenium Web Driver  Sincronização explícita:  O desenvolvedor controla o tempo de espera(sincronização) do teste a cada etapa  Deve-se informar uma condição de espera Ex: Elemento visível na tela, texto presente na tela, valor de um atributo de um elemento HTML, etc.  Mais flexível que a sincronização implícita. WebDriverWait wait = new WebDriverWait(driver, timeout); wait.until(ExpectedConditions.visibilityOfElementLocated( By.xpath("//div[@id='search-results']/dl/dt")));
  • 27. 3. Selenium Web Driver  Resumindo os principais métodos da API:  driver.get()  driver.findElement(By)  webElement.click()  webElement.sendKeys()  driver.switchTo().window()  driver.switchTo().alert().accept();  webDriverWait.until()  driver.navigate()
  • 28. 4. Padrão Page Object
  • 29. 4. Padrão Page Object  Testes funcionais automáticos de sistemas Web são suscetíveis à mudanças na interface  Uma alteração em um componente da tela pode quebrar todos os testes  Se o código que interage com esse componente for repetido em vários testes, todos irão quebrar  Manutenção dos testes ficará mais custosa
  • 30. 4. Padrão Page Object  Solução: Padrão de projeto Page Object  Crie uma classe para cada tela do sistema usadas nos testes  As classes devem abstrair o código Selenium que interage com os elementos da tela.  Único ponto de mudança
  • 31. 4. Padrão Page Object  Forneça uma API fácil de usar e que permita fazer tudo aquilo que um humano poderia fazer usando a tela  Ex: Se a tela possui dos campos de texto e um botão, a API deve fornecer métodos para preencher/limpar/recuperar o valor desses dois campos e um método para pressionar o botão.
  • 32. 4. Padrão Page Object  Ao invés de: WebElement caixaBusca = driver.findElement(By.name("SearchableText")); WebElement botaoPesquisar = driver.findElement(By.className("searchButton")); caixaBusca.sendKeys("vestibular"); botaoPesquisar.click(); List<WebElement> resultados = driver.findElements(By.xpath("//div[@id='search-results']/dl/dt")); Assert.assertTrue(resultados.size() > 1);
  • 33. 4. Padrão Page Object  Use page object: PaginaPrincipalPO paginaPrincipal = new PaginaPrincipalPO(); PageFactory.initElements(driver, paginaPrincipal); paginaPrincipal.setCampoBusca(("vestibular"); paginaPrincipal.pesquisar(); PaginaResultadosPO paginaResultados = new PaginaResultadosPO(); PageFactory.initElements(driver, paginaResultados); int totalResultados = paginaResultados.getTotalResultados(); Assert.assertTrue(totalResultados > 1); Os métodos do PageObjects abstraem o código do Selenium Inicializa uma instância de page object
  • 34. 4. Padrão Page Object public class PaginaPrincipalPO { @FindBy(name="SearchableText") private WebElement campoBusca; @FindBy(className="searchButton") private WebElement botaoPesquisar; public String getCampoBusca(){ return campoBusca.getAttribute("value"); } public void setCampoBusca(String valor){ campoBusca.sendKeys(valor); } public void pesquisar(){ botaoPesquisar.click(); } }
  • 36. 5. Boas Práticas  Escolha bem a forma como localizar os elementos da tela  Isso definirá o quão “forte” seu teste será em relação às mudanças de interface  Prefira localizar elementos HTML pelo seu ID (atributo id do HTML) ou nome(atributo name)  Não use ID quando eles forem gerados automaticamente  Um mesmo valor de name pode ser utilizado em vários elementos
  • 37. 5. Boas Práticas  Se não for possível utilizar ID ou nome, use Xpath ou um seletor CSS  Monte uma expressão Xpath ou seletor CSS que seja resistente em relação à mudanças na interface  Exemplo de Xpath fraco: driver.findElements(By.xpath("//div[1]/div/div/div[2]/form/input"));
  • 38. 5. Boas Práticas  Exemplo de Xpath forte:  Use o inspetor de elementos do Chorme/Firefox para auxiliar na criação do Xpath ou do seletor CSS  Use plug-ins disponíveis para o Chrome e Firefox driver.findElements(By.xpath("//*[@id='search-results']/ol/li"));
  • 40. 5. Boas Práticas  Mantenha o código de seus testes limpo e organizado  Trate o código dos testes da mesma forma que o código de produção  Baixo acoplamento  Alta coesão  Evite repetições de código  Use PageObjects
  • 41. 5. Boas Práticas  Sempre coloque ID nos elementos HTML de suas páginas Web  Lembre-se: o código de seus testes também será mantido por outros desenvolvedores
  • 43. Links úteis  http://www.seleniumhq.org/  https://martinfowler.com/bliki/PageObject.html  https://www.w3schools.com/xml/xpath_syntax.asp  https://www.w3schools.com/cssref/css_selectors.asp  http://www.istqb.org/  http://www.bstqb.org.br/