Selenium

Introdução ao Selenium

O que é Selenium

  • Selenium é uma suite de ferramentas open source que pode ser utilizado para criação de testes funcionais para aplicações web.

Motivação

  • Os testes de interface gráfica do software são
    • Demorados
    • Tediosos 
    • Possíveis de erro 

Origem

  • Criada em 2004 quando Jason Huggins testava um aplicativo na ThoughtWorks.
  • Algum tempo depois, Simon Stewart do Google iniciou um projeto chamado WebDriver
  • Ambos projetos se uniram, dando origem ao Selenium-WebDriver (Selenium 2.0)

Características

  • Permite a execução de testes em qualquer navegador com suporte a JavaScript.
  • Provê um rico conjunto de funções específicas para implementação dos testes.

Componentes

  • Selenium IDE
  • Selenium Remote Control (1.0)
  • Selenium WebDriver (2.0)
  • Selenium GRID

Selenium IDE

  • Plug-in do Firefox
  • Ferramenta do tipo record-and-playback
  • Não oferece suporte a testes com interação ou que devem ser executados com base em determinadas condições.
  • Permite exportar código para ser usado em conjunto com o WebDriver
  • Oferece suporte a plug-ins para extender sua funcionalidade

Tela do Selenium IDE

Selenium WebDriver

  • Uso de linguagem de programação
  • Maior flexibilidade nos testes
  • Integração com ferramentas de teste

Selenium WebDriver - Linguagens Suportadas

  • Pelo projeto
    • Java, C#, Ruby, Python, Javascript (Node)
  • Por terceiros
    • Perl, PHP, Objetive-C, Dart, TCL, Haskell

Selenium WebDriver - Navegadores Suportados

  • Firefox, Internet Explorer, Safari, Google Chrome, Opera, Windows Phone, Android, iOS, BlackBerry 10, HtmlUnitPhantomJS

Exemplo de uso do WebDriver

package br.edu.ifrn.tads.teste.selenium;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;

public class Exemplo {
    public static void main(String[] args) {
        WebDriver driver = new HtmlUnitDriver();
        driver.get("http://www.google.com");
        WebElement element = driver.findElement(By.name("q"));
        element.sendKeys("teste de sofware");
        element.submit();
        System.out.println("O título da página é: " + driver.getTitle());
        driver.quit();
    }
}

Selenium GRID

  • Distribui os testes em múltiplas máquinas
  • Reduz o tempo gasto na execução de uma suite de testes grande
  • Ideal para executar grandes suites de testes ou suites que devem ser executadas em várias platafomas

Utilizando o Selenium IDE

Árvore de um documento HTML

Instalação do Selenium IDE

  • Abrir site http://www.seleniumhq.org
  • Ir até a opção Download
  • Rolar até a seção Selenium IDE
  • Clicar no link do número da versão (2.8.0) para instalar o complemento do Firefox

Comandos básicos

  • O Selenium IDE fornece uma série de comandos
  • São dividos três tipos
    • Verificação
    • Ação
    • Gerais
  • Pode-se chamar comandos de ação na página
  • Todos os comandos que terminam com AndWait fazem uma espera até a página ser carregada (é possível configurar o tempo limite).

Comandos de verificação

  • assert* - Garante que uma certa informação está na página, falha a execução do script caso a informação não esteja presente
  • verify* - Verifica se uma certa informação está na página, o script continua mesmo se a informação não existir.

Comandos de ação

  • click* - Clique do usuário
  • type- Mudar texto de um elemento
  • sendKeys* - Digitar texto dentro de um elemento
  • key* - Comandos de teclado
  • mouse* - Botões mouse
  • drag* - Arrastar
  • check - Marcar um checkbox
  • goBack - Voltar no navegador
  • refresh - Atualizar a página

Comandos gerais

  • store* - Guardar uma informação
  • setTimeout - Definir tempo máximo de espera
  • rollup - Executar um grupo e comandos predefinido
  • echo - Mostrar um texto no console
  • runscript - Executar código javascript no navegador

Locators

  • Locators são forma de identificar um elemento dentro da página Web 
  • Podem ser do tipo:
    • id (atributo ID do elemento)
    • nome (atribuido name elemento)
    • xpath (localizador XML XPath)
    • links
    • DOM (através de propriedades javascript DOM)
    • CSS (pelo seletor CSS)

Locator ID

<!DOCTYPE html>
<html>
  <body>
    <form id="loginForm">
      <input name="username" type="text" />
      <input name="password" type="password" />
      <input name="continue" type="submit" value="Login" />
      <input name="continue" type="reset" value="Clear" />
    </form>
  </body>
</html>

Encontra um elemento pelo atributo ID

Ex: id=loginForm

Locator Name

<!DOCTYPE html>
<html>
  <body>
    <form id="loginForm">
      <input name="username" type="text" />
      <input name="password" type="password" />
      <input name="continue" type="submit" value="Login" />
      <input name="continue" type="reset" value="Clear" />
    </form>
  </body>
</html>

Encontra um elemento pelo atributo name

Ex: name=username

Locator Link

<!DOCTYPE html>
<html>
  <body>
    <p>Deseja continuar?</p>
    <a href="continue.html">Continuar</a>
    <a href="cancel.html">Cancelar</a>
  </body>
</html>

Localiza um elemento através do atributo href

Ex: link=continue.html

      link=cancel.html

Locator CSS

<!DOCTYPE html>
<html>
  <body>
    <form id="loginForm">
      <input class="required" name="username" type="text" />
      <input class="required passField" name="password" type="password" />
      <input name="continue" type="submit" value="Login" />
      <input name="continue" type="reset" value="Clear" />
    </form>
  </body>
</html>

Localiza um elemento através do seletor CSS

Ex: css=input.required[type=text]

      css=input[type=password]

Locator DOM

<!DOCTYPE html>
<html>
  <body>
    <form id="loginForm">
      <input name="username" type="text" />
      <input name="password" type="password" />
      <input name="continue" type="submit" value="Login" />
      <input name="continue" type="reset" value="Clear" />
    </form>
  </body>
</html>

Localiza um elemento através na navegação nos elementos

Ex: document.forms[0].password

Locator XPath

<!DOCTYPE html>
<html>
  <body>
    <form id="loginForm">
      <input name="username" type="text" />
      <input name="password" type="password" />
      <input name="continue" type="submit" value="Login" />
      <input name="continue" type="reset" value="Clear" />
    </form>
  </body>
</html>

Localiza um elemento através na navegação nos elementos

Ex: /input[3]

      /input[@name="continue" and @type="reset"]

Praticar com Selenium IDE

  • Escolher um site qualquer
  • Gravar um script no Selenium IDE
  • Usar comandos assert para testar o site

Testes com Selenium WebDriver

Instalação do Selenium WebDriver

  • Abrir site http://www.seleniumhq.org
  • Ir até a opção Download
  • Rolar até a seção Selenium Client & WebDriver
  • Clicar no link Download correspondente a linguagem Java
  • Extrair o arquivo zip e adicionar os arquivos JAR ao projeto do eclipse

Exportando teste para Java

Código gerado

  @Before
  public void setUp() throws Exception {
    driver = new FirefoxDriver();
    baseUrl = "https://www.google.com.br/";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  }
  @Test
  public void testGoogleInstant() throws Exception {
    driver.get(baseUrl + "/?gws_rd=ssl");
    driver.findElement(By.id("lst-ib")).clear();
    driver.findElement(By.id("lst-ib")).sendKeys("teste de software");
    for (int second = 0;; second++) {
    	if (second >= 60) fail("timeout");
    	try {
            if (isElementPresent(By.linkText("Teste de software – Wikipédia, a enciclopédia livre"))) {
                break;
            }
        } catch (Exception e) {}
    	Thread.sleep(1000);
    }
  }

Exercício

Selenium

By Roldão Junior

Selenium

Apresentação da ferramenta Selenium na disciplina teste de software

  • 1,026