SlideShare a Scribd company logo
1 of 285
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
Selenium - WebDriver
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
Selenium - WebDriver
Selenium - WebDriver
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
Selenium - WebDriver
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 - WebDriver
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.
Selenium - WebDriver
Selenium - WebDriver
Qual é a origem do nome 
Selenium?
Selênio combate o 
envenenamento por mercúrio
Selenium - WebDriver
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. }
Selenium - WebDriver
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. }
Selenium - WebDriver
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. }
Selenium - WebDriver
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
Selenium - WebDriver
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
Selenium - WebDriver
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)

More Related Content

What's hot

Python - Dicionários
Python - DicionáriosPython - Dicionários
Python - DicionáriosMarcos Castro
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Desenvolvimento Web : HTML5, CSS3 & JavaScript
Desenvolvimento Web : HTML5, CSS3 & JavaScriptDesenvolvimento Web : HTML5, CSS3 & JavaScript
Desenvolvimento Web : HTML5, CSS3 & JavaScriptFábio Flatschart
 
Ch09 -Managing State and Information Security
Ch09 -Managing State and Information SecurityCh09 -Managing State and Information Security
Ch09 -Managing State and Information Securitydcomfort6819
 
Automação de Teste para iOS e Android com Appium
Automação de Teste para iOS e Android com AppiumAutomação de Teste para iOS e Android com Appium
Automação de Teste para iOS e Android com AppiumElias Nogueira
 
BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...
BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...
BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...minastestingconference
 
A Brief Introduction to React.js
A Brief Introduction to React.jsA Brief Introduction to React.js
A Brief Introduction to React.jsDoug Neiner
 
Algoritmos e lógica de programação com Python
Algoritmos e lógica de programação com PythonAlgoritmos e lógica de programação com Python
Algoritmos e lógica de programação com PythonBruno Luvizotto Carli
 
Mindset de QA em Diferentes Contextos
Mindset de QA em Diferentes ContextosMindset de QA em Diferentes Contextos
Mindset de QA em Diferentes ContextosJúlio de Lima
 
Spring uygulamaların exception handling yönetimi
Spring uygulamaların exception handling yönetimiSpring uygulamaların exception handling yönetimi
Spring uygulamaların exception handling yönetimiSistek Yazılım
 
Jenkins to Gitlab - Intelligent Build-Pipelines
Jenkins to Gitlab - Intelligent Build-PipelinesJenkins to Gitlab - Intelligent Build-Pipelines
Jenkins to Gitlab - Intelligent Build-PipelinesChristian Münch
 
Curso Treinamento Automação de testes com Selenium Qualister
Curso Treinamento Automação de testes com Selenium QualisterCurso Treinamento Automação de testes com Selenium Qualister
Curso Treinamento Automação de testes com Selenium QualisterQualister
 
Algoritmos - Aula 03 - Necessidade Do Uso da Logica
Algoritmos - Aula 03 - Necessidade Do Uso da LogicaAlgoritmos - Aula 03 - Necessidade Do Uso da Logica
Algoritmos - Aula 03 - Necessidade Do Uso da LogicaRodrigo Kiyoshi Saito
 
Catálogo Metax - Elevador de Cremalheira
Catálogo Metax - Elevador de CremalheiraCatálogo Metax - Elevador de Cremalheira
Catálogo Metax - Elevador de Cremalheirametaxbr
 
Usando containers com auto-escala de testes
Usando containers com auto-escala de testesUsando containers com auto-escala de testes
Usando containers com auto-escala de testesElias Nogueira
 
Robot Framework Dos And Don'ts
Robot Framework Dos And Don'tsRobot Framework Dos And Don'ts
Robot Framework Dos And Don'tsPekka Klärck
 
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - KanbanMetodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - KanbanMatheus Costa
 

What's hot (20)

Python - Dicionários
Python - DicionáriosPython - Dicionários
Python - Dicionários
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Desenvolvimento Web : HTML5, CSS3 & JavaScript
Desenvolvimento Web : HTML5, CSS3 & JavaScriptDesenvolvimento Web : HTML5, CSS3 & JavaScript
Desenvolvimento Web : HTML5, CSS3 & JavaScript
 
Interfaces e polimorfismo
Interfaces e polimorfismoInterfaces e polimorfismo
Interfaces e polimorfismo
 
Ch09 -Managing State and Information Security
Ch09 -Managing State and Information SecurityCh09 -Managing State and Information Security
Ch09 -Managing State and Information Security
 
Regulamento volei
Regulamento voleiRegulamento volei
Regulamento volei
 
Automação de Teste para iOS e Android com Appium
Automação de Teste para iOS e Android com AppiumAutomação de Teste para iOS e Android com Appium
Automação de Teste para iOS e Android com Appium
 
BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...
BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...
BDD on Mobile: Utilizando Cucumber e Appium para executar testes automatizado...
 
A Brief Introduction to React.js
A Brief Introduction to React.jsA Brief Introduction to React.js
A Brief Introduction to React.js
 
Algoritmos e lógica de programação com Python
Algoritmos e lógica de programação com PythonAlgoritmos e lógica de programação com Python
Algoritmos e lógica de programação com Python
 
Mindset de QA em Diferentes Contextos
Mindset de QA em Diferentes ContextosMindset de QA em Diferentes Contextos
Mindset de QA em Diferentes Contextos
 
Spring uygulamaların exception handling yönetimi
Spring uygulamaların exception handling yönetimiSpring uygulamaların exception handling yönetimi
Spring uygulamaların exception handling yönetimi
 
MANUAL RTG
MANUAL RTG MANUAL RTG
MANUAL RTG
 
Jenkins to Gitlab - Intelligent Build-Pipelines
Jenkins to Gitlab - Intelligent Build-PipelinesJenkins to Gitlab - Intelligent Build-Pipelines
Jenkins to Gitlab - Intelligent Build-Pipelines
 
Curso Treinamento Automação de testes com Selenium Qualister
Curso Treinamento Automação de testes com Selenium QualisterCurso Treinamento Automação de testes com Selenium Qualister
Curso Treinamento Automação de testes com Selenium Qualister
 
Algoritmos - Aula 03 - Necessidade Do Uso da Logica
Algoritmos - Aula 03 - Necessidade Do Uso da LogicaAlgoritmos - Aula 03 - Necessidade Do Uso da Logica
Algoritmos - Aula 03 - Necessidade Do Uso da Logica
 
Catálogo Metax - Elevador de Cremalheira
Catálogo Metax - Elevador de CremalheiraCatálogo Metax - Elevador de Cremalheira
Catálogo Metax - Elevador de Cremalheira
 
Usando containers com auto-escala de testes
Usando containers com auto-escala de testesUsando containers com auto-escala de testes
Usando containers com auto-escala de testes
 
Robot Framework Dos And Don'ts
Robot Framework Dos And Don'tsRobot Framework Dos And Don'ts
Robot Framework Dos And Don'ts
 
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - KanbanMetodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
 

Viewers also liked

Técnicas de Refactoring
Técnicas de RefactoringTécnicas de Refactoring
Técnicas de RefactoringRodrigo Branas
 
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasNode.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasRodrigo Branas
 
Test-Driven Development com JavaScript, Jasmine Karma
Test-Driven Development com JavaScript, Jasmine  KarmaTest-Driven Development com JavaScript, Jasmine  Karma
Test-Driven Development com JavaScript, Jasmine KarmaRodrigo Branas
 
A evolução do AngularJS
A evolução do AngularJSA evolução do AngularJS
A evolução do AngularJSRodrigo Branas
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasRodrigo Branas
 
Construindo Diretivas com AngularJS
Construindo Diretivas com AngularJSConstruindo Diretivas com AngularJS
Construindo Diretivas com AngularJSRodrigo Branas
 
Porque eu deveria utilizar Agile
Porque eu deveria utilizar AgilePorque eu deveria utilizar Agile
Porque eu deveria utilizar AgileRodrigo Branas
 
Selenium
SeleniumSelenium
Seleniumfatec
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasRodrigo Branas
 
Node.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasNode.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasRodrigo Branas
 
Aplicando filtros com AngularJS
Aplicando filtros com AngularJSAplicando filtros com AngularJS
Aplicando filtros com AngularJSRodrigo Branas
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme ProgrammingRodrigo Branas
 
Criando Filtros com AngularJS
Criando Filtros com AngularJSCriando Filtros com AngularJS
Criando Filtros com AngularJSRodrigo Branas
 

Viewers also liked (20)

Técnicas de Refactoring
Técnicas de RefactoringTécnicas de Refactoring
Técnicas de Refactoring
 
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasNode.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
 
Test-Driven Development com JavaScript, Jasmine Karma
Test-Driven Development com JavaScript, Jasmine  KarmaTest-Driven Development com JavaScript, Jasmine  Karma
Test-Driven Development com JavaScript, Jasmine Karma
 
#2 - Git - DAG
#2 - Git - DAG#2 - Git - DAG
#2 - Git - DAG
 
Scope AngularJS
Scope AngularJSScope AngularJS
Scope AngularJS
 
A evolução do AngularJS
A evolução do AngularJSA evolução do AngularJS
A evolução do AngularJS
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
 
Construindo Diretivas com AngularJS
Construindo Diretivas com AngularJSConstruindo Diretivas com AngularJS
Construindo Diretivas com AngularJS
 
Impacto web,
Impacto web,Impacto web,
Impacto web,
 
Porque eu deveria utilizar Agile
Porque eu deveria utilizar AgilePorque eu deveria utilizar Agile
Porque eu deveria utilizar Agile
 
Selenium
SeleniumSelenium
Selenium
 
Testes Automatizados
Testes AutomatizadosTestes Automatizados
Testes Automatizados
 
BDD & Cucumber
BDD & CucumberBDD & Cucumber
BDD & Cucumber
 
Clean Code
Clean CodeClean Code
Clean Code
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo Branas
 
Node.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasNode.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo Branas
 
Aplicando filtros com AngularJS
Aplicando filtros com AngularJSAplicando filtros com AngularJS
Aplicando filtros com AngularJS
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
JavaScript - Date
JavaScript - DateJavaScript - Date
JavaScript - Date
 
Criando Filtros com AngularJS
Criando Filtros com AngularJSCriando Filtros com AngularJS
Criando Filtros com AngularJS
 

Similar to Selenium - WebDriver

Introdução À Automação de Testes com Selenium
Introdução À Automação de Testes com SeleniumIntrodução À Automação de Testes com Selenium
Introdução À Automação de Testes com Seleniumrodrigogouveia
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Daniel Makiyama
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilElias Nogueira
 
JSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaJSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaDr. Spock
 
Introdução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumIntrodução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumSandy Maciel
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaCleber Dantas
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Sergio Lima
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e djangoIgor Sobreira
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks phpIgor Moura
 
Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end seleniumQualister
 
Introdução ao framework CodeIgniter
Introdução ao framework CodeIgniterIntrodução ao framework CodeIgniter
Introdução ao framework CodeIgniterAnderson Gonçalves
 
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...Rafael Chiavegatto
 
Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2 Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2 Loiane Groner
 

Similar to Selenium - WebDriver (20)

Introdução À Automação de Testes com Selenium
Introdução À Automação de Testes com SeleniumIntrodução À Automação de Testes com Selenium
Introdução À Automação de Testes com Selenium
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 
cypress.pdf
cypress.pdfcypress.pdf
cypress.pdf
 
Django Módulo Básico Parte II
Django Módulo Básico Parte IIDjango Módulo Básico Parte II
Django Módulo Básico Parte II
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira Ágil
 
JSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaJSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com Java
 
Search Plugins para Firefox
Search Plugins para FirefoxSearch Plugins para Firefox
Search Plugins para Firefox
 
Introdução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumIntrodução a testes de software utilizando selenium
Introdução a testes de software utilizando selenium
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direito
 
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks php
 
TDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - FloripaTDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - Floripa
 
Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end selenium
 
Introdução ao framework CodeIgniter
Introdução ao framework CodeIgniterIntrodução ao framework CodeIgniter
Introdução ao framework CodeIgniter
 
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
 
Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2 Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2
 

More from Rodrigo Branas

Node.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasNode.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasRodrigo Branas
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasRodrigo Branas
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasRodrigo Branas
 
#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisasRodrigo Branas
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - IntroduçãoRodrigo Branas
 
#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remoto#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remotoRodrigo Branas
 
#3 - Git - Branching e Merging
#3 - Git - Branching e Merging#3 - Git - Branching e Merging
#3 - Git - Branching e MergingRodrigo Branas
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões RegularesRodrigo Branas
 
Automação de Testes com AngularJS
Automação de Testes com AngularJSAutomação de Testes com AngularJS
Automação de Testes com AngularJSRodrigo Branas
 
HTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSHTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSRodrigo Branas
 
Criando serviços com AngularJS
Criando serviços com AngularJSCriando serviços com AngularJS
Criando serviços com AngularJSRodrigo Branas
 
Criando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJSCriando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJSRodrigo Branas
 
Introdução ao AngularJS
Introdução ao AngularJSIntrodução ao AngularJS
Introdução ao AngularJSRodrigo Branas
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptRodrigo Branas
 

More from Rodrigo Branas (18)

Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Node.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasNode.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo Branas
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo Branas
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo Branas
 
#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - Introdução
 
#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remoto#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remoto
 
#4 - Git - Stash
#4 - Git - Stash#4 - Git - Stash
#4 - Git - Stash
 
#3 - Git - Branching e Merging
#3 - Git - Branching e Merging#3 - Git - Branching e Merging
#3 - Git - Branching e Merging
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões Regulares
 
Automação de Testes com AngularJS
Automação de Testes com AngularJSAutomação de Testes com AngularJS
Automação de Testes com AngularJS
 
HTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSHTTP Interceptors com AngularJS
HTTP Interceptors com AngularJS
 
Criando serviços com AngularJS
Criando serviços com AngularJSCriando serviços com AngularJS
Criando serviços com AngularJS
 
Criando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJSCriando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJS
 
Grunt
GruntGrunt
Grunt
 
Bower
BowerBower
Bower
 
Introdução ao AngularJS
Introdução ao AngularJSIntrodução ao AngularJS
Introdução ao AngularJS
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 

Selenium - WebDriver

  • 1. Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br Automatizando testes de aceitação com Selenium WebDriver
  • 2. “Tornar desenvolvedores de software mais motivados e produtivos” http://www.agilecode.com.br
  • 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 de desenvolvimento 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 é o problema em não ter de testes automatizados?
  • 17. Trabalho braçal para testar várias vezes a mesma coisa
  • 18. Trabalhar em um castelo de cartas
  • 19. Você tem medo do projeto em que trabalha?
  • 20. Onde entra o Agile nisso tudo?
  • 21. Velocidade é a ausência de desperdício – Amyr Klink
  • 22. Se você trabalha para eliminar o desperdício, aumentará gradativamente a porcentagem de tempo que gasta adicionando valor ao produto!
  • 23. Que tipos de testes podem ser automatizados?
  • 24. Unitário – Explora o funcionamento de algoritmos de forma isolada
  • 25. Integrado – Testa a interação entre diferentes camadas do software
  • 26. Aceitação – Garante que o software funciona por completo e que está pronto para ser utilizado pelos usuários
  • 27. A automação dos testes deve ser vista como um investimento
  • 29. Com o passar do tempo, o acúmulo de defeitos vira uma bola de neve...
  • 30. Por que não automatizamos os testes?
  • 32. Temos tempo para corrigir bugs?
  • 33. Temos tempo para entender código de baixa qualidade?
  • 34. Temos tempo para testar várias vezes a mesma coisa?
  • 35. O código é legado e é muito difícil de testar
  • 37. 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.
  • 40. Qual é a origem do nome Selenium?
  • 41. Selênio combate o envenenamento por mercúrio
  • 44. Vamos criar um projeto baseado em um Archetype do Maven
  • 46. Maven Criando seu primeiro projeto Selenium
  • 47. Maven Criando seu primeiro projeto Selenium mvn archetype:generate
  • 48. Maven Criando seu primeiro projeto Selenium mvn archetype:generate Escolhar um tipo de projeto padrão
  • 49. 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
  • 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>
  • 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.
  • 61. 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.
  • 62. 1. @Test 2. public void testarPaginaComFirefox() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. // continuação do teste... 5. }
  • 65. Entrando em uma página
  • 66. 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
  • 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ítulo da 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çã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
  • 75. Não se esqueça de 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 os elementos de uma página
  • 79. 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
  • 80. Como podemos fazer para localizar um elemento dentro de uma página?
  • 81. 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”)
  • 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. }
  • 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. O identificador deve ser único
  • 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ível utilizar 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 (ou CSS 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 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".
  • 120. Ainda não conseguiu localizar o elemento?
  • 121. XPath
  • 122. 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.
  • 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 para localizar 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. Interagindo com o elemento
  • 134. 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
  • 135. Verificando o texto de 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. Clicando em um link
  • 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 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
  • 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. }
  • 148. 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
  • 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>
  • 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. }
  • 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. }
  • 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. }
  • 168. 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
  • 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. }
  • 176. Classe TargetLocator A classe 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 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
  • 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. }
  • 187. 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.
  • 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 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
  • 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ção aguardada. 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çõ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
  • 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.
  • 209. 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.
  • 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. }
  • 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ísticas da página no PageObject
  • 230. 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.
  • 231. 1. public class FormularioPage { 2. }
  • 232. 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. }
  • 233. 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. @FindBy(name=“nome”) 5. private WebElement campoNome; 6. }
  • 234. 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. }
  • 235. 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. }
  • 236. 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. }
  • 237. Modelando o comportamento da página no PageObject
  • 238. 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. }
  • 239. 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. }
  • 240. 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. }
  • 241. 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. }
  • 242. 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. }
  • 243. 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. }
  • 244. 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. }
  • 245. 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. }
  • 246. 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. }
  • 247. 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
  • 248. Criando o teste de 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 em diferentes versões de browser e de sistema operacional?
  • 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.
  • 260. Selenium Server Processo de Instalação
  • 261. Selenium Server Processo de Instalação http://code.google.com/p/selenium/downloads/list
  • 262. 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
  • 263. 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
  • 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 do Selenium demoram muito, como melhorar a performance?
  • 274. Selenium Grid é responsável por paralelizar e coordenar a execução dos testes do Selenium em várias maquinas ao mesmo tempo.
  • 276. Selenium Grid Processo de Instalação e Inicialização
  • 277. Selenium Grid Processo de Instalação e Inicialização • Entrar em http://code.google.com/p/selenium/downloads/list
  • 278. 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
  • 279. 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
  • 280. 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
  • 281. 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
  • 282. 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
  • 284. Não é possível executar 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)

Editor's Notes

  1. Qual é a sua obra?
  2. Desmotivado
  3. Desmotivado
  4. Desmotivado
  5. Qual é a sua obra?
  6. Qual é a sua obra?
  7. Qual é a sua obra?
  8. Desmotivado
  9. Desmotivado
  10. Desmotivado
  11. Qual é a sua obra?
  12. Desmotivado
  13. Desmotivado
  14. É o famoso faz uma coisa e estraga a outra.
  15. É o famoso faz uma coisa e estraga a outra.
  16. É o famoso faz uma coisa e estraga a outra.
  17. 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.
  18. Cansado de fazer uma coisa e estragar a outra...
  19. Metáfora da perda das chaves...
  20. Cansado de fazer uma coisa e estragar a outra...
  21. Cansado de fazer uma coisa e estragar a outra...
  22. Cansado de fazer uma coisa e estragar a outra...
  23. Cansado de fazer uma coisa e estragar a outra...
  24. Cansado de fazer uma coisa e estragar a outra...
  25. Escopo das dependências
  26. O resultado de tudo isso é o desperdício...
  27. Cansado de fazer uma coisa e estragar a outra...
  28. Cansado de fazer uma coisa e estragar a outra...
  29. Cansado de fazer uma coisa e estragar a outra...
  30. Mostrar um exemplo real...
  31. Cansado de fazer uma coisa e estragar a outra...
  32. Archetypes
  33. mvn archetype:generate
  34. Escopo das dependências
  35. Gestão de dependências
  36. Escopo das dependências
  37. Cansado de fazer uma coisa e estragar a outra...
  38. Escopo das dependências
  39. Cansado de fazer uma coisa e estragar a outra...
  40. Escopo das dependências
  41. Cansado de fazer uma coisa e estragar a outra...
  42. Cansado de fazer uma coisa e estragar a outra...
  43. Escopo das dependências
  44. Escopo das dependências
  45. Escopo das dependências
  46. Escopo das dependências
  47. Escopo das dependências
  48. Cansado de fazer uma coisa e estragar a outra...
  49. Escopo das dependências
  50. Escopo das dependências
  51. Escopo das dependências
  52. Escopo das dependências
  53. Escopo das dependências
  54. Escopo das dependências
  55. Escopo das dependências
  56. Escopo das dependências
  57. Escopo das dependências
  58. Escopo das dependências
  59. Escopo das dependências
  60. Escopo das dependências
  61. Escopo das dependências
  62. Escopo das dependências
  63. Escopo das dependências
  64. Escopo das dependências
  65. Escopo das dependências
  66. 2hs
  67. Escopo das dependências
  68. Escopo das dependências
  69. Escopo das dependências
  70. Escopo das dependências
  71. Cansado de fazer uma coisa e estragar a outra...
  72. Escopo das dependências
  73. Cansado de fazer uma coisa e estragar a outra...
  74. Escopo das dependências
  75. Cansado de fazer uma coisa e estragar a outra...
  76. Cansado de fazer uma coisa e estragar a outra...
  77. Cansado de fazer uma coisa e estragar a outra...
  78. 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. Cansado de fazer uma coisa e estragar a outra...
  83. Escopo das dependências
  84. Cansado de fazer uma coisa e estragar a outra...
  85. Escopo das dependências
  86. Escopo das dependências
  87. Cansado de fazer uma coisa e estragar a outra...
  88. Escopo das dependências
  89. Escopo das dependências
  90. Cansado de fazer uma coisa e estragar a outra...
  91. Escopo das dependências
  92. Cansado de fazer uma coisa e estragar a outra...
  93. Cansado de fazer uma coisa e estragar a outra...
  94. Escopo das dependências
  95. Cansado de fazer uma coisa e estragar a outra...
  96. Escopo das dependências
  97. Cansado de fazer uma coisa e estragar a outra...
  98. Escopo das dependências
  99. Cansado de fazer uma coisa e estragar a outra...
  100. Cansado de fazer uma coisa e estragar a outra...
  101. Cansado de fazer uma coisa e estragar a outra...
  102. Escopo das dependências
  103. Cansado de fazer uma coisa e estragar a outra...
  104. Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  105. Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  106. Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  107. Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  108. Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  109. Cansado de fazer uma coisa e estragar a outra...
  110. Cansado de fazer uma coisa e estragar a outra...
  111. Escopo das dependências
  112. Cansado de fazer uma coisa e estragar a outra...
  113. Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  114. Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  115. Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  116. Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  117. Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  118. Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  119. Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  120. Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  121. Cansado de fazer uma coisa e estragar a outra...
  122. Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história