[Livro MEAN] Cap 11 - Protractor error teste e2e

Boa noite,

estou com problemas ao rodar o teste e2e do protractor para automatizar a autenticação no Github. Analisando o erro parece o selenium não consegue encontrar o elemento link de id entrar. Segue abaixo a saída de errro.

Starting selenium standalone server…
[launcher] Running 1 instances of WebDriver
Selenium standalone server started at http://192.168.25.2:55921/wd/hub
[launcher] Error: NoSuchElementError: no such element
(Session info: chrome=48.0.2564.103)
(Driver info: chromedriver=2.12.301326 (093c7e07b4a916b690e784b0374c7f618f1ea4be),platform=Mac OS X 10.10.5 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 23 milliseconds
For documentation on this error, please visit: Selenium
Build info: version: ‘2.44.0’, revision: ‘76d78cf’, time: ‘2014-10-23 20:02:37’
System info: host: ‘Herculanos-MacBook-Pro.local’, ip: ‘192.168.25.2’, os.name: ‘Mac OS X’, os.arch: ‘x86_64’, os.version: ‘10.10.5’, java.version: ‘1.8.0_51’
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=/var/folders/zh/lbrdtf3s4y3c70cnxl2225ym0000gn/T/.org.chromium.Chromium.b0Vnwk}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, version=48.0.2564.103, platform=MAC, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: 2057b2477b83ad8fd915624ac56be466
==== async task ====
WebDriver.findElement(By.id(“entrar”))
at exports.config.onPrepare (/Users/herculanogripp/Documents/workspace/books-study/mean-fullstack-javascript/config/protractor.js:7:18)
==== async task ====
executing onPrepare
at Function.promise (/usr/local/lib/node_modules/protractor/node_modules/q/q.js:650:9)
at _fulfilled (/usr/local/lib/node_modules/protractor/node_modules/q/q.js:797:54)
at self.promiseDispatch.done (/usr/local/lib/node_modules/protractor/node_modules/q/q.js:826:30)
at Promise.promise.promiseDispatch (/usr/local/lib/node_modules/protractor/node_modules/q/q.js:759:13)
[launcher] Process exited with error code 100

Alguem tem alguma ideia do que está acontecendo ?

Olá, existe o ID entrar no elemento?

Cole o código do seu arquivo de configuração do protractor e da sua página que contém o link ENTRAR pelo github.

Tem sim Flavio, inclusive eu consigo fazer o teste com o selenium usando plugin do chrome.

Arquivo de configuração do protractor.

// config/protractor.js

exports.config = {
	specs: ['../test/e2e/**/*.js'],
	onPrepare: function(){
		browser.driver.get('http://localhost:3000');
		browser.driver.findElement(by.id('entrar'));
		browser.driver.findElement(by.id('login_field')).sendKeys('email');
		browser.driver.findElement(by.id('password')).sendKeys('senha');
		browser.driver.findElement(by.name('commit')).click();
	}
};

Página de autenticação link para o arquivo

Olá Herculano,

Veja que você está acessando localhost:3000. Se o usuário não estiver logado, ele será redirecionado para localhost:3000/auth. Essa parte de redirecionamento está ok? Se não for para auth não será exibida a página com Entre pelo Github e por conseguinte o link não será exibido.

Aguardo seu feedback.

Flavio,

caso o usuário não esteja logado ele é redirecionado para url http://localhost:3000/#/auth. Essa parte de redirecionamento está funcionando normalmente. Tentei inclusive alterar a url do teste para acessar diretamente a página de auth e também não funcionou.

Tenho duas dúvidas

  1. Usando a url http://localhost:3000, existe a possibilidade do teste tentar pegar o element entrar antes do redirecionamento ?
  2. Existem uma forma de debuggar o teste pra saber quais elementos existem na página aberta no teste ?

Att, Herculano

Oi Herculano,

Só perguntei para ter certeza, tenho uma solução mega blaster.
Alguns leitores como você apresentaram problemas nessa parte, mas outros não.

Eu já coloquei um código que resolve esse problema em todos os casos e atualizei o livro, a versão online há algum tempo (mais de 3 meses… se não me engano).

É um tiro de bazuca, inclusive a solução original foi feita para resolver um timeout lá no Saucelabs. Vamos tentar?

 browser.driver.get('http://localhost:3000/#/auth').then(function() {
    	browser.driver.findElement(by.id('entrar')).click();
       // restante do código aqui
    });

Consegue ver que usamos uma promise? Eu espero a auth ser carregada, então (then) peço o click.

Aguardo seu feedback. Se você tem a versão digital, só baixar novamente que temos esse código lá.

Também não funcionou, continua com o mesmo erro. Tem alguma ideia do que posso tentar ?

Quanto ao livro eu comprei apenas a versão fisíca, acredito q eu não tenha direito as erratas do livro.

att, Herculano

Hum, nesse caso só olhando todo o seu código. Você já experimentou comparar seu código com o gabarito que tem lá no meu github?

Outro ponto é o sua parcial auth.html. Se há alguma quebra de tag lá o selenium nunca encontrará o elemento.

Ou seja, você está tendo problema em uma parte que é novidade, nunca ninguém havia relatado. Você rodou as instruções de upgrade do webdriver? Toda aquela bagaça?

Comparei e não tem nenhuma diferença significativa. Tentei rodar o protractor dentro do seu projeto no github tanto no cap-11 quanto no link que você enviou e ocorreu o mesmo erro.

Rodei as instruções de update do webdriver conforme o livro. Acredito que seja algum bug na instalação do protractor ou do webdriver pois é erro é sempre ao capturar o elemento entrar da página auth. Vou tentar realizar os testes em outra máquina e te reporto o resultado.

Você usou exatamente a versão do protractor que usei no meu livro?
Aliás, se você tiver seu projeto no Git, assim que tiver tempo eu dou uma olhada. Me passa o link (mas com a versão que você está tendo problema).

Instalei a mesma versão do protractor que está no livro que é a 1.5.

Segue o link para o github

Heculano, qual versão do JDK você está usando? Se estiver usando 1.8, faz downgrade para 1.7 e faça um teste. O Selenium (não o protractor) tem problemas com essa versão.

Flavio, eu estava usando a versão 1.8 do JDK mudei para 1.7 mas o erro continuou o mesmo. Acredito que seja algo no projeto msm. Para testar se o selenium estava funcionava com o protractor usei esse exemplo de teste https://angular.github.io/protractor/#/ que encontrei e funcionou beleza.
Cheguei a testar o projeto em uma máquina linux e erro é o mesmo .

Quando eu executo o protractor para testar a validação da autenticação via github a instancia do browser aberta nem chega a carregar a página da aplicação que seria http://localhost:3000/#/auth .

Você tem mais alguma ideia do que pode ser ?

Olá Herculano, só agora consegui respirar para me aprofundar no seu problema.

Clonei seu repositório e já encontrei um problema:

No arquivo protractor.js, tenho a linha:

browser.driver.findElement(by.id('entrar'))

Faltou ativar o click:

browser.driver.findElement(by.id('entrar')).click();

Creio eu que isso foi um teste seu, ou seja, que esqueceu de voltar com o click.

No entanto, rodei seu projeto em minha máquina só adicionando o .click() que falta e tudo funcionou. Ele encontrou o elemento com ID entrar e tals.

Talvez, quando eu pedi que você atualizasse seu código, você testou sem o click.

Aguardo seu feedback. Aliás, se eu não perguntei, qual sua plataforma (Windows, OSX ou Linux)?

Ah, e só uma coisa: cuidado, você colocou seu login e senha no seu repositório!

Olá Flavio, realmente eu fiz diversas tentativas e esqueci de voltar com evento click. Após atualizar para o Java 1.7 testei com o click e também não funcionou. Testei inclusive o código do livro que você disponibilizou no github.

Tem alguma forma de debugar o teste ?

A plataforma que estou usando é OSX.

Olá Flavio,

fiz o teste usando o repositorio https://github.com/flaviohenriquealmeida/mean-livro-cap-12-sem-saucelabs que você mandou e os testes do protractor rodaram beleza. Ainda não tive tempo de fazer diff com meu código pra ver a diferença. Quando fizer isso te falo onde estava o problema.

Mas obrigado pela ajuda.

Mistério! :slightly_smiling:

Eu baixei o seu projeto e só fiz aquela alteração do click e funcionou aqui. Eu fico curioso em saber o que se passa assim como você.

Só para ter certeza, você executou o passo do livro que atualiza o webdriver?

webdriver-manager update

Erros como o que você apresenta pode ser em decorrência disso. Enquanto agente não descobre, vai tocando o restante do livro para não esfriar. Tem muito conteúdo ainda pra frente.

Eu também uso OSX, El Captain.

Fala flávio e Herculano, beleza !!!

Primeiramente, quero parabenizar o Flávio pelo excelente livro livro. Qualquer um que comprar o seu livro vai pagar pouco e levar muito. Nunca li um livro técnico em 7 dias, sem dúvidas o melhor livro da casa do código que eu já li.

Quero compartilhar a minha experiência com esse erro. Eu estava acham que era um problema de incompatibilidade de OS pois eu utiliza o windows 10, porém estou vendo que o Herculano usa o macbook e tem o mesmo problema que eu, kkkkk.

Bem, passei horas olhando os códigos do livro e do repositório do Flávio, estava tudo igual, inclusive, o correção que da URL eu havia tentado muito antes de ver esse post e não adiantou.

Chega de papo, o protractor passou a funcionar belezinha aqui depois que eu abri uma janela do cmd e subir o servidor standalone do selenium com o comando: “webdriver-manager start”, em seguida abri outro cmd sem fechar o primeiro e chamei o teste com o protractor: “protractor config/protractor.js”.

Pra mim isso não faz muito sentido, já que o próprio protractor carrega o servidor do selenium, porém funcionou de pois de tentar executar o comando pela segunda vez.

Olá Edney! Obrigado pelo feedback!

Rapaz, eu acho que você matou uma charada das boas. Minha máquina é meio que super dotada (HD SSD, 16GB…) toda otimizada. Talvez nela as coisas subam rapidamente e isso mascarou esse problema.

Herculano, se puder testar a solução do nosso amigo e verificar se funciona eu lhe ficarei grato. Se for isso, eu já altero no livro para não dar problema.

Eu teste em minha máquina e em outros micros aqui da empresa e funciona, não consigo replicar.

Boa tarde Flavio e Edney,

fiquei um tempo bom parado nesse problema que deixei ele um pouco de lado. Mas a dois mês atrás eu voltei a trabalhar em cima dele e consegui colocar pra funcionar. Não sei o que fiz de diferente para fazer funcionar mas rodou tudo certo.

Eu cheguei avançar no livro até a integração com o Sauce Labs quando tive outro problema. Se me lembro bem o problema com o sauce labs foi algo relacionado a conexão com Travis. Ainda não tive tempo de investigar o problema a fundo. Assim que tiver dou um feedback pra vcs.

Mas reforçando o Edney, o livro é excelente. De longe o melhor livro que já comprei na Casa do Código, parabéns pelo grande trabalho Flávio !!!