Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br 
Automatizando testes de aceitação 
com Selenium WebDriver
“Tornar desenvolvedores de software mais 
motivados e produtivos” 
http://www.agilecode.com.br
Rodrigo Branas 
rodrigo.branas@agilecode.com.br 
http://www.agilecode.com.br
Rodrigo Branas 
rodrigo.branas@agilecode.com.br 
http://www.agilecode.com.br 
• Empreendedor, Comercial, Designer e 
Desenvolvedor na Kaptec e Gennera
Rodrigo Branas 
rodrigo.branas@agilecode.com.br 
http://www.agilecode.com.br 
• Empreendedor, Comercial, Designer e 
Desenvolvedor na Kaptec e Gennera 
• Empreendedor e Instrutor na Agile Code
Transformar equipes de desenvolvimento de software! 
http://www.agilecode.com.br
Estatísticas 
+6 anos 
+100 palestras em eventos 
+10.000 pessoas já assistiram 
+50 turmas realizadas 
+1000 desenvolvedores treinados
Rodrigo Branas 
rodrigo.branas@agilecode.com.br 
http://www.agilecode.com.br 
• Empreendedor, Comercial, Designer e 
Desenvolvedor na Kaptec e Gennera 
• Empreendedor e Instrutor na Agile Code
Rodrigo Branas 
rodrigo.branas@agilecode.com.br 
http://www.agilecode.com.br 
• Empreendedor, Comercial, Designer e 
Desenvolvedor na Kaptec e Gennera 
• Empreendedor e Instrutor na Agile Code 
• Autor na PacktPub e Java Magazine
Rodrigo Branas 
rodrigo.branas@agilecode.com.br 
http://www.agilecode.com.br 
• Empreendedor, Comercial, Designer e 
Desenvolvedor na Kaptec e Gennera 
• Empreendedor e Instrutor na Agile Code 
• Autor na PacktPub e Java Magazine
Rodrigo Branas 
rodrigo.branas@agilecode.com.br 
http://www.agilecode.com.br 
• Empreendedor, Comercial, Designer e 
Desenvolvedor na Kaptec e Gennera 
• Empreendedor e Instrutor na Agile Code 
• Autor na PacktPub e Java Magazine 
• Palestrante em eventos de universidades 
e empresas
Qual é o problema em não ter de 
testes automatizados?
Code and Pray
Trabalho braçal para testar várias 
vezes a mesma coisa
Trabalhar em um castelo de cartas
Você tem medo do projeto em 
que trabalha?
Onde entra o Agile nisso tudo?
Velocidade é a ausência de 
desperdício – Amyr Klink
Se você trabalha para eliminar o 
desperdício, aumentará gradativamente 
a porcentagem de tempo que gasta 
adicionando valor ao produto!
Que tipos de testes podem ser 
automatizados?
Unitário – Explora o funcionamento 
de algoritmos de forma isolada
Integrado – Testa a interação entre 
diferentes camadas do software
Aceitação – Garante que o software 
funciona por completo e que está 
pronto para ser utilizado pelos usuários
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...
Por que não automatizamos 
os testes?
Não temos tempo
Temos tempo para corrigir bugs?
Temos tempo para entender código de 
baixa qualidade?
Temos tempo para testar várias vezes a 
mesma coisa?
O código é legado e é muito 
difícil de testar
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.
Qual é a origem do nome 
Selenium?
Selênio combate o 
envenenamento por mercúrio
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. <groupId>org.seleniumhq.selenium</groupId> 
9. <artifactId>selenium-java</artifactId> 
10. <version>2.44.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 – 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". 
X[y="z"][a="b"] – Seleciona os elementos que possuem o atributo y = "z" 
e a="b".
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. }
Sintaxe do XPath 
h1 – Seleciona todos os elementos h1 
html/body/h1 – Seleciona o elemento h1, passando por body e 
html. 
html//h1 – Seleciona o elemento h1 diretamente, sem passar 
por body. 
//h1 – Seleciona todos os elementos h1 
html/body/h1[2] – Seleciona o segundo elemento h1 
html/body/h1[last()] – Seleciona o último elemento h1 
html/body/h1[last()-1] – Seleciona o penúltimo elemento h1 
html/body/h1[@style='font-weight: bold'] – Seleciona os 
elementos h1 com o atributo style igual a font-weight: bold.
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
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. }
Classe Navigation 
Permite realizar tipos específicos de navegação. 
to(url) – Navega para a url, similar ao comando get(url) 
back() – Retorna para a página anterior 
forward() – Vai para a próxima página 
refresh() – Recarrega a página
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. @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. driver.navigate().back(); 
10. assertEquals(“Selenium – Playland”, driver.getTitle()); 
11. }
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 
isSelected() – Verifica se um radio button ou checkbox está 
selecionado
1. <FORM action=“login.html”> 
2. <INPUT type=“text” name=“nome”/> 
3. <INPUT type=“password” name=“senha”/> 
4. <SELECT name=“tipo”> 
5. <OPTION value="">Selecione</OPTION> 
6. <OPTION value="1">Cliente</OPTION> 
7. <OPTION value="2">Fornecedor</OPTION> 
8. </SELECT> 
9. </FORM>
Localizando o formulário
1. <FORM action=“login.html”> 
2. <INPUT type=“text” name=“nome”/> 
3. <INPUT type=“password” name=“senha”/> 
4. <SELECT name=“tipo”> 
5. <OPTION value="">Selecione</OPTION> 
6. <OPTION value="1">Cliente</OPTION> 
7. <OPTION value="2">Fornecedor</OPTION> 
8. </SELECT> 
9. </FORM>
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.tagName(“form”)); 
7. }
1. <FORM action=“login.html”> 
2. <INPUT type=“text” name=“nome”/> 
3. <INPUT type=“password” name=“senha”/> 
4. <SELECT name=“tipo”> 
5. <OPTION value="">Selecione</OPTION> 
6. <OPTION value="1">Cliente</OPTION> 
7. <OPTION value="2">Fornecedor</OPTION> 
8. </SELECT> 
9. </FORM>
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.tagName(“form”)); 
7. WebElement nome = driver.findElement(By.name(“nome”)); 
8. }
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. }
Classe Select 
selectByVisibleText(text) – Seleciona uma opção pelo texto 
selectByValue(value) – Seleciona uma opção pelo valor 
selectByIndex(index) – Seleciona uma opção pelo índice 
getOptions() – Retorna uma lista com as opções 
getFirstSelectedOption() – Retorna a primeira opção 
selecionada 
isMultiple() – Verifica se o tipo do select é múltiplo 
getAllSelectedOptions() – Retorna todas as opções 
selecionadas 
deselectAll() – Desmarca todas as opções 
deselectByVisibleText(text) – Desmarca uma opção pelo 
texto
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. }
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. Select tipo = new Select(driver.findElement(By.name(“tipo”))); 
10. }
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.tagName(“form”)); 
7. WebElement nome = driver.findElement(By.name(“nome”)); 
8. WebElement senha = driver.findElement(By.name(“senha”)); 
9. Select tipo = new Select(driver.findElement(By.name(“tipo”))); 
10. }
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. Select tipo = new Select(driver.findElement(By.name(“tipo”))); 
10. nome.sendKeys("agilecode"); 
11. senha.sendKeys("123456"); 
12. tipo.selectByValue("2"); 
13. }
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.tagName(“form”)); 
7. WebElement nome = driver.findElement(By.name(“nome”)); 
8. WebElement senha = driver.findElement(By.name(“senha”)); 
9. Select tipo = new Select(driver.findElement(By.name(“tipo”))); 
10. nome.sendKeys("agilecode"); 
11. senha.sendKeys("123456"); 
12. tipo.selectByValue("2"); 
13. }
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. Select tipo = new Select(driver.findElement(By.name(“tipo”))); 
10. nome.sendKeys("agilecode"); 
11. senha.sendKeys("123456"); 
12. tipo.selectByValue("2"); 
13. form.submit(); 
14. }
Interagindo com outras janelas
Classe TargetLocator 
Permite mudar driver para uma outra janela ou 
frame. 
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 TargetLocator 
A classe TargetLocator permite ainda tratar alertas. 
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
Classe Timeouts 
Configura o tempo de timeout do driver em 
diferentes situações. 
implicitlyWait(tempo, medida) – Define um tempo em que 
o driver aguarda até que um elemento solicitado esteja 
disponível. 
pageLoadTimeout(tempo, medida) – Define um tempo em 
que o driver aguarda pelo carregamento da página. 
setScriptTimeout(tempo, medida) – Define um tempo em 
que o driver aguarda pelo carregamento de scripts.
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, timeout) – Construtor baseado no 
driver e no tempo limite para que uma condição aconteça. 
WebDriverWait(driver, timeout, sleep) – Construtor baseado 
no driver e no tempo limite para que uma condição 
aconteça. Além disso, é possível configurar de quanto em 
quanto tempo o processo se repetirá. O tempo default é de 
500ms. 
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. }
Classe FluentWait 
FluentWait(driver) – Construtor baseado no driver. 
withTimeout(timeout) – Configura quanto tempo o driver 
deve aguardar. 
withMessage(msg) – Configura uma mensagem caso o 
elemento não seja encontrado. 
poolingEvery(duration) – Configura o intervalo de 
verificação da condição. 
ignoring(exception) – Ignora uma determinada exceção. 
until() – Construtor baseado no driver.
Drag and Drop
Classe Actions 
Permite realizar ações como arrastar e soltar 
elementos. 
clickAndHold(element) – Clica e segura um elemento. 
moveTo(element) – Move o elemento para outro elemento. 
pause(timeout) – Aguarda por um tempo determinado em milisegundos. 
release() – Solta o elemento. 
dragAndDrop(source, target) – Clica e segura um elemento, movendo-o 
para outro elemento. (Similar a utilizar os métodos clickAndHold, moveTo e 
release, combinados) 
build() – Constrói a ação. 
perform() – Executa a ação.
1. @Test 
2. public void dragAndDrop() { 
3. FirefoxDriver driver = new FirefoxDriver(); 
4. String pagina = “http://www.agilecode.com.br/selenium”; 
5. driver.get(pagina); 
6. }
1. @Test 
2. public void dragAndDrop() { 
3. FirefoxDriver driver = new FirefoxDriver(); 
4. String pagina = “http://www.agilecode.com.br/selenium”; 
5. driver.get(pagina); 
6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 
7. }
1. @Test 
2. public void dragAndDrop() { 
3. FirefoxDriver driver = new FirefoxDriver(); 
4. String pagina = “http://www.agilecode.com.br/selenium”; 
5. driver.get(pagina); 
6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 
7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 
8. }
1. @Test 
2. public void dragAndDrop() { 
3. FirefoxDriver driver = new FirefoxDriver(); 
4. String pagina = “http://www.agilecode.com.br/selenium”; 
5. driver.get(pagina); 
6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 
7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 
8. Actions action = new Actions(driver); 
9. }
1. @Test 
2. public void dragAndDrop() { 
3. FirefoxDriver driver = new FirefoxDriver(); 
4. String pagina = “http://www.agilecode.com.br/selenium”; 
5. driver.get(pagina); 
6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 
7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 
8. Actions action = new Actions(driver); 
9. action.clickAndHold(elemento1) 
10. }
1. @Test 
2. public void dragAndDrop() { 
3. FirefoxDriver driver = new FirefoxDriver(); 
4. String pagina = “http://www.agilecode.com.br/selenium”; 
5. driver.get(pagina); 
6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 
7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 
8. Actions action = new Actions(driver); 
9. action.clickAndHold(elemento1) 
10. .moveTo(elemento2) 
11. }
1. @Test 
2. public void dragAndDrop() { 
3. FirefoxDriver driver = new FirefoxDriver(); 
4. String pagina = “http://www.agilecode.com.br/selenium”; 
5. driver.get(pagina); 
6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 
7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 
8. Actions action = new Actions(driver); 
9. action.clickAndHold(elemento1) 
10. .moveTo(elemento2) 
11. .release(); 
12. }
1. @Test 
2. public void dragAndDrop() { 
3. FirefoxDriver driver = new FirefoxDriver(); 
4. String pagina = “http://www.agilecode.com.br/selenium”; 
5. driver.get(pagina); 
6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 
7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 
8. Actions action = new Actions(driver); 
9. action.clickAndHold(elemento1) 
10. .moveTo(elemento2) 
11. .release(); 
12. .build(); 
13. }
1. @Test 
2. public void dragAndDrop() { 
3. FirefoxDriver driver = new FirefoxDriver(); 
4. String pagina = “http://www.agilecode.com.br/selenium”; 
5. driver.get(pagina); 
6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 
7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 
8. Actions action = new Actions(driver); 
9. action.clickAndHold(elemento1) 
10. .moveTo(elemento2) 
11. .release(); 
12. .build(); 
13. action.perform(); 
14. }
1. @Test 
2. public void dragAndDrop() { 
3. FirefoxDriver driver = new FirefoxDriver(); 
4. String pagina = “http://www.agilecode.com.br/selenium”; 
5. driver.get(pagina); 
6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 
7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 
8. Actions action = new Actions(driver); 
9. action.clickAndHold(elemento1) 
10. .moveTo(elemento2) 
11. .release(); 
12. .build(); 
13. action.perform(); 
14. }
1. @Test 
2. public void dragAndDrop() { 
3. FirefoxDriver driver = new FirefoxDriver(); 
4. String pagina = “http://www.agilecode.com.br/selenium”; 
5. driver.get(pagina); 
6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 
7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 
8. Actions action = new Actions(driver); 
9. .build(); 
10. action.perform(); 
11. }
1. @Test 
2. public void dragAndDrop() { 
3. FirefoxDriver driver = new FirefoxDriver(); 
4. String pagina = “http://www.agilecode.com.br/selenium”; 
5. driver.get(pagina); 
6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 
7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 
8. Actions action = new Actions(driver); 
9. action.dragAndDrop(elemento1, elemento2) 
10. .build(); 
11. action.perform(); 
12. }
1. @Test 
2. public void dragAndDrop() { 
3. FirefoxDriver driver = new FirefoxDriver(); 
4. String pagina = “http://www.agilecode.com.br/selenium”; 
5. driver.get(pagina); 
6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 
7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 
8. Actions action = new Actions(driver); 
9. action.dragAndDrop(elemento1, elemento2) 
10. .build(); 
11. action.perform(); 
12. }
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)

Selenium - WebDriver

  • 1.
    Rodrigo Branas –@rodrigobranas - http://www.agilecode.com.br Automatizando testes de aceitação com Selenium WebDriver
  • 2.
    “Tornar desenvolvedores desoftware mais motivados e produtivos” http://www.agilecode.com.br
  • 3.
  • 4.
    Rodrigo Branas rodrigo.branas@agilecode.com.br http://www.agilecode.com.br • Empreendedor, Comercial, Designer e Desenvolvedor na Kaptec e Gennera
  • 5.
    Rodrigo Branas rodrigo.branas@agilecode.com.br http://www.agilecode.com.br • Empreendedor, Comercial, Designer e Desenvolvedor na Kaptec e Gennera • Empreendedor e Instrutor na Agile Code
  • 6.
    Transformar equipes dedesenvolvimento de software! http://www.agilecode.com.br
  • 7.
    Estatísticas +6 anos +100 palestras em eventos +10.000 pessoas já assistiram +50 turmas realizadas +1000 desenvolvedores treinados
  • 9.
    Rodrigo Branas rodrigo.branas@agilecode.com.br http://www.agilecode.com.br • Empreendedor, Comercial, Designer e Desenvolvedor na Kaptec e Gennera • Empreendedor e Instrutor na Agile Code
  • 10.
    Rodrigo Branas rodrigo.branas@agilecode.com.br http://www.agilecode.com.br • Empreendedor, Comercial, Designer e Desenvolvedor na Kaptec e Gennera • Empreendedor e Instrutor na Agile Code • Autor na PacktPub e Java Magazine
  • 13.
    Rodrigo Branas rodrigo.branas@agilecode.com.br http://www.agilecode.com.br • Empreendedor, Comercial, Designer e Desenvolvedor na Kaptec e Gennera • Empreendedor e Instrutor na Agile Code • Autor na PacktPub e Java Magazine
  • 14.
    Rodrigo Branas rodrigo.branas@agilecode.com.br http://www.agilecode.com.br • Empreendedor, Comercial, Designer e Desenvolvedor na Kaptec e Gennera • Empreendedor e Instrutor na Agile Code • Autor na PacktPub e Java Magazine • Palestrante em eventos de universidades e empresas
  • 15.
    Qual é oproblema em não ter de testes automatizados?
  • 16.
  • 17.
    Trabalho braçal paratestar várias vezes a mesma coisa
  • 18.
    Trabalhar em umcastelo de cartas
  • 19.
    Você tem medodo projeto em que trabalha?
  • 20.
    Onde entra oAgile nisso tudo?
  • 21.
    Velocidade é aausência de desperdício – Amyr Klink
  • 22.
    Se você trabalhapara eliminar o desperdício, aumentará gradativamente a porcentagem de tempo que gasta adicionando valor ao produto!
  • 23.
    Que tipos detestes podem ser automatizados?
  • 24.
    Unitário – Explorao funcionamento de algoritmos de forma isolada
  • 25.
    Integrado – Testaa interação entre diferentes camadas do software
  • 26.
    Aceitação – Garanteque o software funciona por completo e que está pronto para ser utilizado pelos usuários
  • 27.
    A automação dostestes deve ser vista como um investimento
  • 29.
    Com o passardo tempo, o acúmulo de defeitos vira uma bola de neve...
  • 30.
    Por que nãoautomatizamos os testes?
  • 31.
  • 32.
    Temos tempo paracorrigir bugs?
  • 33.
    Temos tempo paraentender código de baixa qualidade?
  • 34.
    Temos tempo paratestar várias vezes a mesma coisa?
  • 35.
    O código élegado e é muito difícil de testar
  • 37.
    Selenium é umadas 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.
  • 40.
    Qual é aorigem do nome Selenium?
  • 41.
    Selênio combate o envenenamento por mercúrio
  • 43.
  • 44.
    Vamos criar umprojeto baseado em um Archetype do Maven
  • 45.
  • 46.
    Maven Criando seuprimeiro projeto Selenium
  • 47.
    Maven Criando seuprimeiro projeto Selenium mvn archetype:generate
  • 48.
    Maven Criando seuprimeiro projeto Selenium mvn archetype:generate Escolhar um tipo de projeto padrão
  • 49.
    Maven Criando seuprimeiro 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
  • 50.
  • 51.
  • 52.
    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>
  • 53.
    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>
  • 54.
    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>
  • 55.
    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. <groupId>org.seleniumhq.selenium</groupId> 9. <artifactId>selenium-java</artifactId> 10. <version>2.44.0</version> 11. </dependency> 12. </dependencies> 13. </project>
  • 56.
    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>
  • 57.
  • 58.
  • 59.
    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.
  • 60.
  • 61.
    Driver já incluidona biblioteca principal do Selenium e funciona baseado em uma extensão (xpi) que é adicionada ao Firefox no momento em que um FirefoxDriver é instanciado.
  • 62.
    1. @Test 2.public void testarPaginaComFirefox() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. // continuação do teste... 5. }
  • 64.
  • 65.
  • 66.
    Classe WebDriver Abstraçãode 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
  • 67.
    1. @Test 2.public void deveEntrarEmUmaPagina() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. }
  • 68.
    1. @Test 2.public void deveEntrarEmUmaPagina() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. }
  • 69.
    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. }
  • 70.
    Conferindo o títuloda página…
  • 71.
    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. }
  • 72.
    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. }
  • 73.
    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. }
  • 74.
    Classe WebDriver Abstraçãode 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
  • 75.
    Não se esqueçade fechar o browser
  • 76.
    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. }
  • 77.
    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. }
  • 78.
    Interagindo com oselementos de uma página
  • 79.
    Classe WebDriver Abstraçãode 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
  • 80.
    Como podemos fazerpara localizar um elemento dentro de uma página?
  • 81.
    Classe By Mecanismoutilizado 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”)
  • 82.
    Nome da Tag(ou Tag Name)
  • 83.
    1. <HTML> 2.<HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML>
  • 84.
    1. <HTML> 2.<HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML>
  • 85.
    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. }
  • 86.
    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. }
  • 87.
  • 88.
    1. <HTML> 2.<HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <P id=“descricao”>Selenium Playland</P> 7. </BODY> 8. </HTML>
  • 89.
    1. <HTML> 2.<HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <P id=“descricao”>Selenium Playland</P> 7. </BODY> 8. </HTML>
  • 90.
  • 91.
    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. }
  • 92.
    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. }
  • 93.
    Nome da Classe(ou Class Name)
  • 94.
    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>
  • 95.
    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>
  • 96.
    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. }
  • 97.
    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. }
  • 98.
    Texto do Link(ou Link Text)
  • 99.
    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>
  • 100.
    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>
  • 101.
    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. }
  • 102.
    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. }
  • 103.
    Também é possívelutilizar o texto parcial do link (ou Partial Link Text)
  • 104.
    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. }
  • 105.
    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. }
  • 106.
    Seletor CSS (ouCSS Selector)
  • 107.
    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.
  • 108.
    1. <HTML> 2.<HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <P id=“descricao”>Selenium Playland</P> 7. </BODY> 8. </HTML>
  • 109.
    1. <HTML> 2.<HEAD> 3. 4. </HEAD> 5. <BODY> 6. <P id=“descricao”>Selenium Playland</P> 7. </BODY> 8. </HTML>
  • 110.
    1. <HTML> 2.<HEAD> 3. <STYLE> 4. </STYLE> 5. </HEAD> 6. <BODY> 7. <P id=“descricao”>Selenium Playland</P> 8. </BODY> 9. </HTML>
  • 111.
    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>
  • 112.
    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>
  • 113.
    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. }
  • 114.
    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. }
  • 115.
    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>
  • 116.
    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>
  • 117.
    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>
  • 118.
    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. }
  • 119.
    Tipos de CSSSelector * – 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 – 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". X[y="z"][a="b"] – Seleciona os elementos que possuem o atributo y = "z" e a="b".
  • 120.
    Ainda não conseguiulocalizar o elemento?
  • 121.
  • 122.
    XPath, definido pelaW3C, é 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.
  • 123.
    1. <HTML> 2.<HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML>
  • 124.
    1. <HTML> 2.<HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML> XPath:
  • 125.
    Como fazer paralocalizar o H1?
  • 126.
    1. <HTML> 2.<HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML> XPath:
  • 127.
    1. <HTML> 2.<HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML> XPath: HTML
  • 128.
    1. <HTML> 2.<HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML> XPath: HTML/BODY
  • 129.
    1. <HTML> 2.<HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML> XPath: HTML/BODY/H1
  • 130.
    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. }
  • 131.
    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. }
  • 132.
    Sintaxe do XPath h1 – Seleciona todos os elementos h1 html/body/h1 – Seleciona o elemento h1, passando por body e html. html//h1 – Seleciona o elemento h1 diretamente, sem passar por body. //h1 – Seleciona todos os elementos h1 html/body/h1[2] – Seleciona o segundo elemento h1 html/body/h1[last()] – Seleciona o último elemento h1 html/body/h1[last()-1] – Seleciona o penúltimo elemento h1 html/body/h1[@style='font-weight: bold'] – Seleciona os elementos h1 com o atributo style igual a font-weight: bold.
  • 133.
  • 134.
    Classe WebElement Representaum 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
  • 135.
    Verificando o textode um elemento
  • 136.
    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. }
  • 137.
    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. }
  • 138.
    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. }
  • 139.
  • 140.
    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. }
  • 141.
    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. }
  • 142.
    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. }
  • 143.
    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. }
  • 144.
    Classe Navigation Permiterealizar tipos específicos de navegação. to(url) – Navega para a url, similar ao comando get(url) back() – Retorna para a página anterior forward() – Vai para a próxima página refresh() – Recarrega a página
  • 145.
    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. }
  • 146.
    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. driver.navigate().back(); 10. assertEquals(“Selenium – Playland”, driver.getTitle()); 11. }
  • 147.
  • 148.
    Classe WebElement Representaum 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 isSelected() – Verifica se um radio button ou checkbox está selecionado
  • 149.
    1. <FORM action=“login.html”> 2. <INPUT type=“text” name=“nome”/> 3. <INPUT type=“password” name=“senha”/> 4. <SELECT name=“tipo”> 5. <OPTION value="">Selecione</OPTION> 6. <OPTION value="1">Cliente</OPTION> 7. <OPTION value="2">Fornecedor</OPTION> 8. </SELECT> 9. </FORM>
  • 150.
  • 151.
    1. <FORM action=“login.html”> 2. <INPUT type=“text” name=“nome”/> 3. <INPUT type=“password” name=“senha”/> 4. <SELECT name=“tipo”> 5. <OPTION value="">Selecione</OPTION> 6. <OPTION value="1">Cliente</OPTION> 7. <OPTION value="2">Fornecedor</OPTION> 8. </SELECT> 9. </FORM>
  • 152.
    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. }
  • 153.
    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. }
  • 154.
    1. <FORM action=“login.html”> 2. <INPUT type=“text” name=“nome”/> 3. <INPUT type=“password” name=“senha”/> 4. <SELECT name=“tipo”> 5. <OPTION value="">Selecione</OPTION> 6. <OPTION value="1">Cliente</OPTION> 7. <OPTION value="2">Fornecedor</OPTION> 8. </SELECT> 9. </FORM>
  • 155.
    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. }
  • 156.
    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. }
  • 157.
    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. }
  • 158.
    Classe Select selectByVisibleText(text)– Seleciona uma opção pelo texto selectByValue(value) – Seleciona uma opção pelo valor selectByIndex(index) – Seleciona uma opção pelo índice getOptions() – Retorna uma lista com as opções getFirstSelectedOption() – Retorna a primeira opção selecionada isMultiple() – Verifica se o tipo do select é múltiplo getAllSelectedOptions() – Retorna todas as opções selecionadas deselectAll() – Desmarca todas as opções deselectByVisibleText(text) – Desmarca uma opção pelo texto
  • 159.
    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. }
  • 160.
    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. Select tipo = new Select(driver.findElement(By.name(“tipo”))); 10. }
  • 161.
  • 162.
    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. Select tipo = new Select(driver.findElement(By.name(“tipo”))); 10. }
  • 163.
    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. Select tipo = new Select(driver.findElement(By.name(“tipo”))); 10. nome.sendKeys("agilecode"); 11. senha.sendKeys("123456"); 12. tipo.selectByValue("2"); 13. }
  • 164.
  • 165.
    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. Select tipo = new Select(driver.findElement(By.name(“tipo”))); 10. nome.sendKeys("agilecode"); 11. senha.sendKeys("123456"); 12. tipo.selectByValue("2"); 13. }
  • 166.
    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. Select tipo = new Select(driver.findElement(By.name(“tipo”))); 10. nome.sendKeys("agilecode"); 11. senha.sendKeys("123456"); 12. tipo.selectByValue("2"); 13. form.submit(); 14. }
  • 167.
  • 168.
    Classe TargetLocator Permitemudar driver para uma outra janela ou frame. 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
  • 169.
    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. }
  • 170.
    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. }
  • 171.
    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. }
  • 172.
    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. }
  • 173.
    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. }
  • 174.
    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. }
  • 175.
  • 176.
    Classe TargetLocator Aclasse TargetLocator permite ainda tratar alertas. switchTo().alert() – Alterna o driver para o alerta
  • 177.
    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. }
  • 178.
    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. }
  • 179.
    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. }
  • 180.
    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. }
  • 181.
    Classe Alert Representauma 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
  • 182.
    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. }
  • 183.
    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. }
  • 184.
    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. }
  • 185.
    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. }
  • 186.
  • 187.
    Classe Timeouts Configurao tempo de timeout do driver em diferentes situações. implicitlyWait(tempo, medida) – Define um tempo em que o driver aguarda até que um elemento solicitado esteja disponível. pageLoadTimeout(tempo, medida) – Define um tempo em que o driver aguarda pelo carregamento da página. setScriptTimeout(tempo, medida) – Define um tempo em que o driver aguarda pelo carregamento de scripts.
  • 188.
    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. }
  • 189.
    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. }
  • 190.
    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. }
  • 191.
    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. }
  • 192.
    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. }
  • 194.
    Classe WebDriverWait Classeresponsável por esperar que um determinado evento aconteça. WebDriverWait(driver, timeout) – Construtor baseado no driver e no tempo limite para que uma condição aconteça. WebDriverWait(driver, timeout, sleep) – Construtor baseado no driver e no tempo limite para que uma condição aconteça. Além disso, é possível configurar de quanto em quanto tempo o processo se repetirá. O tempo default é de 500ms. until(condition) – Aguarda até que uma condição aconteça
  • 195.
    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. }
  • 196.
    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. }
  • 197.
    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. }
  • 198.
    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. }
  • 199.
    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. }
  • 200.
    Classe ExpectedCondition Condiçãoaguardada. Não deve retornar null ou false. apply() – Verifica se existe um alerta presente
  • 201.
    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. }
  • 203.
    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. }
  • 204.
    Classe ExpectedConditions Condiçõesmais 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
  • 205.
    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. }
  • 206.
    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. }
  • 207.
    Classe FluentWait FluentWait(driver)– Construtor baseado no driver. withTimeout(timeout) – Configura quanto tempo o driver deve aguardar. withMessage(msg) – Configura uma mensagem caso o elemento não seja encontrado. poolingEvery(duration) – Configura o intervalo de verificação da condição. ignoring(exception) – Ignora uma determinada exceção. until() – Construtor baseado no driver.
  • 208.
  • 209.
    Classe Actions Permiterealizar ações como arrastar e soltar elementos. clickAndHold(element) – Clica e segura um elemento. moveTo(element) – Move o elemento para outro elemento. pause(timeout) – Aguarda por um tempo determinado em milisegundos. release() – Solta o elemento. dragAndDrop(source, target) – Clica e segura um elemento, movendo-o para outro elemento. (Similar a utilizar os métodos clickAndHold, moveTo e release, combinados) build() – Constrói a ação. perform() – Executa a ação.
  • 210.
    1. @Test 2.public void dragAndDrop() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. }
  • 211.
    1. @Test 2.public void dragAndDrop() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 7. }
  • 212.
    1. @Test 2.public void dragAndDrop() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 8. }
  • 213.
    1. @Test 2.public void dragAndDrop() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 8. Actions action = new Actions(driver); 9. }
  • 214.
    1. @Test 2.public void dragAndDrop() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 8. Actions action = new Actions(driver); 9. action.clickAndHold(elemento1) 10. }
  • 215.
    1. @Test 2.public void dragAndDrop() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 8. Actions action = new Actions(driver); 9. action.clickAndHold(elemento1) 10. .moveTo(elemento2) 11. }
  • 216.
    1. @Test 2.public void dragAndDrop() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 8. Actions action = new Actions(driver); 9. action.clickAndHold(elemento1) 10. .moveTo(elemento2) 11. .release(); 12. }
  • 217.
    1. @Test 2.public void dragAndDrop() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 8. Actions action = new Actions(driver); 9. action.clickAndHold(elemento1) 10. .moveTo(elemento2) 11. .release(); 12. .build(); 13. }
  • 218.
    1. @Test 2.public void dragAndDrop() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 8. Actions action = new Actions(driver); 9. action.clickAndHold(elemento1) 10. .moveTo(elemento2) 11. .release(); 12. .build(); 13. action.perform(); 14. }
  • 219.
    1. @Test 2.public void dragAndDrop() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 8. Actions action = new Actions(driver); 9. action.clickAndHold(elemento1) 10. .moveTo(elemento2) 11. .release(); 12. .build(); 13. action.perform(); 14. }
  • 220.
    1. @Test 2.public void dragAndDrop() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 8. Actions action = new Actions(driver); 9. .build(); 10. action.perform(); 11. }
  • 221.
    1. @Test 2.public void dragAndDrop() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 8. Actions action = new Actions(driver); 9. action.dragAndDrop(elemento1, elemento2) 10. .build(); 11. action.perform(); 12. }
  • 222.
    1. @Test 2.public void dragAndDrop() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. driver.get(pagina); 6. WebElement elemento1 = driver.findElement(By.id(“elemento1”)); 7. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 8. Actions action = new Actions(driver); 9. action.dragAndDrop(elemento1, elemento2) 10. .build(); 11. action.perform(); 12. }
  • 223.
  • 224.
    Com o tempo,os testes procedurais viram uma bagunça
  • 225.
    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>
  • 226.
    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. }
  • 227.
    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.
  • 228.
    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>
  • 229.
    Modelando as característicasda página no PageObject
  • 230.
    Annotation FindBy Anotaçãoresponsá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.
  • 231.
    1. public classFormularioPage { 2. }
  • 232.
    1. public classFormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. }
  • 233.
    1. public classFormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. @FindBy(name=“nome”) 5. private WebElement campoNome; 6. }
  • 234.
    1. public classFormularioPage { 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. }
  • 235.
    1. public classFormularioPage { 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. }
  • 236.
    1. public classFormularioPage { 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. }
  • 237.
    Modelando o comportamentoda página no PageObject
  • 238.
    1. public classFormularioPage { 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. }
  • 239.
    1. public classFormularioPage { 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. }
  • 240.
    1. public classFormularioPage { 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. }
  • 241.
    1. public classFormularioPage { 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. }
  • 242.
    1. public classFormularioPage { 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. }
  • 243.
    1. public classFormularioPage { 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. }
  • 244.
    1. public classFormularioPage { 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. }
  • 245.
    1. public classFormularioPage { 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. }
  • 246.
    1. public classFormularioPage { 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. }
  • 247.
    Classe PageFactory Classeresponsá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
  • 248.
    Criando o testede aceitação automatizado
  • 249.
    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. }
  • 250.
    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. }
  • 251.
    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. }
  • 252.
    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. }
  • 253.
    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. }
  • 254.
    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. }
  • 255.
    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. }
  • 256.
    Como testar emdiferentes versões de browser e de sistema operacional?
  • 257.
  • 258.
    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.
  • 259.
  • 260.
    Selenium Server Processode Instalação
  • 261.
    Selenium Server Processode Instalação http://code.google.com/p/selenium/downloads/list
  • 262.
    Selenium Server Processode Instalação http://code.google.com/p/selenium/downloads/list Fazer o download do arquivo selenium-server-standalone- 2.31.0.jar
  • 263.
    Selenium Server Processode 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
  • 265.
    1. @Test 2.public void umTesteDeAceitacaoQualquer() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. }
  • 266.
    1. @Test 2.public void umTesteDeAceitacaoQualquer() { 3. }
  • 267.
    1. @Test 2.public void umTesteDeAceitacaoQualquer() { 3. WebDriver driver = new RemoteWebDriver(url, browser); 4. }
  • 268.
    1. @Test 2.public void umTesteDeAceitacaoQualquer() { 3. 4. WebDriver driver = new RemoteWebDriver(url, browser); 5. }
  • 269.
    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. }
  • 270.
    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. }
  • 271.
    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. }
  • 272.
    Os testes doSelenium demoram muito, como melhorar a performance?
  • 273.
  • 274.
    Selenium Grid éresponsável por paralelizar e coordenar a execução dos testes do Selenium em várias maquinas ao mesmo tempo.
  • 275.
  • 276.
    Selenium Grid Processode Instalação e Inicialização
  • 277.
    Selenium Grid Processode Instalação e Inicialização • Entrar em http://code.google.com/p/selenium/downloads/list
  • 278.
    Selenium Grid Processode 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
  • 279.
    Selenium Grid Processode 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
  • 280.
    Selenium Grid Processode 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
  • 281.
    Selenium Grid Processode 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
  • 282.
    Selenium Grid Processode 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
  • 284.
    Não é possívelexecutar vários nodes na mesma maquina sem configurar portas diferentes
  • 285.
    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)

Notas do Editor

  • #3 Qual é a sua obra?
  • #4 Desmotivado
  • #5 Desmotivado
  • #6 Desmotivado
  • #7 Qual é a sua obra?
  • #8 Qual é a sua obra?
  • #9 Qual é a sua obra?
  • #10 Desmotivado
  • #11 Desmotivado
  • #12 Desmotivado
  • #13 Qual é a sua obra?
  • #14 Desmotivado
  • #15 Desmotivado
  • #17  É o famoso faz uma coisa e estraga a outra.
  • #18  É o famoso faz uma coisa e estraga a outra.
  • #19  É o famoso faz uma coisa e estraga a outra.
  • #24 Refactoring é considerada apenas uma limpeza no código? A refatoração vai além disso. Ela é uma forma de limpar o código de maneira eficiente e controlada.
  • #28 Cansado de fazer uma coisa e estragar a outra...
  • #29 Metáfora da perda das chaves...
  • #30 Cansado de fazer uma coisa e estragar a outra...
  • #31 Cansado de fazer uma coisa e estragar a outra...
  • #32 Cansado de fazer uma coisa e estragar a outra...
  • #36 Cansado de fazer uma coisa e estragar a outra...
  • #37 Cansado de fazer uma coisa e estragar a outra...
  • #38 Escopo das dependências
  • #39 O resultado de tudo isso é o desperdício...
  • #40 Cansado de fazer uma coisa e estragar a outra...
  • #41 Cansado de fazer uma coisa e estragar a outra...
  • #42 Cansado de fazer uma coisa e estragar a outra...
  • #43 Mostrar um exemplo real...
  • #44 Cansado de fazer uma coisa e estragar a outra...
  • #45 Archetypes
  • #46 mvn archetype:generate
  • #51 Escopo das dependências
  • #52 Gestão de dependências
  • #58 Escopo das dependências
  • #59 Cansado de fazer uma coisa e estragar a outra...
  • #60 Escopo das dependências
  • #61 Cansado de fazer uma coisa e estragar a outra...
  • #62 Escopo das dependências
  • #64 Cansado de fazer uma coisa e estragar a outra...
  • #65 Cansado de fazer uma coisa e estragar a outra...
  • #66 Escopo das dependências
  • #67 Escopo das dependências
  • #71 Escopo das dependências
  • #75 Escopo das dependências
  • #76 Escopo das dependências
  • #79 Cansado de fazer uma coisa e estragar a outra...
  • #80 Escopo das dependências
  • #81 Escopo das dependências
  • #82 Escopo das dependências
  • #83 Escopo das dependências
  • #88 Escopo das dependências
  • #91 Escopo das dependências
  • #94 Escopo das dependências
  • #99 Escopo das dependências
  • #104 Escopo das dependências
  • #107 Escopo das dependências
  • #108 Escopo das dependências
  • #120 Escopo das dependências
  • #121 Escopo das dependências
  • #122 Escopo das dependências
  • #123 Escopo das dependências
  • #126 Escopo das dependências
  • #133 Escopo das dependências
  • #134 2hs
  • #135 Escopo das dependências
  • #136 Escopo das dependências
  • #140 Escopo das dependências
  • #145 Escopo das dependências
  • #148 Cansado de fazer uma coisa e estragar a outra...
  • #149 Escopo das dependências
  • #151 Cansado de fazer uma coisa e estragar a outra...
  • #159 Escopo das dependências
  • #162 Cansado de fazer uma coisa e estragar a outra...
  • #165 Cansado de fazer uma coisa e estragar a outra...
  • #168 Cansado de fazer uma coisa e estragar a outra...
  • #169 Escopo das dependências
  • #176 Cansado de fazer uma coisa e estragar a outra...
  • #177 Escopo das dependências
  • #182 Escopo das dependências
  • #187 Cansado de fazer uma coisa e estragar a outra...
  • #188 Escopo das dependências
  • #194 Cansado de fazer uma coisa e estragar a outra...
  • #195 Escopo das dependências
  • #201 Escopo das dependências
  • #203 Cansado de fazer uma coisa e estragar a outra...
  • #205 Escopo das dependências
  • #208 Escopo das dependências
  • #209 Cansado de fazer uma coisa e estragar a outra...
  • #210 Escopo das dependências
  • #224 Cansado de fazer uma coisa e estragar a outra...
  • #225 Cansado de fazer uma coisa e estragar a outra...
  • #228 Escopo das dependências
  • #230 Cansado de fazer uma coisa e estragar a outra...
  • #231 Escopo das dependências
  • #238 Cansado de fazer uma coisa e estragar a outra...
  • #248 Escopo das dependências
  • #249 Cansado de fazer uma coisa e estragar a outra...
  • #257 Cansado de fazer uma coisa e estragar a outra...
  • #258 Cansado de fazer uma coisa e estragar a outra...
  • #259 Escopo das dependências
  • #260 Cansado de fazer uma coisa e estragar a outra...
  • #261 Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • #262 Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • #263 Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • #264 Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • #265 Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • #273 Cansado de fazer uma coisa e estragar a outra...
  • #274 Cansado de fazer uma coisa e estragar a outra...
  • #275 Escopo das dependências
  • #276 Cansado de fazer uma coisa e estragar a outra...
  • #277 Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • #278 Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • #279 Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • #280 Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • #281 Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • #282 Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • #283 Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • #284 Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • #285 Cansado de fazer uma coisa e estragar a outra...
  • #286 Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história