Selenium - WebDriver

7,054 views

Published on

Aprenda a utilizar o Selenium WebDriver para testar sistemas web

Published in: Technology
3 Comments
27 Likes
Statistics
Notes
No Downloads
Views
Total views
7,054
On SlideShare
0
From Embeds
0
Number of Embeds
60
Actions
Shares
0
Downloads
0
Comments
3
Likes
27
Embeds 0
No embeds

No notes for slide
  • Qual é a sua obra?
  • Desmotivado
  • Desmotivado
  • Desmotivado
  • Qual é a sua obra?
  • Qual é a sua obra?
  • Qual é a sua obra?
  • Desmotivado
  • Desmotivado
  • Desmotivado
  • Qual é a sua obra?
  • Desmotivado
  • Desmotivado
  • É o famoso faz uma coisa e estraga a outra.
  • É o famoso faz uma coisa e estraga a outra.
  • É o famoso faz uma coisa e estraga a outra.
  • 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.
  • Cansado de fazer uma coisa e estragar a outra...
  • Metáfora da perda das chaves...
  • Cansado de fazer uma coisa e estragar a outra...
  • Cansado de fazer uma coisa e estragar a outra...
  • Cansado de fazer uma coisa e estragar a outra...
  • Cansado de fazer uma coisa e estragar a outra...
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • O resultado de tudo isso é o desperdício...
  • Cansado de fazer uma coisa e estragar a outra...
  • Cansado de fazer uma coisa e estragar a outra...
  • Cansado de fazer uma coisa e estragar a outra...
  • Mostrar um exemplo real...
  • Cansado de fazer uma coisa e estragar a outra...
  • Archetypes
  • mvn archetype:generate
  • Escopo das dependências
  • Gestão de dependências
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • 2hs
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Cansado de fazer uma coisa e estragar a outra...
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Cansado de fazer uma coisa e estragar a outra...
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • Cansado de fazer uma coisa e estragar a outra...
  • Cansado de fazer uma coisa e estragar a outra...
  • Escopo das dependências
  • Cansado de fazer uma coisa e estragar a outra...
  • Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • Cansado de fazer uma coisa e estragar a outra...
  • Surgimento da tabela ASCII em 1963. Falar um pouco sobre a história
  • Selenium - WebDriver

    1. 1. Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br Automatizando testes de aceitação com Selenium WebDriver
    2. 2. “Tornar desenvolvedores de software mais motivados e produtivos” http://www.agilecode.com.br
    3. 3. Rodrigo Branas rodrigo.branas@agilecode.com.br http://www.agilecode.com.br
    4. 4. Rodrigo Branas rodrigo.branas@agilecode.com.br http://www.agilecode.com.br • Empreendedor, Comercial, Designer e Desenvolvedor na Kaptec e Gennera
    5. 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. 6. Transformar equipes de desenvolvimento de software! http://www.agilecode.com.br
    7. 7. Estatísticas +6 anos +100 palestras em eventos +10.000 pessoas já assistiram +50 turmas realizadas +1000 desenvolvedores treinados
    8. 8. 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
    9. 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 • Autor na PacktPub e Java Magazine
    10. 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
    11. 11. 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
    12. 12. Qual é o problema em não ter de testes automatizados?
    13. 13. Code and Pray
    14. 14. Trabalho braçal para testar várias vezes a mesma coisa
    15. 15. Trabalhar em um castelo de cartas
    16. 16. Você tem medo do projeto em que trabalha?
    17. 17. Onde entra o Agile nisso tudo?
    18. 18. Velocidade é a ausência de desperdício – Amyr Klink
    19. 19. Se você trabalha para eliminar o desperdício, aumentará gradativamente a porcentagem de tempo que gasta adicionando valor ao produto!
    20. 20. Que tipos de testes podem ser automatizados?
    21. 21. Unitário – Explora o funcionamento de algoritmos de forma isolada
    22. 22. Integrado – Testa a interação entre diferentes camadas do software
    23. 23. Aceitação – Garante que o software funciona por completo e que está pronto para ser utilizado pelos usuários
    24. 24. A automação dos testes deve ser vista como um investimento
    25. 25. Com o passar do tempo, o acúmulo de defeitos vira uma bola de neve...
    26. 26. Por que não automatizamos os testes?
    27. 27. Não temos tempo
    28. 28. Temos tempo para corrigir bugs?
    29. 29. Temos tempo para entender código de baixa qualidade?
    30. 30. Temos tempo para testar várias vezes a mesma coisa?
    31. 31. O código é legado e é muito difícil de testar
    32. 32. 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.
    33. 33. Qual é a origem do nome Selenium?
    34. 34. Selênio combate o envenenamento por mercúrio
    35. 35. Processo de instalação
    36. 36. Vamos criar um projeto baseado em um Archetype do Maven
    37. 37. mvn archetype:generate
    38. 38. Maven Criando seu primeiro projeto Selenium
    39. 39. Maven Criando seu primeiro projeto Selenium mvn archetype:generate
    40. 40. Maven Criando seu primeiro projeto Selenium mvn archetype:generate Escolhar um tipo de projeto padrão
    41. 41. 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
    42. 42. mvn eclipse:eclipse
    43. 43. Configurando as dependências para o projeto
    44. 44. 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>
    45. 45. 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>
    46. 46. 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>
    47. 47. 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>
    48. 48. 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>
    49. 49. mvn eclipse:eclipse
    50. 50. Conhecendo os drivers
    51. 51. 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.
    52. 52. Firefox Driver
    53. 53. 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.
    54. 54. 1. @Test 2. public void testarPaginaComFirefox() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. // continuação do teste... 5. }
    55. 55. Aprendendo a navegar...
    56. 56. Entrando em uma página
    57. 57. 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
    58. 58. 1. @Test 2. public void deveEntrarEmUmaPagina() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. }
    59. 59. 1. @Test 2. public void deveEntrarEmUmaPagina() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. String pagina = “http://www.agilecode.com.br/selenium”; 5. }
    60. 60. 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. }
    61. 61. Conferindo o título da página…
    62. 62. 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. }
    63. 63. 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. }
    64. 64. 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. }
    65. 65. 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
    66. 66. Não se esqueça de fechar o browser
    67. 67. 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. }
    68. 68. 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. }
    69. 69. Interagindo com os elementos de uma página
    70. 70. 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
    71. 71. Como podemos fazer para localizar um elemento dentro de uma página?
    72. 72. 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”)
    73. 73. Nome da Tag (ou Tag Name)
    74. 74. 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML>
    75. 75. 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML>
    76. 76. 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. }
    77. 77. 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. }
    78. 78. Identificador (ou Id)
    79. 79. 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <P id=“descricao”>Selenium Playland</P> 7. </BODY> 8. </HTML>
    80. 80. 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <P id=“descricao”>Selenium Playland</P> 7. </BODY> 8. </HTML>
    81. 81. O identificador deve ser único
    82. 82. 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. }
    83. 83. 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. }
    84. 84. Nome da Classe (ou Class Name)
    85. 85. 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>
    86. 86. 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>
    87. 87. 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. }
    88. 88. 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. }
    89. 89. Texto do Link (ou Link Text)
    90. 90. 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>
    91. 91. 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>
    92. 92. 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. }
    93. 93. 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. }
    94. 94. Também é possível utilizar o texto parcial do link (ou Partial Link Text)
    95. 95. 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. }
    96. 96. 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. }
    97. 97. Seletor CSS (ou CSS Selector)
    98. 98. 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.
    99. 99. 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <P id=“descricao”>Selenium Playland</P> 7. </BODY> 8. </HTML>
    100. 100. 1. <HTML> 2. <HEAD> 3. 4. </HEAD> 5. <BODY> 6. <P id=“descricao”>Selenium Playland</P> 7. </BODY> 8. </HTML>
    101. 101. 1. <HTML> 2. <HEAD> 3. <STYLE> 4. </STYLE> 5. </HEAD> 6. <BODY> 7. <P id=“descricao”>Selenium Playland</P> 8. </BODY> 9. </HTML>
    102. 102. 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>
    103. 103. 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>
    104. 104. 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. }
    105. 105. 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. }
    106. 106. 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>
    107. 107. 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>
    108. 108. 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>
    109. 109. 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. }
    110. 110. 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".
    111. 111. Ainda não conseguiu localizar o elemento?
    112. 112. XPath
    113. 113. 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.
    114. 114. 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML>
    115. 115. 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML> XPath:
    116. 116. Como fazer para localizar o H1?
    117. 117. 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML> XPath:
    118. 118. 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML> XPath: HTML
    119. 119. 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML> XPath: HTML/BODY
    120. 120. 1. <HTML> 2. <HEAD> 3. … 4. </HEAD> 5. <BODY> 6. <H1>Selenium Playland</H1> 7. </BODY> 8. </HTML> XPath: HTML/BODY/H1
    121. 121. 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. }
    122. 122. 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. }
    123. 123. 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.
    124. 124. Interagindo com o elemento
    125. 125. 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
    126. 126. Verificando o texto de um elemento
    127. 127. 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. }
    128. 128. 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. }
    129. 129. 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. }
    130. 130. Clicando em um link
    131. 131. 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. }
    132. 132. 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. }
    133. 133. 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. }
    134. 134. 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. }
    135. 135. 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
    136. 136. 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. }
    137. 137. 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. }
    138. 138. Manipulando formulários
    139. 139. 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
    140. 140. 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>
    141. 141. Localizando o formulário
    142. 142. 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>
    143. 143. 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. }
    144. 144. 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. }
    145. 145. 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>
    146. 146. 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. }
    147. 147. 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. }
    148. 148. 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. }
    149. 149. 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
    150. 150. 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. }
    151. 151. 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. }
    152. 152. Preenchendo os campos
    153. 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. 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. }
    154. 154. 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. }
    155. 155. Submetendo o formulário
    156. 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. 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. }
    157. 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. 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. }
    158. 158. Interagindo com outras janelas
    159. 159. 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
    160. 160. 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. }
    161. 161. 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. }
    162. 162. 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. }
    163. 163. 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. }
    164. 164. 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. }
    165. 165. 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. }
    166. 166. Tratando alertas
    167. 167. Classe TargetLocator A classe TargetLocator permite ainda tratar alertas. switchTo().alert() – Alterna o driver para o alerta
    168. 168. 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. }
    169. 169. 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. }
    170. 170. 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. }
    171. 171. 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. }
    172. 172. 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
    173. 173. 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. }
    174. 174. 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. }
    175. 175. 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. }
    176. 176. 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. }
    177. 177. Lidando com sincronização
    178. 178. 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.
    179. 179. 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. }
    180. 180. 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. }
    181. 181. 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. }
    182. 182. 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. }
    183. 183. 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. }
    184. 184. 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
    185. 185. 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. }
    186. 186. 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. }
    187. 187. 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. }
    188. 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. 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. }
    189. 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. 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. }
    190. 190. Classe ExpectedCondition Condição aguardada. Não deve retornar null ou false. apply() – Verifica se existe um alerta presente
    191. 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. 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. }
    192. 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. WebDriverWait wait = new WebDriverWait(driver, 10); 9. wait.until(); 10. }
    193. 193. 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
    194. 194. 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. }
    195. 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. WebDriverWait wait = new WebDriverWait(driver, 10); 9. wait.until(ExpectedConditions.textToBePresentInElement(By.id(“callback_chamada_ajax”), “AgileCode”)); 10. }
    196. 196. 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.
    197. 197. Drag and Drop
    198. 198. 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.
    199. 199. 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. }
    200. 200. 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. }
    201. 201. 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. }
    202. 202. 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. }
    203. 203. 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. }
    204. 204. 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. }
    205. 205. 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. }
    206. 206. 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. }
    207. 207. 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. }
    208. 208. 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. }
    209. 209. 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. }
    210. 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. 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. }
    211. 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. WebElement elemento2 = driver.findElement(By.id(“elemento2”)); 8. Actions action = new Actions(driver); 9. action.dragAndDrop(elemento1, elemento2) 10. .build(); 11. action.perform(); 12. }
    212. 212. Page Objects
    213. 213. Com o tempo, os testes procedurais viram uma bagunça
    214. 214. 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>
    215. 215. 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. }
    216. 216. 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.
    217. 217. 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>
    218. 218. Modelando as características da página no PageObject
    219. 219. 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.
    220. 220. 1. public class FormularioPage { 2. }
    221. 221. 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. }
    222. 222. 1. public class FormularioPage { 2. @FindBy(name=“form”) 3. private WebElement formulario; 4. @FindBy(name=“nome”) 5. private WebElement campoNome; 6. }
    223. 223. 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. }
    224. 224. 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. }
    225. 225. 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. }
    226. 226. Modelando o comportamento da página no PageObject
    227. 227. 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. }
    228. 228. 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. }
    229. 229. 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. }
    230. 230. 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. }
    231. 231. 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. }
    232. 232. 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. }
    233. 233. 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. }
    234. 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. 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. }
    235. 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. 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. }
    236. 236. 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
    237. 237. Criando o teste de aceitação automatizado
    238. 238. 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. }
    239. 239. 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. }
    240. 240. 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. }
    241. 241. 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. }
    242. 242. 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. }
    243. 243. 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. }
    244. 244. 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. }
    245. 245. Como testar em diferentes versões de browser e de sistema operacional?
    246. 246. Selenium Server
    247. 247. 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.
    248. 248. Processo de instalação
    249. 249. Selenium Server Processo de Instalação
    250. 250. Selenium Server Processo de Instalação http://code.google.com/p/selenium/downloads/list
    251. 251. 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
    252. 252. 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
    253. 253. 1. @Test 2. public void umTesteDeAceitacaoQualquer() { 3. FirefoxDriver driver = new FirefoxDriver(); 4. }
    254. 254. 1. @Test 2. public void umTesteDeAceitacaoQualquer() { 3. }
    255. 255. 1. @Test 2. public void umTesteDeAceitacaoQualquer() { 3. WebDriver driver = new RemoteWebDriver(url, browser); 4. }
    256. 256. 1. @Test 2. public void umTesteDeAceitacaoQualquer() { 3. 4. WebDriver driver = new RemoteWebDriver(url, browser); 5. }
    257. 257. 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. }
    258. 258. 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. }
    259. 259. 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. }
    260. 260. Os testes do Selenium demoram muito, como melhorar a performance?
    261. 261. Selenium Grid
    262. 262. Selenium Grid é responsável por paralelizar e coordenar a execução dos testes do Selenium em várias maquinas ao mesmo tempo.
    263. 263. Processo de instalação
    264. 264. Selenium Grid Processo de Instalação e Inicialização
    265. 265. Selenium Grid Processo de Instalação e Inicialização • Entrar em http://code.google.com/p/selenium/downloads/list
    266. 266. 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
    267. 267. 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
    268. 268. 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
    269. 269. 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
    270. 270. 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
    271. 271. Não é possível executar vários nodes na mesma maquina sem configurar portas diferentes
    272. 272. 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)

    ×