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();
}
};