Problemas ao interagir com Alerts - PhantomJS (handlesAlerts)

117 views
Skip to first unread message

Leonardo Giacomini

unread,
Dec 15, 2014, 1:19:03 PM12/15/14
to seleniu...@googlegroups.com
Olá pessoal, preciso de uma ajuda.
Aqui na empresa onde trabalho automatizamos os testes em Selenium Webdriver utilizando o webdriver do Chrome para execução.
Estou fazendo algumas adaptações para também conseguir executar os testes no GhostDriver do PhantomJS, porém não consigo interagir com Alerts JavaScript que o nosso sistema tem, provavelmente porque o PhantomJS não dá suporte a handlesAlerts (tentei ativar a capability "handlesAlerts" ao instanciar o driver mas ao executar o teste ela continua como false).

Consegui contornar as confirmações dos alerts substituindo o comando:
driver.switchTo().alert().accept();
por:
((JavascriptExecutor) driver).executeScript("window.onConfirm = function(msg){return true;};");

Até então tudo bem, o problema é que possuímos alguns testes em que o conteúdo do alert é validado através do Selenium utilizando o comando String mensagemAlert = driver.switchTo().alert().getText(); para pegar o conteúdo do alert e fazer a devida validação.
Preciso de ajuda para pegar esse conteúdo através de um comando javascript, e isto está me tomando muito tempo e não consegui sair do chão.
Alguém pode me ajudar?

Obrigado pela atenção.
att,
Leonardo Giacomini

Stefan Teixeira

unread,
Dec 15, 2014, 1:50:36 PM12/15/14
to Leonardo Giacomini, selenium-brasil
Fala Leonardo,

Então, a parte de alerts/confirms/prompts é uma feature que o GhostDriver não possui (ainda). É uma issue aberta: https://github.com/detro/ghostdriver/issues/20

Eu cheguei a comentar um workaround nessa issue, que foi o seguinte:


There are two ways to do this, and they work really well:

1- Using JavascriptExecutor

((JavascriptExecutor) driver).executeScript("window.alert = function(msg){};");
((JavascriptExecutor) driver).executeScript("window.confirm = function(msg){return true;};");

2- Using PhantomJS callbacks (you need the 1.1.0 version of GhostDriver to do this)

PhantomJSDriver phantom = (PhantomJSDriver) driver;

phantom.executePhantomJS("var page = this;" +
             "page.onAlert = function(msg) {" +
                    "console.log('ALERT: ' + msg);" +
             "};");
phantom.executePhantomJS("var page = this;" +
             "page.onConfirm = function(msg) {" +
                    "console.log('CONFIRM: ' + msg);"
                    "return true;" +
             "};");


 Quanto a conseguir obter essa mensagem, aí já é um pouco mais chato. Se colocar um 'return msg' vc não consegue extrair o resultado como String? Essa mensagem precisa mesmo ser testada?

Uma dica é usar o GhostDriver pra um conjunto de testes que seja mais crítico (os famosos smoke tests), ainda mais pelo projeto não estar 100% pronto. 

Leonardo Giacomini

unread,
Dec 15, 2014, 2:02:33 PM12/15/14
to seleniu...@googlegroups.com, lgiaco...@gmail.com
Obrigado Stefan, até tinha visto já essa issue e teu comentário, confesso que utilizei ele e nem vi que tinha era teu haha.
Tentei com o 'return msg;' mas o comando onAlert não tem retorno. A validação dos alerts acontece em alguns casos de teste, e por isto estava tentando um contorno da situação. Mas vou deixar estas validações somente quando executar com o chromedriver, pois a principio o GhostDriver está somente sendo avaliado aqui.

Obrigado novamente.
att,
Leonardo Giacomini
Reply all
Reply to author
Forward
0 new messages