• Save
Selenium - WebDriver
Upcoming SlideShare
Loading in...5
×
 

Selenium - WebDriver

on

  • 1,538 views

Aprenda a utilizar o Selenium WebDriver para testar sistemas web

Aprenda a utilizar o Selenium WebDriver para testar sistemas web

Statistics

Views

Total Views
1,538
Views on SlideShare
1,527
Embed Views
11

Actions

Likes
2
Downloads
0
Comments
2

3 Embeds 11

http://www.agilecode.com.br 6
http://agilecode.com.br 4
http://www.slideee.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Escopo das dependências
  • Archetypes
  • mvnarchetype:generate
  • Escopo das dependências
  • Gestão de dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • 2hs
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Surgimento da tabelaASCII em 1963. Falar um poucosobre a história
  • Surgimento da tabelaASCII em 1963. Falar um poucosobre a história
  • Surgimento da tabelaASCII em 1963. Falar um poucosobre a história
  • Surgimento da tabelaASCII em 1963. Falar um poucosobre a história
  • Surgimento da tabelaASCII em 1963. Falar um poucosobre a história
  • Escopo das dependências
  • Surgimento da tabelaASCII em 1963. Falar um poucosobre a história
  • Surgimento da tabelaASCII em 1963. Falar um poucosobre a história
  • Surgimento da tabelaASCII em 1963. Falar um poucosobre a história
  • Surgimento da tabelaASCII em 1963. Falar um poucosobre a história
  • Surgimento da tabelaASCII em 1963. Falar um poucosobre a história
  • Surgimento da tabelaASCII em 1963. Falar um poucosobre a história
  • Surgimento da tabelaASCII em 1963. Falar um poucosobre a história
  • Surgimento da tabelaASCII em 1963. Falar um poucosobre a história
  • Surgimento da tabelaASCII em 1963. Falar um poucosobre a história

Selenium - WebDriver Selenium - WebDriver Presentation Transcript

  • Automatizando testes de aceitação com Selenium WebDriver Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br
  • “Transformar equipes de desenvolvimento de software” http://www.agilecode.com.br
  • Rodrigo Branas rodrigo.branas@agilecode.com.br http://www.agilecode.com.br • Desenvolvendo Software na Gennera • Criando treinamentos na Agile Code • Escrevendo na Java Magazine e PacktPub • Palestrando sobre desenvolvimento de software em eventos, universidades e empresas
  • Certificações Formação Acadêmica Ciências da Computação – UFSC Gerenciamento de Projetos - FGV SCJA, SCJP, SCJD, SCWCD, SCBCD, PMP, MCP e CSM Experiência Há mais de 12 anos desenvolvendo software na plataforma Java com as empresas: EDS, HP, NET, Citibank, GM, Dígitro, Softplan, OnCa st, Senai, VALE, RBS, Unimed, Globalcode, V.Office, Suntech, WPlex e Gennera.
  • • Há mais de 5 anos liderando pessoas. • Mais de 2000 horas em sala de aula. • Mais de 100 apresentações em eventos. • 6 artigos escritos para revistas. • 1 livro. • Mais de 500 profissionais treinados. • Criação de 22 palestras. • Criação de 10 treinamentos. • Criação de mais de 3.000 slides.
  • Já parou para pensar quantas vezes por dia testamos a mesma coisa?
  • Infelizmente, é comum desperdiçarmos um tempo importante com testes braçais e repetitivos
  • Hansei e Kaizen
  • A automação dos testes deve ser vista como um investimento
  • Com o passar do tempo, o acúmulo de defeitos vira uma bola de neve...
  • Muitas vezes, o cliente ainda descobre o problema primeiro...
  • Por que não automatizar os testes?
  • Não temos tempo
  • O código é legado e difícil de testar
  • Pra piorar, os browsers não se entendem...
  • Selenium é uma das ferramentas mais conhecidas e utilizadas da atualidade para realizar a automação de testes de aceitação em aplicações web por meio da utilização do browser.
  • Sabe de onde veio o nome Selenium?
  • Processo de instalação
  • Vamos criar um projeto baseado em um Archetype do Maven
  • mvn archetype:generate
  • Maven Criando seu primeiro projeto Selenium
  • Maven Criando seu primeiro projeto Selenium mvn archetype:generate
  • Maven Criando seu primeiro projeto Selenium mvn archetype:generate Escolhar um tipo de projeto padrão
  • Maven Criando seu primeiro projeto Selenium mvn archetype:generate Escolhar um tipo de projeto padrão Definir as 3 informações fundamentais que identificam um artefato no Maven: groupId, artifactId e version
  • mvn eclipse:eclipse
  • Configurando as dependências para o projeto
  • Arquivo pom.xml 1. <project> 2. <modelVersion>4.0.0</modelVersion> 3. <groupId>br.com.rodrigobranas</groudId> 4. <artifactId>my-app</artifactId> 5. <version>1.0</version> 6. </project>
  • Arquivo pom.xml 1. <project> 2. <modelVersion>4.0.0</modelVersion> 3. <groupId>br.com.rodrigobranas</groudId> 4. <artifactId>my-app</artifactId> 5. <version>1.0</version> 6. <dependencies> 7. </dependencies> 8. </project>
  • Arquivo pom.xml 1. <project> 2. <modelVersion>4.0.0</modelVersion> 3. <groupId>br.com.rodrigobranas</groudId> 4. <artifactId>my-app</artifactId> 5. <version>1.0</version> 6. <dependencies> 7. <dependency> 8. </dependency> 9. </dependencies> 10. </project>
  • Arquivo pom.xml 1. <project> 2. <modelVersion>4.0.0</modelVersion> 3. <groupId>br.com.rodrigobranas</groudId> 4. <artifactId>my-app</artifactId> 5. <version>1.0</version> 6. <dependencies> 7. <dependency> 8. <groudId>org.seleniumhq.selenium</groupId> 9. <artifactId>selenium-java</artifactId> 10. <version>2.31.0</version> 11. </dependency> 12. </dependencies> 13. </project>
  • Arquivo pom.xml 1. <project> 2. <modelVersion>4.0.0</modelVersion> 3. <groupId>br.com.rodrigobranas</groudId> 4. <artifactId>my-app</artifactId> 5. <version>1.0</version> 6. <dependencies> 7. <dependency> 8. <groudId>junit</groupId> 9. <artifactId>junit</artifactId> 10. <version>4.8</version> 11. </dependency> 12. </dependencies> 13. </project>
  • mvn eclipse:eclipse
  • Conhecendo os drivers
  • Implementação responsável por interagir com os browsers. O Selenium fornece suporte para os principais do mercado como: Firefox, IE, Chrome, Opera e até Android e iOS.
  • Firefox Driver
  • Driver já incluido na biblioteca principal do Selenium e funciona baseado em uma extensão (xpi) que é adicionada ao Firefox no momento em que um FirefoxDriver é instanciado.
  • 1. @Test 2. public void testarPaginaComFirefox() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. // continuação do teste... 5. }
  • Aprendendo a navegar...
  • Entrando em uma página
  • Classe WebDriver Abstração de um browser, implementada por meio de drivers: FirefoxDriver, ChromeDriver, entre outros... get(url) – Carrega uma página getCurrentUrl() – Retorna a url getPageSource() – Retorna o código fonte da página getTitle() – Retorna o título da página close() – Fecha o browser
  • 1. @Test 2. public void deveEntrarEmUmaPagina() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. }
  • 1. @Test 2. public void deveEntrarEmUmaPagina() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. }
  • 1. @Test 2. public void deveEntrarEmUmaPagina() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. }
  • Conferindo o título da página…
  • 1. @Test 2. public void deveVerificarOTitulo() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. }
  • 1. @Test 2. public void deveVerificarOTitulo() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. String titulo = driver.getTitle(); 7. }
  • 1. @Test 2. public void deveVerificarOTitulo() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. String titulo = driver.getTitle(); 7. assertEquals(“Selenium – Playland”, titulo); 8. }
  • Classe WebDriver Abstração de um browser, implementada por meio de drivers: FirefoxDriver, ChromeDriver, entre outros... get(url) – Carrega uma página getCurrentUrl() – Retorna a url getPageSource() – Retorna o código fonte da página getTitle() – Retorna o título da página close() – Fecha o browser
  • Não se esqueça de fechar o browser
  • 1. @Test 2. public void deveVerificarOTitulo() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. String titulo = “Selenium – Playland”; 7. assertEquals(titulo, driver.getTitle()); 8. }
  • 1. @Test 2. public void deveVerificarOTitulo() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. String titulo = “Selenium – Playland”; 7. assertEquals(titulo, driver.getTitle()); 8. driver.close(); 9. }
  • Interagindo com os elementos de uma página
  • Classe WebDriver Abstração de um browser, implementada por meio de drivers: FirefoxDriver, ChromeDriver, entre outros... findElement(localizador) – Localiza um elemento na página findElements(localizador) – Localiza elementos na página
  • Como podemos fazer para localizar um elemento dentro de uma página?
  • Classe By Mecanismo utilizado para localizar um elemento dentro de um documento. id(“identificador do elemento”) className(“nome da classe”) tagName(“nome da tag”) name(“nome do elemento”) cssSelector(“css”) partialLinkText(“link parcial”) linkText(“link”) xpath(“xpath”)
  • Nome da Tag (ou Tag Name)
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML>
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML>
  • 1. @Test 2. public void localizarTextoDoElementoPorTag() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. }
  • 1. @Test 2. public void localizarTextoDoElementoPorTag() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento = driver.findElement(By.tagName(“h1”)); 7. }
  • Identificador (ou Id)
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <P id=“descricao”>Selenium Playland</P> 7. </BODY> 8. </HTML>
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <P id=“descricao”>Selenium Playland</P> 7. </BODY> 8. </HTML>
  • O identificador deve ser único
  • 1. @Test 2. public void localizarTextoDoElementoPorId() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. }
  • 1. @Test 2. public void localizarTextoDoElementoPorId() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento = driver.findElement(By.id(“descricao”)); 7. }
  • Nome da Classe (ou Class Name)
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <P class=“titulo negrito”>Selenium Playland</P> 7. <P class=“negrito”>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</P> 8. </BODY> 9. </HTML>
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <P class=“titulo negrito”>Selenium Playland</P> 7. <P class=“negrito”>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</P> 8. </BODY> 9. </HTML>
  • 1. @Test 2. public void localizarTextoDoElementoPorClass() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. }
  • 1. @Test 2. public void localizarTextoDoElementoPorClass() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. List<WebElement> elemento = driver.findElements(By.className(“negrito”)); 7. }
  • Texto do Link (ou Link Text)
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <P class=“titulo negrito”>Selenium Playland</P> 7. <A href=“conteudo.html”>Ir para o conteúdo</A> 8. </BODY> 9. </HTML>
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <P class=“titulo negrito”>Selenium Playland</P> 7. <A href=“conteudo.html”>Ir para o conteúdo</A> 8. </BODY> 9. </HTML>
  • 1. @Test 2. public void localizarLinkPeloNome() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. }
  • 1. @Test 2. public void localizarLinkPeloNome () { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement link = driver.findElement(By.linkText(“Ir para o conteúdo”)); 7. }
  • Também é possível utilizar o texto parcial do link (ou Partial Link Text)
  • 1. @Test 2. public void localizarLinkComApenasParteDele() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. }
  • 1. @Test 2. public void localizarLinkComApenasParteDele() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement link = driver.findElement(By.partialLinkText(“Ir para”)); 7. }
  • Seletor CSS (ou CSS Selector)
  • Cascading Style Sheet, ou simplismente CSS é uma linguagem de estilo utilizada para definir a apresentação de documentos escritos em uma linguagem de marcação como o HTML. Seu principal benefício é a separação entre a estrutura e o estilo em um documento.
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <P id=“descricao”>Selenium Playland</P> 7. </BODY> 8. </HTML>
  • 1. <HTML> 2. <HEAD> 3. 4. </HEAD> 5. <BODY> 6. <P id=“descricao”>Selenium Playland</P> 7. </BODY> 8. </HTML>
  • 1. <HTML> 2. <HEAD> 3. <STYLE> 4. </STYLE> 5. </HEAD> 6. <BODY> 7. <P id=“descricao”>Selenium Playland</P> 8. </BODY> 9. </HTML>
  • 1. <HTML> 2. <HEAD> 3. <STYLE> 4. #descricao { 5. } 6. </STYLE> 7. </HEAD> 8. <BODY> 9. <P id=“descricao”>Selenium Playland</P> 10. </BODY> 11. </HTML>
  • 1. <HTML> 2. <HEAD> 3. <STYLE> 4. #descricao { 5. font-weight: bold; 6. } 7. </STYLE> 8. </HEAD> 9. <BODY> 10. <P id=“descricao”>Selenium Playland</P> 11. </BODY> 12. </HTML>
  • 1. @Test 2. public void localizarElementoPorCSS() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. }
  • 1. @Test 2. public void localizarElementoPorCSS() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento = driver.findElement(By.cssSelector(“#descricao”)); 7. }
  • 1. <HTML> 2. <HEAD> 3. <STYLE> 4. #descricao { 5. font-weight: bold; 6. } 7. </STYLE> 8. </HEAD> 9. <BODY> 10. <P id=“descricao”>Selenium Playland</P> 11. </BODY> 12. </HTML>
  • 1. <HTML> 2. <HEAD> 3. <STYLE> 4. { 5. font-weight: bold; 6. } 7. </STYLE> 8. </HEAD> 9. <BODY> 10. <P >Selenium Playland</P> 11. </BODY> 12. </HTML>
  • 1. <HTML> 2. <HEAD> 3. <STYLE> 4. .negrito { 5. font-weight: bold; 6. } 7. </STYLE> 8. </HEAD> 9. <BODY> 10. <P class=“negrito”>Selenium Playland</P> 11. </BODY> 12. </HTML>
  • 1. @Test 2. public void localizarElementoPorCSS() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento = driver.findElement(By.cssSelector(“.negrito”)); 7. }
  • Tipos de CSS Selector * – Seleciona tudo X – Tag Selector – Seleciona o elemento X. #X – Id Selector – Seleciona o elemento com identificador igual a X. .X – Class Selector – Seleciona todos os elemento com a classe igual a X. X Y – Descendant Selector – Seleciona todos os elementos Y que estejam dentro do elemento X. X + Y – Adjacent Selector – Seleciona o elemento Y se ele estiver precedido pelo elemento X. X > Y – Child Selector – Seleciona os elementos Y que sejam filhos de Y. X[y] – Seleciona os elementos que possuem o atributo y. X[y=“z”] – Seleciona os elementos que possuem o atributo y = “z”.
  • Ainda não conseguiu localizar o elemento?
  • XPath
  • XPath, definido pela W3C, é uma linguagem de consulta (Query Language) que permite construir expressões que percorrem e processam um documento XML de maneira similar a expressões regulares. Os principais operadores são / e //. O primeiro serve para dar um passo na árvore XML enquanto o segundo pula vários níveis de uma só vez.
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML>
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML> XPath:
  • Como fazer para localizar o H1?
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML> XPath:
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML> XPath: HTML
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML> XPath: HTML/BODY
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML> XPath: HTML/BODY/H1
  • 1. @Test 2. public void localizarElementoPorXPath() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. }
  • 1. @Test 2. public void localizarElementoPorXPath() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento = driver.findElement(By.xpath(“html/body/h1”)); 7. }
  • Interagindo com o elemento
  • Classe WebElement Representa um elemento e oferece métodos para interagir com ele. getText() – Retorna o texto contido no elemento click() – Clica sobre o elemento getAttribute(nome) – Retorna o valor do atributo getCssValue(nome) – Retorna o valor da propriedade getTagName() – Retorna o nome da tag getText() – Retorna o texto contido no elemento
  • Verificando o texto de um elemento
  • 1. @Test 2. public void localizarTextoDoElementoPorId() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento = driver.findElement(By.id(“descricao”)); 7. }
  • 1. @Test 2. public void localizarTextoDoElementoPorId() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento = driver.findElement(By.id(“descricao”)); 7. String descricao = elemento.getText(); 8. }
  • 1. @Test 2. public void localizarTextoDoElementoPorId() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento = driver.findElement(By.id(“descricao”)); 7. String descricao = elemento.getText(); 8. assertEquals(“Selenium Playland”, descricao); 9. }
  • Clicando em um link
  • 1. @Test 2. public void clicarEmUmLink() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. }
  • 1. @Test 2. public void clicarEmUmLink() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement link = driver.findElement(By.linkText(“Ir para o conteúdo”)); 7. }
  • 1. @Test 2. public void clicarEmUmLink() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement link = driver.findElement(By.linkText(“Ir para o conteúdo”)); 7. link.click(); 8. }
  • 1. @Test 2. public void clicarEmUmLink() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement link = driver.findElement(By.linkText(“Ir para o conteúdo”)); 7. link.click(); 8. assertEquals(“Selenium – Playland – Sucesso”, driver.getTitle()); 9. }
  • 1. @BeforeClass 2. public static void abrirJanelaDoBrowser() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. } 5. @Before 6. public void entrarNaPagina() { 7. String pagina = “http://www.agilecode.com.br/selenium”; 8. driver.get(pagina); 9. } 10. @AfterClass 11. public void fecharJanelaDoBrowser() { 12. driver.close() 13. }
  • Manipulando formulários
  • Classe WebElement Representa um elemento e oferece métodos para interagir com ele. clear() – Limpa o texto contido no elemento getValue() – Retorna o valor do elemento sendKeys(text) – Envia um texto para o elemento setSelect() – Seleciona um elemento
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <FORM action=“login.html”> 7. <INPUT type=“text” name=“nome”/> 8. <INPUT type=“password” name=“senha”/> 9. </FORM> 10. </BODY> 11. </HTML>
  • Localizando o formulário
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <FORM action=“login.html”> 7. <INPUT type=“text” name=“nome”/> 8. <INPUT type=“password” name=“senha”/> 9. </FORM> 10. </BODY> 11. </HTML>
  • 1. @Test 2. public void preencherUmFormulario() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. }
  • 1. @Test 2. public void preencherUmFormulario() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement form = driver.findElement(By.name(“formulario”)); 7. }
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <FORM action=“login.html”> 7. <INPUT type=“text” name=“nome”/> 8. <INPUT type=“password” name=“senha”/> 9. </FORM> 10. </BODY> 11. </HTML>
  • 1. @Test 2. public void preencherUmFormulario() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement form = driver.findElement(By.tagName(“form”)); 7. }
  • 1. @Test 2. public void preencherUmFormulario() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement form = driver.findElement(By.name(“formulario”)); 7. WebElement nome = driver.findElement(By.name(“campo_user”)); 8. WebElement senha = driver.findElement(By.name(“campo_password”)); 9. }
  • Preenchendo os campos
  • 1. @Test 2. public void preencherUmFormulario() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement form = driver.findElement(By.name(“formulario”)); 7. WebElement nome = driver.findElement(By.name(“campo_user”)); 8. WebElement senha = driver.findElement(By.name(“campo_password”)); 9. }
  • 1. @Test 2. public void preencherUmFormulario() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement form = driver.findElement(By.name(“formulario”)); 7. WebElement nome = driver.findElement(By.name(“campo_user”)); 8. WebElement senha = driver.findElement(By.name(“campo_password”)); 9. nome.sendKeys(“agilecode”); 10. senha.sendKeys(“123456”); 11. }
  • Submetendo o formulário
  • 1. @Test 2. public void preencherUmFormulario() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement form = driver.findElement(By.name(“formulario”)); 7. WebElement nome = driver.findElement(By.name(“campo_user”)); 8. WebElement senha = driver.findElement(By.name(“campo_password”)); 9. nome.sendKeys(“agilecode”); 10. senha.sendKeys(“123456”); 11. }
  • 1. @Test 2. public void preencherUmFormulario() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); 5. String pagina = “http://www.agilecode.com.br/selenium”; 6. driver.get(pagina); 7. WebElement form = driver.findElement(By.name(“formulario”)); 8. WebElement nome = driver.findElement(By.name(“campo_user”)); 9. WebElement senha = driver.findElement(By.name(“campo_password”)); 10. nome.sendKeys(“agilecode”); 11. senha.sendKeys(“123456”); 12. form.submit(); 13. }
  • Interagindo com outras janelas
  • Classe WebDriver Abstração de um browser, implementada por meio de drivers: FirefoxDriver, ChromeDriver, entre outros... switchTo().window(“nome da janela”) – Alterna o driver para outra janela switchTo().frame(“nome do frame”) – Alterna o driver para outro frame getWindowHandle() – Retorna o nome da janela ativa, importante para voltar para a janela de origem após alternar para outra janela getWindowHandlers() – Retorna a lista de janelas
  • 1. @Test 2. public void interagirComNovaJanela() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. }
  • 1. @Test 2. public void interagirComNovaJanela() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. String origem = driver.getWindowHandle(); 7. }
  • 1. @Test 2. public void interagirComNovaJanela() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. String origem = driver.getWindowHandle(); 7. WebElement abrir = driver.findElement(By.id(“abrirNovaJanela”)); 8. }
  • 1. @Test 2. public void interagirComNovaJanela() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. String origem = driver.getWindowHandle(); 7. WebElement abrir = driver.findElement(By.id(“abrirNovaJanela”)); 8. abrir.click(); 9. }
  • 1. @Test 2. public void interagirComNovaJanela() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. String origem = driver.getWindowHandle(); 7. WebElement abrir = driver.findElement(By.id(“abrirNovaJanela”)); 8. abrir.click(); 9. driver.switchTo().window(“Nova Janela”); 10. }
  • 1. @Test 2. public void interagirComNovaJanela() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. String origem = driver.getWindowHandle(); 7. WebElement abrir = driver.findElement(By.id(“abrirNovaJanela”)); 8. abrir.click(); 9. driver.switchTo().window(“Nova Janela”); 10. assertEquals(“Nova Janela”, driver.getTitle()); 11. }
  • Tratando alertas
  • Classe WebDriver Abstração de um browser, implementada por meio de drivers: FirefoxDriver, ChromeDriver, entre outros... switchTo().alert() – Alterna o driver para o alerta
  • 1. @Test 2. public void tratarAlerta() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. }
  • 1. @Test 2. public void tratarAlerta() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement abrir = driver.findElement(By.id(“abrirAlerta”)); 7. }
  • 1. @Test 2. public void tratarAlerta() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement abrir = driver.findElement(By.id(“abrirAlerta”)); 7. abrir.click(); 8. }
  • 1. @Test 2. public void tratarAlerta() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement abrir = driver.findElement(By.id(“abrirAlerta”)); 7. abrir.click(); 8. Alert alert = driver.switchTo().alert(); 9. }
  • Classe Alert Representa uma abstração de um alerta e fornece métodos para interagir. accept() – Aceita o alerta dismiss() – Cancela o alerta getText() – Retorna a mensagem do alerta
  • 1. @Test 2. public void tratarAlerta() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement abrir = driver.findElement(By.id(“abrirAlerta”)); 7. abrir.click(); 8. Alert alert = driver.switchTo().alert(); 9. }
  • 1. @Test 2. public void tratarAlerta() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement abrir = driver.findElement(By.id(“abrirAlerta”)); 7. abrir.click(); 8. Alert alert = driver.switchTo().alert(); 9. String mensagem = alert.getText(); 10. }
  • 1. @Test 2. public void tratarAlerta() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement abrir = driver.findElement(By.id(“abrirAlerta”)); 7. abrir.click(); 8. Alert alert = driver.switchTo().alert(); 9. String mensagem = alert.getText(); 10. assertEquals(“Mensagem de alerta!”, mensagem); 11. }
  • 1. @Test 2. public void tratarAlerta() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement abrir = driver.findElement(By.id(“abrirAlerta”)); 7. abrir.click(); 8. Alert alert = driver.switchTo().alert(); 9. String mensagem = alert.getText(); 10. assertEquals(“Mensagem de alerta!”, mensagem); 11. alert.accept(); 12. }
  • Lidando com sincronização
  • 1. @Test 2. public void tratarChamadaAjax() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. }
  • 1. @Test 2. public void tratarChamadaAjax() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”)); 7. }
  • 1. @Test 2. public void tratarChamadaAjax() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”)); 7. chamadaAjax.click(); 8. }
  • 1. @Test 2. public void tratarChamadaAjax() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”)); 7. chamadaAjax.click(); 8. WebElement callback = driver.findElement(By.id(“callbackChamadaAjax”)); 9. }
  • 1. @Test 2. public void tratarChamadaAjax() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”)); 7. chamadaAjax.click(); 8. WebElement callback = driver.findElement(By.id(“callbackChamadaAjax”)); 9. assertEquals(“AgileCode”, callback.getText()); 10. }
  • Classe WebDriverWait Classe responsável por esperar que um determinado evento aconteça. WebDriverWait(driver, tempo) – Construtor baseado no driver e no tempo limite para que uma condição aconteça until(condition) – Aguarda até que uma condição aconteça
  • 1. @Test 2. public void tratarChamadaAjax() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”)); 7. chamadaAjax.click(); 8. }
  • 1. @Test 2. public void tratarChamadaAjax() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”)); 7. chamadaAjax.click(); 8. WebDriverWait wait = new WebDriverWait(driver, 10); 9. }
  • 1. @Test 2. public void tratarChamadaAjax() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”)); 7. chamadaAjax.click(); 8. WebDriverWait wait = new WebDriverWait(driver, 10); 9. wait.until(); 10. }
  • 1. @Test 2. public void tratarChamadaAjax() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”)); 7. chamadaAjax.click(); 8. WebDriverWait wait = new WebDriverWait(driver, 10); 9. wait.until(new ExpectedCondition<Boolean>() { 10. public Boolean apply(WebDriver driver) { 11. return !driver.findElement(By.id(“callback”)).getText().isEmpty(); 12. } 13. }); 14. }
  • 1. @Test 2. public void tratarChamadaAjax() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”)); 7. chamadaAjax.click(); 8. WebDriverWait wait = new WebDriverWait(driver, 10); 9. wait.until(new ExpectedCondition<Boolean>() { 10. public Boolean apply(WebDriver driver) { 11. return !driver.findElement(By.id(“callback”)).getText().isEmpty(); 12. } 13. }); 14. }
  • Classe ExpectedCondition Condição aguardada. Não deve retornar null ou false. apply() – Verifica se existe um alerta presente
  • 1. @Test 2. public void tratarChamadaAjax() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”)); 7. chamadaAjax.click(); 8. WebDriverWait wait = new WebDriverWait(driver, 10); 9. wait.until(new ExpectedCondition<Boolean>() { 10. public Boolean apply(WebDriver driver) { 11. return driver.findElement(By.id(“callback”)).getText().equals(“AgileCode”); 12. } 13. }); 14. }
  • 1. @Test 2. public void tratarChamadaAjax() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”)); 7. chamadaAjax.click(); 8. WebDriverWait wait = new WebDriverWait(driver, 10); 9. wait.until(); 10. }
  • Classe ExpectedConditions Condições mais comuns alertIsPresent() – Verifica se existe um alerta presente titleContains(titulo) – Verifica se o título da página contém o informado como parâmetro titleIs(titulo) – Verifica se o título da página é igual ao passado como parâmetro textToBePresentInElement(localizador, texto) – Verifica se o texto presente no elemento
  • 1. @Test 2. public void tratarChamadaAjax() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”)); 7. chamadaAjax.click(); 8. WebDriverWait wait = new WebDriverWait(driver, 10); 9. wait.until(); 10. }
  • 1. @Test 2. public void tratarChamadaAjax() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement chamadaAjax= driver.findElement(By.id(“fazerChamadaAjax”)); 7. chamadaAjax.click(); 8. WebDriverWait wait = new WebDriverWait(driver, 10); 9. wait.until(ExpectedConditions.textToBePresentInElement(By.id(“callback_chamada_ajax”), “AgileCode”)); 10. }
  • Page Objects
  • Com o tempo, os testes procedurais viram uma bagunça
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <FORM action=“login.html”> 7. <INPUT type=“text” name=“nome”/> 8. <INPUT type=“password” name=“senha”/> 9. </FORM> 10. </BODY> 11. </HTML>
  • 1. @Test 2. public void preencherUmFormulario() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement form = driver.findElement(By.tagName(“form”)); 7. WebElement nome = driver.findElement(By.name(“nome”)); 8. WebElement senha = driver.findElement(By.name(“senha”)); 9. nome.sendKeys(“agilecode”); 10. senha.sendKeys(“123456”); 11. }
  • Page Object é um padrão de modelagem de página na forma de objetos que tem como objetivo reduzir a duplicação de código relacionado a localização de elementos e manipulação de formulários dentro dos métodos de teste.
  • 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <FORM action=“login.html”> 7. <INPUT type=“text” name=“nome”/> 8. <INPUT type=“password” name=“senha”/> 9. </FORM> 10. </BODY> 11. </HTML>
  • Modelando as características da página no PageObject
  • Annotation FindBy Anotação responsável por vincular um elemento da página a um WebElement. @FindBy(name=“name”) – Localiza um elemento utilizando o atributo nome. @FindBy(id=“id”) – Localiza um elemento utilizando o seu identificador. @FindBy(css=“css”) – Localiza um elemento por meio de um seletor CSS.
  • 1. public class FormularioPage { 2. }
  • 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. }
  • 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. @FindBy(name=“nome”) 5. private WebElement campoNome; 6. }
  • 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. @FindBy(name=“nome”) 5. private WebElement campoNome; 6. @FindBy(name=“senha”) 7. private WebElement campoSenha; 8. }
  • 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. @FindBy(name=“nome”) 5. private WebElement campoNome; 6. @FindBy(name=“senha”) 7. private WebElement campoSenha; 8. 9. private WebDriver driver; 10. }
  • 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. @FindBy(name=“nome”) 5. private WebElement campoNome; 6. @FindBy(name=“senha”) 7. private WebElement campoSenha; 8. 9. private WebDriver driver; 10. 11. public FormularioPage(WebDriver driver) { 12. this.driver = driver; 13. } 14. }
  • Modelando o comportamento da página no PageObject
  • 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. @FindBy(name=“nome”) 5. private WebElement campoNome; 6. @FindBy(name=“senha”) 7. private WebElement campoSenha; 8. 9. }
  • 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. @FindBy(name=“nome”) 5. private WebElement campoNome; 6. @FindBy(name=“senha”) 7. private WebElement campoSenha; 8. 9. public FormularioPage preencher(String nome, String senha) { 10. } 11. }
  • 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. @FindBy(name=“nome”) 5. private WebElement campoNome; 6. @FindBy(name=“senha”) 7. private WebElement campoSenha; 8. 9. public FormularioPage preencher(String nome, String senha) { 10. campoNome.sendKeys(nome); 11. } 12. }
  • 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. @FindBy(name=“nome”) 5. private WebElement campoNome; 6. @FindBy(name=“senha”) 7. private WebElement campoSenha; 8. 9. public FormularioPage preencher(String nome, String senha) { 10. campoNome.sendKeys(nome); 11. campoSenha.sendKeys(senha); 12. } 13. }
  • 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. @FindBy(name=“nome”) 5. private WebElement campoNome; 6. @FindBy(name=“senha”) 7. private WebElement campoSenha; 8. 9. public FormularioPage preencher(String nome, String senha) { 10. campoNome.sendKeys(nome); 11. campoSenha.sendKeys(senha); 12. return PageFactory.initElements(driver, this); 13. } 14. }
  • 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. @FindBy(name=“nome”) 5. private WebElement campoNome; 6. @FindBy(name=“senha”) 7. private WebElement campoSenha; 8. 9. public FormularioPage preencher(String nome, String senha) { 10. campoNome.sendKeys(nome); 11. campoSenha.sendKeys(senha); 12. return PageFactory.initElements(driver, this); 13. } 14. 15. public SucessoPage enviar() { 16. } 17. }
  • 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. @FindBy(name=“nome”) 5. private WebElement campoNome; 6. @FindBy(name=“senha”) 7. private WebElement campoSenha; 8. 9. public FormularioPage preencher(String nome, String senha) { 10. campoNome.sendKeys(nome); 11. campoSenha.sendKeys(senha); 12. return PageFactory.initElements(driver, this); 13. } 14. 15. public SucessoPage enviar() { 16. formulario.submit(); 17. } 18. }
  • 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. @FindBy(name=“nome”) 5. private WebElement campoNome; 6. @FindBy(name=“senha”) 7. private WebElement campoSenha; 8. 9. public FormularioPage preencher(String nome, String senha) { 10. campoNome.sendKeys(nome); 11. campoSenha.sendKeys(senha); 12. return PageFactory.initElements(driver, this); 13. } 14. 15. public SucessoPage enviar() { 16. formulario.submit(); 17. return PageFactory.initElements(driver, SucessoPage.class); 18. } 19. }
  • 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. @FindBy(name=“nome”) 5. private WebElement campoNome; 6. @FindBy(name=“senha”) 7. private WebElement campoSenha; 8. 9. public FormularioPage preencher(String nome, String senha) { 10. campoNome.sendKeys(nome); 11. campoSenha.sendKeys(senha); 12. return PageFactory.initElements(driver, this); 13. } 14. 15. public SucessoPage enviar() { 16. formulario.submit(); 17. return PageFactory.initElements(driver, SucessoPage.class); 18. } 19. }
  • Classe PageFactory Classe responsável por realizar o vínculo entre os elementos da página e do Page Object. initElements(driver, page) – Inicializa o Page Object realizando o vínculo dos elementos
  • Criando o teste de aceitação automatizado
  • 1. @Test 2. public void preencherEEnviarUmFormulario() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement form = driver.findElement(By.tagName(“form”)); 7. WebElement nome = driver.findElement(By.name(“nome”)); 8. WebElement senha = driver.findElement(By.name(“senha”)); 9. nome.sendKeys(“Rodrigo”); 10. senha.sendKeys(“123456”); 11. form.submit(); 12. }
  • 1. @Test 2. public void preencherEEnviarUmFormulario() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. }
  • 1. @Test 2. public void preencherEEnviarUmFormulario() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. FormularioPage form = PageFactory.initElements(driver, FormularioPage.class); 7. }
  • 1. @Test 2. public void preencherEEnviarUmFormulario() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. FormularioPage form = PageFactory.initElements(driver, FormularioPage.class); 7. form.preencher(“Rodrigo”, “123456”) 8. }
  • 1. @Test 2. public void preencherEEnviarUmFormulario() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. FormularioPage form = PageFactory.initElements(driver, FormularioPage.class); 7. form.preencher(“Rodrigo”, “123456”).enviar() 8. }
  • 1. @Test 2. public void preencherEEnviarUmFormulario() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. FormularioPage form = PageFactory.initElements(driver, FormularioPage.class); 7. SucessoPage sucesso = form.preencher(“Rodrigo”, “123456”).enviar(); 8. }
  • 1. @Test 2. public void preencherEEnviarUmFormulario() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. FormularioPage form = PageFactory.initElements(driver, FormularioPage.class); 7. SucessoPage sucesso = form.preencher(“Rodrigo”, “123456”).enviar(); 8. assertTrue(sucesso.osDadosForamEnviadosCorretamente()); 9. }
  • Como testar em diferentes versões de browser e de sistema operacional?
  • Selenium Server
  • Selenium Server é uma software que permite a execução remota dos testes em maquinas diferentes, distribuindo seu processamento ou mesmo para utilizar browsers específicos em versões diferentes de sistemas operacionais.
  • Processo de instalação
  • Selenium Server Processo de Instalação
  • Selenium Server Processo de Instalação http://code.google.com/p/selenium/downloads/list
  • Selenium Server Processo de Instalação http://code.google.com/p/selenium/downloads/list Fazer o download do arquivo selenium-server- standalone-2.31.0.jar
  • Selenium Server Processo de Instalação http://code.google.com/p/selenium/downloads/list Fazer o download do arquivo selenium-server- standalone-2.31.0.jar java –jar selenium-server-standalone-2.31.0.jar
  • 1. @Test 2. public void umTesteDeAceitacaoQualquer() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. }
  • 1. @Test 2. public void umTesteDeAceitacaoQualquer() { 3. }
  • 1. @Test 2. public void umTesteDeAceitacaoQualquer() { 3. WebDriver driver = new RemoteWebDriver(url, browser); 4. }
  • 1. @Test 2. public void umTesteDeAceitacaoQualquer() { 3. 4. WebDriver driver = new RemoteWebDriver(url, browser); 5. }
  • 1. @Test 2. public void umTesteDeAceitacaoQualquer() { 3. URL url = new URL(“http://192.168.0.1:4444/wd/hub”); 4. WebDriver driver = new RemoteWebDriver(url, browser); 5. }
  • 1. @Test 2. public void umTesteDeAceitacaoQualquer() { 3. URL url = new URL(“http://192.168.0.1:4444/wd/hub”); 4. 5. WebDriver driver = new RemoteWebDriver(url, browser); 6. }
  • 1. @Test 2. public void umTesteDeAceitacaoQualquer() { 3. URL url = new URL(“http://192.168.0.1:4444/wd/hub”); 4. Capabilities browser = DesiredCapabilities.firefox(); 5. WebDriver driver = new RemoteWebDriver(url, browser); 6. }
  • Os testes do Selenium demoram muito, como melhorar a performance?
  • Selenium Grid
  • Selenium Grid é responsável por paralelizar e coordenar a execução dos testes do Selenium em várias maquinas ao mesmo tempo.
  • Processo de instalação
  • Selenium Grid Processo de Instalação e Inicialização
  • Selenium Grid Processo de Instalação e Inicialização • Entrar em http://code.google.com/p/selenium/downloads/list
  • Selenium Grid Processo de Instalação e Inicialização • Entrar em http://code.google.com/p/selenium/downloads/list • Fazer o download do arquivo selenium-server-standalone-2.31.0.jar
  • Selenium Grid Processo de Instalação e Inicialização • Entrar em http://code.google.com/p/selenium/downloads/list • Fazer o download do arquivo selenium-server-standalone-2.31.0.jar • Renomear o arquivo para selenium-server.jar
  • Selenium Grid Processo de Instalação e Inicialização • Entrar em http://code.google.com/p/selenium/downloads/list • Fazer o download do arquivo selenium-server-standalone-2.31.0.jar • Iniciar o hub: java –jar selenium-server-standalone-2.31.0.jar –role hub
  • Selenium Grid Processo de Instalação e Inicialização • Entrar em http://code.google.com/p/selenium/downloads/list • Fazer o download do arquivo selenium-server-standalone-2.31.0.jar • Iniciar o hub: java –jar selenium-server.jar –role hub • Iniciar o node: java –jar selenium-server.jar -role node –hub http://ip_do_hub:4444/grid/register
  • Selenium Grid Processo de Instalação e Inicialização • Entrar em http://code.google.com/p/selenium/downloads/list • Fazer o download do arquivo selenium-server-standalone-2.31.0.jar • Renomear o arquivo para selenium-server.jar • Iniciar o hub: java –jar selenium-server.jar –role hub • Iniciar o node: java –jar selenium-server.jar -role node –hub http://ip_do_hub:4444/grid/register • Visualizar o grid em: http://ip_do_hub:4444/grid/console
  • Não é possível executar vários nodes na mesma maquina sem configurar portas diferentes
  • Selenium Grid Configuração • Modificar a porta de execução do node: -port 5556 (Por padrão a porta utilizada é a 5555) • Configurar o browser padrão: -browser browserName=firefox (Por padrão o node é configurado com firefox, chrome e ie)