div "Carregando" e click após a mesma

Galera, mais uma duvida ae.

Tenho um sistema que apresenta uma lista de funcionários e uma lixeirinha do lado de cada um para exclui-lo. Ao lado dessa lista é apresentado o numero total desses funcionários.

Assim que clico na lixeira é apresentada uma div de carregando que logo após desaparece, exibindo a lista e o total atualizado.

Estou fazendo um script que limpa essa lista, ou seja, clica em uma lixeira, verifica se o numero de funcionários indicados é igual a zero e refaz o processo até zerar esse valor.

O negócio é que ele está tentando clicar nessa div de “carregando”.

O erro apresentado abaixo

org.openqa.selenium.WebDriverException: Element is not clickable at point (819.8333129882812, 252). Other element would  receive the click: <div class="loader is-loading" ng-class="{'is-loading' : vm.isLoading()}"></div>
Command duration or timeout: 215 milliseconds
Build info: version: '2.53.0', revision: '35ae25b', time: '2016-03-15 17:00:58'

meu código :


wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(FRAME));
		
int totalFuncionarios = Integer.parseInt(wait.until(ExpectedConditions.visibilityOfElementLocated(TOTAL_FUNCIONARIOS)).getText());
		
while (totalFuncionarios > 0) {

	wait.until(ExpectedConditions.elementToBeClickable(By.xpath("xpath da parada"))).click();
			
	totalFuncionarios = Integer.parseInt(wait.until(ExpectedConditions.visibilityOfElementLocated(TOTAL_FUNCIONARIOS)).getText());
}

Ele consegue clicar a primeira vez, apartir da segunda é que não funciona

As ações no WebDriver são fiéis ao que o usuário está fazendo, portanto vc não pode clicar em algo que está sendo coberto por outro componente, não pode interagir com elementos disabled, etc.

Vc tem que esperar essa div “carregando” desaparecer, porque pelo visto ela está na frente do que vc quer clicar. Pega o locator dela (que já tá aparecendo na mensagem de erro) e faz um wait.until(ExpectedConditions.invisibilityOf(elemento)).

eu inclusive espero a visibilidade dela e depois a invisibilidade, mas não dá certo

coloquei só invisibilidade e deu certo, mas ele espera uns 6 segundos entre a retirada de um e de outro

meu codigo ficou assim:

wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(FRAME_GESTAO_FILAS));
		
int totalFuncionarios = Integer.parseInt(wait.until(ExpectedConditions.visibilityOfElementLocated(TOTAL_FUNCIONARIOS)).getText());
		
while (totalFuncionarios > 0) {

	wait.until(ExpectedConditions.elementToBeClickable(By.xpath(".//*[@id='gestao-filas-app-page']//tbody/tr[1]/td[2]/a[3]/span"))).click();
			
	//esperar o carregando da pagina e volta para o frame que esta sendo utilizado
	driver.switchTo().defaultContent();
	wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(".//plt-carregando/div[contains(@class,'loader is-loading')]/div/span")));
	wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(FRAME_GESTAO_FILAS));
			
	totalFuncionarios = Integer.parseInt(wait.until(ExpectedConditions.visibilityOfElementLocated(TOTAL_FUNCIONARIOS)).getText());
}

driver.switchTo().defaultContent();

Alguem sabe como poderia resolver o problema?

Qual é o problema agora? Não tinha dito que deu certo?

Se o seu problema é aguardar esse tempo, lembre que aguardar invisibilidade vai esperar o tempo do seu timeout implícito, não tem muito pra onde fugir… vejo duas alternativas, mas uma pode não funcionar e a outra vc pode achar complexa demais:

1 - tente usar o not() nas ExpectedConditions, tipo ExpectedConditions.not(ExpectedConditions.visibilityOf(elemento)), não sei se vai funcionar melhor, pesquise e tente usar
2 - crie seu próprio wait pra esperar que esse elemento não esteja aparecendo mais, pesquise sobre FluentWait, num post eu dei um exemplo de FluentWait, dá uma olhada: http://stefanteixeira.com.br/2014/04/29/entendendo-os-tipos-de-esperas-no-selenium-webdriver/

vlw… vou tentar

Log in to reply

Looks like your connection to Agile Testers was lost, please wait while we try to reconnect.