Eu vejo isso apenas no Chrome.
A mensagem de erro completa é a seguinte:
"org.openqa.selenium.WebDriverException: O elemento não pode ser clicado no ponto (411, 675). Outro elemento receberia o clique: ..."
O elemento que 'receberia o clique' fica ao lado do elemento em questão, não em cima e nem sobrepondo, não se movendo pela página.
Tentei adicionar um deslocamento, mas isso também não funciona. O item está na janela exibida sem a necessidade de rolagem.
google-chrome
selenium
selenium-webdriver
automated-tests
user1591169
fonte
fonte
Respostas:
Isso é causado pelos seguintes 3 tipos:
1.O elemento não está visível para clicar.
Use Actions ou JavascriptExecutor para fazer clique.
Por ações:
Por JavascriptExecutor:
ou
Depois clique no elemento.
2.A página está sendo atualizada antes de clicar no elemento.
Para isso, faça a página aguardar alguns segundos.
3. O elemento é clicável, mas há um botão giratório / sobreposição em cima dele
O código abaixo irá esperar até que a sobreposição desapareça
Depois clique no elemento.
fonte
Você também pode usar o clique do JavaScript e a rolagem não seria necessária.
fonte
actions.MoveToElement
não funcionou para mim em C # e as outras soluções de rolagem pareciam um pouco frágeis, pois havia uma chance de a rolagem não conseguir exibir corretamente o elemento ou de mudar a posição do elemento na página.Parece haver um bug no chromedriver para isso (o problema é que está marcado como não será corrigido) -> GitHub Link
(colocar uma recompensa nos patrocinadores da Freedom, talvez?)
Há uma solução alternativa sugerida no comentário # 27. Talvez funcione para você ...
fonte
Eu tive o mesmo problema, tentei todas as soluções oferecidas, mas elas não funcionaram para mim. eventualmente eu usei isso:
Espero que isto ajude
fonte
Eu já vi isso na situação em que a janela do Chrome movida a selênio foi aberta muito pequena. O elemento a ser clicado estava fora da janela de exibição e, portanto, estava falhando.
Isso parece lógico ... o usuário real teria que redimensionar a janela ou rolar para que seja possível ver o elemento e, de fato, clicar nele.
Depois de instruir o driver selenium para definir o tamanho da janela adequadamente, esses problemas desapareceram para mim. A API do driver da web está descrita aqui .
fonte
Uau, muitas respostas aqui, e muitas boas.
Espero acrescentar algo a isso da minha experiência.
Bem, pessoal, no meu caso, houve uma sobreposição de cookies ocultando o elemento ocasionalmente. Rolar para o elemento também funciona; mas, na minha humilde opinião (no meu caso, não é uma panacéia para todos), a solução mais simples é apenas ir para tela cheia (eu estava executando meus scripts em 3/4 da janela da tela)! Aqui vamos nos:
Espero que ajude!
fonte
rubi / driver de água / cromado
Eu uso o seguinte truque e parece que funciona:
fonte
Eu também lutei com esse problema. O código funciona bem no FF, falha no Chrome. O que eu estava tentando fazer era clicar em uma caixa de seleção - se não estivesse à vista, eu rolaria para ver e, em seguida, clique. Mesmo rolando para a visualização funciona no Chrome, apenas os poucos pixels inferiores da caixa de seleção não estavam visíveis, e o webdriver se recusou a clicar nela.
Minha solução alternativa é esta:
O Chrome também tem problemas com as sendKeys, às vezes é necessário usar ações. Obviamente, você precisa saber em que direção e quanto precisa seguir para que sua milhagem possa variar. Mas eu prefiro isso ao javascript, por isso estou postando aqui caso alguém ache útil.
fonte
Eu estava recebendo esse erro ao executar testes sem cabeça com o xvfb-run. Eles estavam trabalhando perfeitamente localmente. Usando o chrome, as versões do webdriver / chromedriver / chrome / java etc são todas idênticas.
O bug 'não consertará' no chromedriver - GitHub Link apontado por Tony Lâmpada sugeriu que isso pode estar relacionado ao que é / não é visível na tela.
A mensagem de ajuda para xvfb-run mostra o seguinte:
Alterar a resolução do xvfb fez com que o erro desaparecesse:
fonte
Ao usar o transferidor, isso me ajudou:
fonte
Primeiro, tente obter o driver mais recente do Chrome e verifique se ele resolve o problema.
No meu caso, não corrigiu o problema. Mas, a solução a seguir funcionou para mim até agora. A seguir está o código C #, mas você pode seguir a mesma lógica no seu idioma específico. O que fazemos aqui é,
Etapa 1: concentre-se no elemento usando o objeto Ações Selenium,
Etapa 2: Em seguida, clique no elemento
Etapa 3: se houver uma exceção, acionamos um evento javascript "Click" no elemento, executando o script javascript através do método "ExecuteScript" do driver do navegador Selenium.
Você também pode pular as etapas 1 e 2 e tentar apenas a etapa 3 também. A etapa 3 funcionaria por conta própria, mas notei algum comportamento estranho em um cenário em que a etapa 3, mesmo que ela clicasse com sucesso no elemento, causava um comportamento inesperado em outras partes do meu código depois de clicar no elemento.
fonte
Eu fiz esse método com base em um comentário da resposta de Tony Lâmpada. Funciona muito bem.
fonte
Eu estava recebendo o mesmo problema ao executar o script selenium em python. Aqui está o que eu costumava clicar no elemento:
fonte
Eu estava enfrentando um problema semelhante, onde eu tenho que marcar duas caixas de seleção uma após a outra. Mas eu estava recebendo o mesmo erro acima. aqui estão os passos: -
fonte
Você precisa usar o foco ou rolar esse elemento. Você também pode precisar usar a espera explícita.
OU
O elemento não pode ser clicado por causa de um Spinner / Overlay em cima dele:
OU
OU
Se ainda não funcionar, use
JavascriptExecutor
fonte
Aparentemente, este é o resultado de um erro "Não será corrigido" no binário do driver Chrome.
Uma solução que funcionou para mim (nossa milhagem pode variar) pode ser encontrada nesta discussão do grupo do Google, comentário nº 3:
https://groups.google.com/forum/?fromgroups=#!topic/selenium-developer-activity/DsZ5wFN52tc
A parte relevante está aqui:
No meu caso, estou usando Python, então, quando obtive o elemento desejado, simplesmente usei
Espero que isso funcione apenas, no entanto, se o elemento que você está tentando clicar for um link ...
fonte
Eu estava enfrentando o mesmo problema com o clj-webdriver (porta clojure do Selenium). Acabei de traduzir a solução anterior para clojure por conveniência. Você pode chamar essa função antes de clicar ou o que quer que seja para evitar esse problema.
fonte
Isso pode acontecer se o elemento mudar de posição enquanto o driver estiver tentando clicá-lo (também vi isso no IE). O motorista mantém a posição inicial, mas no momento em que realmente clica nela, essa posição não está mais apontando para esse elemento. O driver do FireFox não tem esse problema, aparentemente ele "clica" em elementos programaticamente.
De qualquer forma, isso pode acontecer quando você usa animações ou simplesmente altera a altura dos elementos dinamicamente (por exemplo
$("#foo").height(500)
). Você precisa certificar-se de clicar apenas nos elementos depois que a altura "estabilizar". Acabei com um código parecido com este (ligações em C #):No caso de uma animação ou qualquer outro fator que você não possa consultar facilmente, você pode utilizar um método "genérico" que aguarda o elemento ser estacionário:
fonte
Eu conheci isso porque uma caixa de diálogo de carregamento cobre esse elemento. Simplesmente resolvo adicionando uma espera antes de trabalhar com esse elemento.
Espero que esta ajuda!
fonte
Explicação da mensagem de erro :
A mensagem de erro diz simplesmente que o elemento em que você deseja clicar está presente, mas não está visível. Pode ser coberto por algo ou temporariamente não visível.
Pode haver muitas razões pelas quais o elemento não é visível no momento do teste. Analise sua página novamente e encontre a solução adequada para o seu caso.
Solução para um caso particular :
No meu caso, esse erro ocorre, quando uma dica do elemento da tela em que acabei de clicar, estava aparecendo sobre o elemento que eu queria clicar em seguida. Desfocar era uma solução que eu precisava.
element.blur()
o elemento que aparece na dica de ferramenta, o que faria a dica desaparecer.fonte
O motivo desse erro é que o elemento no qual você está tentando clicar não está na janela de visualização (região vista pelo usuário) do navegador. Portanto, a maneira de superar isso é rolando primeiro para o elemento desejado e depois executando o clique.
Javascript:
Java:
fonte
Na resposta de Tony Lâmpada, o comentário nº 27 realmente resolveu o problema para mim, exceto que ele fornecia código Java e eu precisava de Python. Aqui está uma função Python que rola para a posição do elemento e clica nela.
Isso resolveu o problema para mim no Chrome 34.0. Não causou danos no Firefox 28.0 e IE 11; esses navegadores não estão sujeitos ao problema, mas rolar para a posição do elemento antes de clicar nele ainda não é uma coisa ruim.
fonte
Talvez não seja uma solução realmente limpa, mas funcione:
fonte
Eu estava recebendo esse bug porque testei um hover e precisava clicar no link abaixo da dica de ferramenta. A solução foi adicionar
page.find('.sp-logo').hover
antesclick_link
para tirar a dica da ferramenta.fonte
É engraçado, todo o tempo que passei olhando para as várias respostas, ninguém tentou o óbvio, o que, é claro, eu também não. Se sua página tiver o mesmo ID usado várias vezes, como a minha ((newButton ",)) e a página que você deseja não for a primeira encontrada, é provável que você obtenha esse erro. A coisa mais fácil de fazer (C #):
Observe que é FindElements, não FindElement.
E depois teste para ver quantos resultados retornaram da recuperação. Se for o segundo, você poderá usar:
Ou peça a quem reutilizou os IDs para corrigi-los.
fonte
.First(x => x.Visible)
à chamada FindElements) e clicar nele se não for nulo.Depois de testar todas as sugestões mencionadas, nada funcionou. Eu fiz esse código. Funciona, mas não é bonito
fonte
Faço uma espécie de força bruta de cliques e funciona para mim.
fonte
Se você
jQuery
carregou na página, pode executar o seguinte comando javascript:Exemplo usando o executor python:
fonte
Eu tive o mesmo problema e foi causado por um conflito de identificação entre a div e o link dentro da div. Então o driver estava clicando na div em vez do link que eu queria. Mudei o ID da div e funcionou corretamente.
Antes:
Depois de:
fonte
No Drupal ao usar o selênio :
fonte