Existe uma maneira de testar se um elemento está presente? Qualquer método findElement terminaria em uma exceção, mas não é isso que eu quero, porque pode ser que um elemento não esteja presente e que esteja bem, que não seja uma falha no teste, portanto uma exceção não pode ser a solução.
Eu encontrei este post: Selenium c # Webdriver: Aguarde até que o elemento esteja presente Mas isso é para C # e eu não sou muito bom nisso. Alguém pode traduzir o código em Java? Desculpe pessoal, tentei no Eclipse, mas não entendi direito no código Java.
Este é o código:
public static class WebDriverExtensions{
public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds){
if (timeoutInSeconds > 0){
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
return wait.Until(drv => drv.FindElement(by));
}
return driver.FindElement(by);
}
}
java
selenium
selenium-webdriver
testador
fonte
fonte
Respostas:
Use em
findElements
vez defindElement
.findElements
retornará uma lista vazia se nenhum elemento correspondente for encontrado em vez de uma exceção.Para verificar se um elemento está presente, você pode tentar isso
Isso retornará true se pelo menos um elemento for encontrado e false se ele não existir.
A documentação oficial recomenda este método:
fonte
Que tal um método privado que simplesmente procura o elemento e determina se ele está presente assim:
Isso seria bastante fácil e faz o trabalho.
Edit: você pode ir além e usar um
By elementLocator
parâmetro as, eliminando problemas se desejar encontrar o elemento por algo diferente de id.fonte
Eu descobri que isso funciona para Java:
fonte
presenceOfElementLocated
emitirá uma exceção se o elemento não for encontrado em nenhuma tentativa específica. Para evitar isso, adicione umawait.ignoring(NoSuchElementException.class);
declaração entre a primeira e a segunda linha.fonte
Eu tive o mesmo problema. Para mim, dependendo do nível de permissão do usuário, alguns links, botões e outros elementos não serão exibidos na página. Parte da minha suíte estava testando que os elementos que DEVEM estar faltando estão faltando. Passei horas tentando descobrir isso. Finalmente encontrei a solução perfeita.
O que isso faz é dizer ao navegador para procurar todos e quaisquer elementos com base especificados. Se resultar
0
, significa que nenhum elemento baseado na especificação foi encontrado. Então eu tenho o código executar uma instrução if para que eu saiba que não foi encontrado.Como está
C#
, então as traduções precisariam ser feitas paraJava
. Mas não deve ser muito difícil.Há também outro caminho que você pode seguir, dependendo do que você precisa para o seu teste.
O seguinte snippet está verificando se existe um elemento muito específico na página. Dependendo da existência do elemento, tenho o teste para executar um if else.
Se o elemento existir e for exibido na página,
console.write
informe-me e seguir em frente. Se o elemento em questão existir, não posso executar o teste necessário, que é o principal motivo por trás da necessidade de configurá-lo.Se o elemento Não existir e não for exibido na página. Eu tenho o else no if else executar o teste.
Eu sei que estou um pouco atrasado na resposta ao OP. Espero que isso ajude alguém!
fonte
Tente isto: chame este método e passe 3 argumentos:
Exemplo: waitForElementPresent (driver, By.id ("id"), 10);
fonte
Você pode executar o código mais rapidamente, reduzindo o tempo limite do selênio antes de sua instrução try catch.
Eu uso o código a seguir para verificar se um elemento está presente.
fonte
Escreva a seguinte função / methos usando Java:
Chame o método com o parâmetro apropriado durante a asserção.
fonte
se você estiver usando o rspec-Webdriver em ruby, poderá usar este script assumindo que um elemento realmente não deve estar presente e que seja um teste aprovado.
Primeiro, escreva esse método primeiro no seu arquivo RB de classe
Em seguida, no seu arquivo de especificação, chame esse método.
Se o elemento NÃO estiver presente, sua especificação será aprovada, mas se o elemento estiver presente, ocorrerá um erro, o teste falhou.
fonte
Isso funciona para mim:
fonte
fonte
Pessoalmente, sempre busco uma mistura das respostas acima e crio um método Utility estático reutilizável que usa a
size() > 0
sugestão:Isso é puro, reutilizável, sustentável ... todas essas coisas boas ;-)
fonte
Para encontrar um elemento em particular presente ou não, precisamos usar o método findElements () em vez de findElement () ..
isso é trabalhado para mim .. me sugerir se eu estiver errado ..
fonte
Isso deve servir:
fonte
Dando meu trecho de código. Portanto, o método abaixo verifica se existe um elemento aleatório da Web no botão ' Criar novo aplicativo ' em uma página ou não. Observe que eu usei o período de espera como 0 segundos.
fonte
Eu usaria algo como (com Scala [o código no antigo Java "bom" 8 pode ser semelhante a este]):
Então,
fonte
A maneira mais simples que encontrei em Java é:
fonte
Você pode tentar a espera implícita:
Ou você pode tentar esperar explicitamente um:
Explícito irá verificar se o elemento está presente antes de alguma ação. A espera implícita pode ser chamada em todos os lugares do código. Por exemplo, depois de algumas ações AJAX.
Mais você pode encontrar na página SeleniumHQ
fonte