Estou usando a API Selenium 2 Java com FirefoxDriver. Quando eu preencho um formulário, caixas de seleção são adicionadas à página, dependendo das entradas de formulários.
Eu gostaria de simular um clique nessas caixas de seleção usando Selenium. Os elementos são visíveis e podem ser usados em um navegador normal, mas o selênio afirma que os elementos não são visíveis.
"Element is not currently visible and so may not be interacted with"
Posso forçar o selênio a ignorar o estado não visível dos elementos? Como posso forçar o Selênio a interagir com o elemento não visível?
java
selenium-webdriver
Djondal
fonte
fonte
Respostas:
O Selenium determina que um elemento é visível ou não pelos seguintes critérios (use um inspetor DOM para determinar o que css se aplica ao seu elemento, certifique-se de olhar para o estilo calculado):
Seu elemento corresponde a um desses critérios. Se você não tem a capacidade de alterar o estilo do elemento, aqui está como você pode fazer isso de maneira forçada com javascript (assumindo WebDriver já que você disse Selenium2 API):
Mas isso não disparará um evento javascript, se você depender do evento de mudança para essa entrada, terá que dispará-lo também (muitas maneiras de fazer isso, mais fácil usar qualquer biblioteca javascript carregada nessa página).
A fonte para a verificação de visibilidade -
https://github.com/SeleniumHQ/selenium/blob/master/javascript/atoms/dom.js#L577
A especificação WebDriver que define isso -
https://dvcs.w3.org/hg/webdriver/raw-file/tip/webdriver-spec.html#widl-WebElement-isDisplayed-boolean
fonte
Às vezes, isso significa que há vários elementos em uma página com a mesma propriedade que você está tentando pesquisar e que você está "falando com a pessoa errada".
Se o seu elemento não puder ser identificado exclusivamente por: id ou: name (ou: class), pode ser complicado.
Às vezes, pesquisar o elemento pelo: xpath pode ajudar e, em alguns casos, nem isso é prático.
Nesses casos, pode ser necessário obter todos os elementos que correspondem aos seus critérios e fazer referência ao correto pelo índice. Está sujo, mas funciona.
Estou usando Selenium / Watir do aplicativo Ruby on Rails, então, no meu caso, o exemplo seria:
Espero que isto ajude.
fonte
Eu tive um problema semelhante, mas estava relacionado ao elemento não ser visível na janela de visualização. Eu fiz uma captura de tela e percebi que a janela do navegador era muito estreita e o elemento não podia ser visto. Eu fiz um desses e funcionou:
Veja: WebDriver.maximize_window ()
fonte
Ou você pode usar a classe de ação Selenium para simular a interação do usuário - por exemplo
fonte
Há também outro caso em que o elemento visível será reconhecido como não visível:
Para verificar se o elemento com o qual você não deseja interagir foi transformado em CSS, no CHROME faça o seguinte:
fonte
A invisibilidade também pode ser devido ao momento em que o elemento deve aparecer lentamente. Forçar o navegador a esperar um pouco pode ajudar nesse caso.
Veja, por exemplo, a questão em deixar o WebDriver esperar até que um elemento esteja presente .
fonte
Tive o mesmo problema com o selênio 2 no internet explorer 9, mas minha correção é realmente estranha. Não consegui clicar nas entradas dentro do meu formulário -> repetições de selênio, elas não estão visíveis.
Ocorreu quando minha forma tinha sombras curvas -> http://www.paulund.co.uk/creating-different-css3-box-shadows-effects : no concreto "Efeito nº 2"
Não tenho ideia, por que e como essa solução de pseudoelemento interrompeu os testes de selênio, mas funciona para mim.
fonte
Você não pode forçar o acesso / alteração do elemento ao qual o usuário normalmente não tem acesso, pois o Selenium foi projetado para imitar a interação do usuário.
Se esse erro acontecer, verifique se:
maximize()
em node.js ,maximize_window()
em Python),executeScript()
em node.js ,execute_script()
em Python).fonte
Acabei de resolver esse erro ao usar capivara no projeto ror adicionando:
a
features/support/env.rb
.fonte
Acabei de resolver esse erro esperando a propriedade de exibição do elemento
fonte
Eu entro na exceção ElementNotVisibleException usando selenium para testes funcionais em um site django com glifos de bootstrap como links em modelos como:
Durante meus testes funcionais, o estilo de bootstrap não é carregado, então tentar clicar em tais links levantará ElementNotVisibleException. Consigo torná-los clicáveis apenas adicionando um espaço na tag, assim:
fonte
Existem muitas respostas boas nesta página.
Ambos são discutidos em vários detalhes acima. A resposta que não vi foi ScrollToElement. Parece que você está processando uma lista de elementos, enquanto processa você está criando mais elementos, caixas de seleção. Isso pode fazer com que os elementos da sua lista saiam da página visível. Às vezes, você pode ver o elemento a olho nu, mas simplesmente não consegue clicar nele. Ao processar listas, às vezes é necessário interromper a rolagem.
Como eu encontrei isso, criei um PageScroll.java e coloquei meus scripts de rolagem lá. Aqui estão alguns dos métodos desta classe:
veja Scroll Element into View with Selenium para mais exemplos
fonte
A resposta aceita funcionou para mim. Abaixo está um código para encontrar o elemento pai que está fazendo o Selenium pensar que não está visível.
fonte
Para adicionar meu grão de areia aqui: se um elemento residir atrás de um div fixo, ele será considerado não visível e você não poderá clicar nele; isso aconteceu comigo recentemente e resolvi executando um script como recomendado acima, que faz:
fonte