Transferidor - Transferidor e servidor de selênio

Conforme discutido anteriormente, o Protractor é uma estrutura de teste ponta a ponta de código aberto para aplicativos Angular e AngularJS. É um programa Node.js. Por outro lado, Selenium é uma estrutura de automação de navegador que inclui o Selenium Server, as APIs WebDriver e os drivers de navegador WebDriver.

Transferidor com Selênio

Se falarmos sobre a conjunção do Transferidor e Selenium, o Protractor pode trabalhar com o servidor Selenium para fornecer uma infraestrutura de teste automatizada. A infraestrutura pode simular a interação do usuário com um aplicativo angular que está sendo executado em um navegador ou dispositivo móvel. A conjunção de Transferidor e Selênio pode ser dividida em três partições, a saber, teste, servidor e navegador, conforme mostrado no diagrama a seguir -

Processos Selenium WebDriver

Como vimos no diagrama acima, um teste usando Selenium WebDriver envolve os três processos a seguir -

  • Os scripts de teste
  • O servidor
  • O navegador

Nesta seção, vamos discutir a comunicação entre esses três processos.

Comunicação entre Scripts de Teste e Servidor

A comunicação entre os dois primeiros processos - os scripts de teste e o servidor depende do funcionamento do Selenium Server. Em outras palavras, podemos dizer que a forma como o servidor Selenium está rodando dará forma ao processo de comunicação entre os scripts de teste e o servidor.

O servidor Selenium pode ser executado localmente em nossa máquina como um servidor Selenium autônomo (selenium-server-standalone.jar) ou pode ser executado remotamente por meio de um serviço (Sauce Labs). No caso do servidor Selenium autônomo, haveria uma comunicação http entre o Node.js e o servidor selenium.

Comunicação entre o servidor e o navegador

Como sabemos que o servidor é responsável por encaminhar os comandos para o navegador após interpretar os mesmos a partir dos scripts de teste. É por isso que o servidor e o navegador também requerem um meio de comunicação e aqui a comunicação é feita com a ajuda deJSON WebDriver Wire Protocol. O navegador ampliado com o driver do navegador que é usado para interpretar os comandos.

O conceito acima sobre os processos do Selenium WebDriver e sua comunicação pode ser entendido com a ajuda do diagrama a seguir -

Ao trabalhar com o Protractor, o primeiro processo, ou seja, o script de teste é executado usando Node.js, mas antes de executar qualquer ação no navegador, ele enviará um comando extra para garantir que o aplicativo sendo testado esteja estabilizado.

Configurando o Selenium Server

O Selenium Server atua como um servidor proxy entre nosso script de teste e o driver do navegador. Basicamente, ele encaminha o comando do nosso script de teste para o WebDriver e retorna as respostas do WebDriver para o nosso script de teste. Existem as seguintes opções para configurar o servidor Selenium que estão incluídas noconf.js arquivo do script de teste -

Servidor Selenium autônomo

Se quisermos executar o servidor em nossa máquina local, precisamos instalar o servidor selenium autônomo. O pré-requisito para instalar o servidor selenium independente é JDK (Java Development Kit). Devemos ter o JDK instalado em nossa máquina local. Podemos verificar executando o seguinte comando na linha de comando -

java -version

Agora, temos a opção de instalar e iniciar o Selenium Server manualmente ou a partir do script de teste.

Instalando e iniciando o servidor Selenium manualmente

Para instalar e iniciar o servidor Selenium manualmente, precisamos usar a ferramenta de linha de comando WebDriver-Manager que vem com o Protractor. As etapas para instalar e iniciar o servidor Selenium são as seguintes -

Step 1- A primeira etapa é instalar o servidor Selenium e o ChromeDriver. Isso pode ser feito com a ajuda da execução do seguinte comando -

webdriver-manager update

Step 2- Em seguida, precisamos iniciar o servidor. Isso pode ser feito com a ajuda da execução do seguinte comando -

webdriver-manager start

Step 3- Por fim, precisamos definir seleniumAddress no arquivo de configuração para o endereço do servidor em execução. O endereço padrão seriahttp://localhost:4444/wd/hub.

Iniciando o servidor Selenium a partir de um script de teste

Para iniciar o servidor Selenium a partir de um script de teste, precisamos definir as seguintes opções em nosso arquivo de configuração -

  • Location of jar file - Precisamos definir a localização do arquivo jar para o servidor Selenium autônomo no arquivo de configuração definindo seleniumServerJar.

  • Specifying the port- Também precisamos especificar a porta a ser usada para iniciar o servidor Selenium autônomo. Ele pode ser especificado no arquivo de configuração definindo seleniumPort. A porta padrão é 4444.

  • Array of command line options- Também precisamos definir o conjunto de opções de linha de comando para passar ao servidor. Ele pode ser especificado no arquivo de configuração definindo seleniumArgs. Se você precisa de uma lista completa de conjuntos de comandos, inicie o servidor com o-help bandeira.

Trabalhando com Servidor Selenium Remoto

Outra opção para executar nosso teste é usar o servidor Selenium remotamente. O pré-requisito para usar o servidor remotamente é que devemos ter uma conta com um serviço que hospeda o servidor. Enquanto trabalhamos com o Protractor, temos o suporte integrado para os seguintes serviços de hospedagem do servidor -

TestObject

Para usar TestObject como o servidor Selenium remoto, precisamos definir o testobjectUser, o nome de usuário de nossa conta TestObject e testobjectKey, a chave API de nossa conta TestObject.

BrowserStack

Para usar BrowserStack como o servidor Selenium remoto, precisamos definir o browserstackUser, o nome de usuário de nossa conta BrowserStack e browserstackKey, a chave API de nossa conta BrowserStack.

Laboratórios de molho

Para usar a Sauce Labs como o servidor Selenium remoto, precisamos definir o sauceUser, o nome de usuário de nossa conta da Sauce Labs e SauceKey, a chave API de nossa conta da Sauce Labs.

Kobiton

Para usar o Kobiton como o servidor Selenium remoto, precisamos definir o kobitonUser, o nome de usuário de nossa conta Kobiton e kobitonKey, a chave API de nossa conta Kobiton.

Conectando-se diretamente ao driver do navegador sem usar o servidor Selenium

Mais uma opção para executar nosso teste é conectar-se ao driver do navegador diretamente, sem usar o servidor Selenium. O transferidor pode testar diretamente, sem o uso do Selenium Server, no Chrome e no Firefox, definindo directConnect: true no arquivo de configuração.

Configurando o navegador

Antes de configurar e configurar o navegador, precisamos saber quais navegadores são compatíveis com o Protractor. A seguir está a lista de navegadores suportados pelo Protractor -

  • ChromeDriver
  • FirefoxDriver
  • SafariDriver
  • IEDriver
  • Appium-iOS/Safari
  • Appium-Android/Chrome
  • Selendroid
  • PhantomJS

Para definir e configurar o navegador, precisamos mover para o arquivo de configuração do Protractor porque a configuração do navegador é feita dentro do objeto de recursos do arquivo de configuração.

Configurando o Chrome

Para configurar o navegador Chrome, precisamos definir o objeto de capacidades da seguinte maneira

capabilities: {
   'browserName': 'chrome'
}

Também podemos adicionar opções específicas do Chrome que estão aninhadas em chromeOptions e sua lista completa pode ser vista em https://sites.google.com/a/chromium.org/chromedriver/capabilities.

Por exemplo, se você deseja adicionar FPS-counter no canto superior direito, então pode ser feito da seguinte forma no arquivo de configuração -

capabilities: {
   'browserName': 'chrome',
   'chromeOptions': {
      'args': ['show-fps-counter=true']
   }
},

Configurando o Firefox

Para configurar o navegador Firefox, precisamos definir o objeto de capacidades da seguinte forma -

capabilities: {
   'browserName': 'firefox'
}

Também podemos adicionar opções específicas do Firefox que estão aninhadas no objeto moz: firefoxOptions e sua lista completa pode ser vista em https://github.com/mozilla/geckodriver#firefox-capabilities.

Por exemplo, se você deseja executar seu teste no Firefox em modo de segurança, isso pode ser feito da seguinte forma no arquivo de configuração -

capabilities: {
   'browserName': 'firefox',
   'moz:firefoxOptions': {
     'args': ['—safe-mode']
   }
},

Configurando outro navegador

Para configurar qualquer outro navegador além do Chrome ou Firefox, precisamos instalar um binário separado do https://docs.seleniumhq.org/download/.

Configurando PhantonJS

Na verdade, o PhantomJS não é mais compatível por causa de seus problemas de travamento. Em vez disso, é recomendável usar o Chrome sem cabeça ou o Firefox sem cabeça. Eles podem ser configurados da seguinte forma -

Para configurar o Chrome sem cabeça, precisamos iniciar o Chrome com o sinalizador –headless da seguinte forma -

capabilities: {
   'browserName': 'chrome',
   'chromeOptions': {
      'args': [“--headless”, “--disable-gpu”, “--window-size=800,600”]
   }
},

Para configurar o Firefox sem cabeça, precisamos iniciar o Firefox com o –headless sinalizar da seguinte forma -

capabilities: {
   'browserName': 'firefox',
   'moz:firefoxOptions': {
      'args': [“--headless”]
   }
},

Configurando vários navegadores para teste

Também podemos testar em vários navegadores. Para isso, precisamos usar a opção de configuração multiCapabilities da seguinte forma -

multiCapabilities: [{
   'browserName': 'chrome'
},{
   'browserName': 'firefox'
}]

Qual estrutura?

Duas estruturas de teste BDD (desenvolvimento orientado por comportamento), Jasmine e Mocha, são suportadas pelo Protractor. Ambas as estruturas são baseadas em JavaScript e Node.js. A sintaxe, o relatório e a estrutura, necessários para escrever e gerenciar os testes, são fornecidos por essas estruturas.

A seguir, veremos como podemos instalar vários frameworks -

Estrutura Jasmine

É a estrutura de teste padrão do Protractor. Ao instalar o Protractor, você obterá a versão Jasmine 2.x com ele. Não precisamos instalá-lo separadamente.

Estrutura Mocha

Mocha é outro framework de teste JavaScript basicamente rodando em Node.js. Para usar o Mocha como nossa estrutura de teste, precisamos usar a interface BDD (desenvolvimento orientado por comportamento) e asserções Chai com Chai As Promised. A instalação pode ser feita com a ajuda dos seguintes comandos -

npm install -g mocha
npm install chai
npm install chai-as-promised

Como você pode ver, a opção -g é usada durante a instalação do mocha, é porque instalamos o Protractor globalmente usando a opção -g. Depois de instalá-lo, precisamos solicitar e configurar o Chai dentro de nossos arquivos de teste. Isso pode ser feito da seguinte forma -

var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
var expect = chai.expect;

Depois disso, podemos usar Chai As Promised como tal -

expect(myElement.getText()).to.eventually.equal('some text');

Agora, precisamos definir a propriedade do framework para mocha do arquivo de configuração adicionando framework: 'mocha'. As opções como 'repórter' e 'lento' para mocha podem ser adicionadas no arquivo de configuração da seguinte forma -

mochaOpts: {
   reporter: "spec", slow: 3000
}

Estrutura de pepino

Para usar o Cucumber como nossa estrutura de teste, precisamos integrá-lo ao Protractor com a opção de estrutura custom. A instalação pode ser feita com a ajuda dos seguintes comandos

npm install -g cucumber
npm install --save-dev protractor-cucumber-framework

Como você pode ver, a opção -g é usada durante a instalação do Cucumber, porque instalamos o Protractor globalmente, ou seja, com a opção -g. Em seguida, precisamos definir a propriedade do framework paracustom do arquivo de configuração adicionando framework: 'custom' e frameworkPath: 'Protractor-cucumber-framework' ao arquivo de configuração chamado cucumberConf.js.

O código de amostra mostrado abaixo é um arquivo cucumberConf.js básico que pode ser usado para executar arquivos de recurso do pepino com o Protractor -

exports.config = {
   seleniumAddress: 'http://localhost:4444/wd/hub',

   baseUrl: 'https://angularjs.org/',

   capabilities: {
      browserName:'Firefox'
   },

   framework: 'custom',

   frameworkPath: require.resolve('protractor-cucumber-framework'),

   specs: [
      './cucumber/*.feature'
   ],

   // cucumber command line options
   cucumberOpts: {
      require: ['./cucumber/*.js'],
      tags: [],
      strict: true,
      format: ["pretty"],
      'dry-run': false,
      compiler: []
   },
   onPrepare: function () {
      browser.manage().window().maximize();
   }
};