[Selenium] - Espera com cortina em GWT

23 views
Skip to first unread message

Camilla Navarro

unread,
Jun 22, 2017, 4:26:42 PM6/22/17
to Selenium Brasil
Boa tarde,

O sistema que trabalho é em GWT e preciso clicar em um checkbox que se encontra na interface depois de uma cortina de espera (explicarei o passo a passo para ficar mais claro), porém , mesmo utilizando a espera aguardando o id do elemento de checkbox, conforme código abaixo, o sistema continua reclamando que a cortina de espera continua na frente.

espera.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//*[@id='emissaopnl.checkbox.anuencia']/input")));

Pensei em verificar até que a janela de cortina esteja invisível mas não encontrei nada no Selenium para isso que funcione (minhas tentativas de código podem ter sido realizadas de forma errada). 
Como poderia fazer? Existe alguma forma? 

O passo a passo funcional do meu sistema é o seguinte:

[...] 
Tela de cálculo
Escolhe a forma de pagamento: FAT
Clica em calcular
Sistema abre um frame em formato popup com a palavra aguarde e um gif de animação (cortina)
Confirma a anuência de aceite de emissão
Clica em emitir passagem.

O código de erro na execução do Selenium é a seguinte :

org.openqa.selenium.WebDriverException: unknown error: Element <input type="checkbox" value="on" id="gwt-uid-56" tabindex="0"> is not clickable at point (56, 556). Other element would receive the click: <div class="gwt-PopupPanelGlass" style="position: absolute; left: 0px; top: 0px; display: block; width: 1040px; height: 637px;"></div>
 
(Session info: chrome=56.0.2924.87)

Observações:
1: Eu criei como alternativa um método cortina que dá um thread sleep, mas não acho uma forma elegante de fazer código e não gostaria de manter.
2: Mesmo com esse Thread sleep não funciona clicar na anuência.
3: Tentei adicionar uma espera implícita e também não funcionou. 

Obrigada desde jpa. 

Paulo Luiz Fachini

unread,
Jun 22, 2017, 10:24:19 PM6/22/17
to Camilla Navarro, Selenium Brasil
Boa Noite Camilla,

Tive uma situação similar, existia um div de looding que recebia o click.
Então eu criei um método que espera o elemento ficar invisível para seguir adiante.

Trecho em C#

By elemento = By.CssSelector("div.blockUI");
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
wait.Until(ExpectedConditions.InvisibilityOfElementLocated(elemento));


Atenciosamente,

Paulo Luiz Fachini
 


--
Visite em https://groups.google.com/d/forum/selenium-brasil
---
Você recebeu essa mensagem porque está inscrito no grupo "Selenium Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para selenium-brasil+unsubscribe@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/selenium-brasil.
Para mais opções, acesse https://groups.google.com/d/optout.

Camilla Navarro

unread,
Jun 23, 2017, 2:51:04 PM6/23/17
to Selenium Brasil
Olá Paulo,

Muito obrigada.

Já tentei algumas soluções baseada na sua e ainda não deu certo, mas vou tentar algumas mais entendendo melhor o código da minha cortina.
Posto assim que conseguir.

Obrigada desde já.   

Camilla Navarro

unread,
Jun 27, 2017, 3:00:36 PM6/27/17
to Selenium Brasil
Olá Paulo, 

Tentei algumas implementações com a sua solução mas ainda assim não tive muito sucesso. 
No meu sistema é gerado um painel com display: block no tamanho 1024 x 637 que está recebendo o clique.

Você, ou alguém sabe, se tem alguma forma de ignorar isso? 

Att, 

Em quinta-feira, 22 de junho de 2017 17:26:42 UTC-3, Camilla Navarro escreveu:

Paulo Luiz Fachini

unread,
Jun 27, 2017, 4:11:42 PM6/27/17
to Camilla Navarro, Selenium Brasil
Oi Camilla,

Qual é o real comportamento desse elemento Block?
Por exemplo, ele some do HTML ou ele sempre existiu no HTML?

Bom tente executar o código depurando, indo devagar você consegue verificar se a espera do elemento precisa ser aprimorada ou até mesmo fixar um valor.

By elemento = By.CssSelector("div.blockUI");
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
wait.Until(ExpectedConditions.InvisibilityOfElementLocated(elemento));
// talvez coloque 1 segundo de espera fixa nesse ponto, para dar tempo de recarregar a DOM.

Atenciosamente,


Paulo Luiz Fachini
 


--

Jonathan Wutzke

unread,
Jun 27, 2017, 4:49:03 PM6/27/17
to Paulo Luiz Fachini, Camilla Navarro, Selenium Brasil
oi Camila,

talvez o que esteja ocorrendo é que quando passa pelo InvisibilityOfElementLocated o elemento de fato ainda esteja invisivel, já tentou fazer primeiro um visibilityOfElementLocated pra depois fazer o InvisibilityOfElementLocated? numa dessas funciona....

Camilla Navarro

unread,
Jun 27, 2017, 4:54:57 PM6/27/17
to Selenium Brasil
Boa tarde,

Testei uma nova versão do código com o invisibilityOfElementLocated mudando o foco do id que gostaria de pegar para o popUp e funcionou ;)

Gerei uma espera para o elemento do popUp e outra espera para o elemento da tela.

Obrigada pela ajuda!  

Em quinta-feira, 22 de junho de 2017 17:26:42 UTC-3, Camilla Navarro escreveu:
Reply all
Reply to author
Forward
0 new messages