Selênio - Verifique se uma imagem é exibida na página
-
27-09-2019 - |
Pergunta
Estou criando um conjunto de testes de selênio para um aplicativo de álbum da web. Gostaria de testar se uma imagem é realmente exibida (ela contém dados de imagem válidos). É isso possível?
Solução
Eu enfrentei essa situação semelhante antes de onde o SRC da imagem é o esperado, mas a imagem não é exibida na página.
Você pode verificar se a imagem está sendo exibida ou não usando o JavaScriptTexCecutor.
Use o seguinte código - Passe o WebElement (imagem) -
Object result = ((JavascriptExecutor) driver).executeScript(
"return arguments[0].complete && "+
"typeof arguments[0].naturalWidth != \"undefined\" && "+
"arguments[0].naturalWidth > 0", image);
boolean loaded = false;
if (result instanceof Boolean) {
loaded = (Boolean) result;
System.out.println(loaded);
}
Você pode verificar se a imagem realmente carregou na página da web fazendo isso.
Outras dicas
Se você está usando Java, o selênio tem um método chamado eval
ou então. Você fornece uma sequência JavaScript e fornece o resultado como uma string. Por exemplo, você pode tentar isso (em uma linha):
var req = new XMLHttpRequest();
req.open('get', document.getElementById('imageid').src, false);
req.send(null);
req.status==200
Isso deve retornar "verdadeiro" para o status 200 ou "false" para outra coisa.
Se você estiver disposto a usar o Plano de teste Frontend para selênio lá algumas opções. Depois de ter o URL da imagem, você pode pegar este URL e inspecionar os cabeçalhos retornados. Você também pode salvar os dados em um arquivo se quiser inspecioná -los manualmente. Ou você pode escrever um validador em Java para pegar esses dados e verificar se ele realmente decodifica.
Se você estiver disposto a experimentá -lo, escreverei um script de amostra. Eu posso até fazer uma função rápida do validador de imagem, se desejar.
Use esta função de um revestimento:
Boolean isImageLoaded = (Boolean) ((JavascriptExecutor)driver).executeScript("return arguments[0].complete && typeof arguments[0].naturalWidth != \"undefined\" && arguments[0].naturalWidth > 0", imageWebElement);
Onde:
imageWebElement
= WebElement para localizar a imagem na página
isImageLoaded
= Resultar em booleano (retornar true se a imagem estiver presente, falsa se não for)
Você certamente pode verificar se a imagem aparece na fonte da página, por exemplo, usando um parâmetro XPath.
Você pode assumir que, como está na fonte da página, ele será exibido, mas eu não conheço nenhuma maneira de realmente validar isso.