Quando vou testar a inserção de um novo usuário , os campos obrigatórios nome e sobrenome só aceitam letras , porém estou levando o teste a erros e estou colocando números
Assim que coloco números , a borda do campo que estava vermelha fica azul , indicando que não vou conseguir inserir este usuário
O campo responsável pela borda colorida é esse border-bottom-color , o que poderia fazer para testar essa mudança de cor ?
Geralmente problemas com Selenium x Ajax são relacionados a esperar o Ajax retornar. Você falou em Ajax no título mas não colocou as partes de códigos relacionadas a ele.
Mas no caso como você falou que problemas com Ajax são relacionados a esperar o Ajax retornar , esse problema poderia ser resolvido com o comando waitFor() ?
[quote=jeh_dias]Olá , o código Ajax não é minha autoria .
Mas no caso como você falou que problemas com Ajax são relacionados a esperar o Ajax retornar , esse problema poderia ser resolvido com o comando waitFor() ?
Obrigada .[/quote]
waitFor() logicamente vai funcionar no tempo cravado que você colocar. Mas se quiser saber exatamente quando o Ajax acabou de trabalhar, você testa “jQuery.active == 0” via jquery, fazendo um loop com algum sleep pequeno até que a condição jquery seja satisfeita.
A questão é , quero resolver conflitos de validação de campos , através das cores da borda do campo , pois elas mudam quando o campo contém caracteres inválidos .
Eu não vejo como esses comandos que esperam um tempo antes da validação ou saber quando o Ajax acabou de trabalhar , poderiam me ajudar . Ou vejo quando ele acaba de trabalhar e ai faço o teste que preciso ?
waitForCondition é um método que ja faz mastigado o que falei. Vai ficar testando até conseguir, só tem que passar um timeout pra a coisa não ficar infinita.
O comando waitForCondition() necessita de um script e um timeout . Esse script é o código em JavaScript que tem o Ajax , certo ?
Não entendi como construir esse script no meu caso . Colocar o script em JavaScript , mas vou ter true e false . Como pegar a transformação ?
Pensando por outro lado , se conseguir colocar o código da transformação , e o retorno for true , quer dizer que a transformação ocorreu e eu consegui o que queria . Mas a questão é o código dessa transformação .
Segue esses passos. O código abaixo é em C# e meramente ilustrativo pra voce entender a lógica e implementar o seu em Java. As classes e métodos do selenium webdriver são as mesmas usadas para Java , C#, etc. Só mesmo diferença de padrão que no java os nomes dos métodos devem começar em letra minúscula.
//1 - faz ação real do sistema que faz requisição ajax, exemplo supondo ter um botao pra Salvar:
webDriver.FindElement(By.Id("botaoSalvar")).Click();
//2 - esperar o ajax terminar, podendo fazer algo do tipo abaixo ou usar o método waitForCondition que passei no outro post.
//criar um método genérico pra isso, caso for usar...
int i = 0;
//Thread.Sleep(100); //dependendo da fase da lua pode precisar aguardar algum tempo antes
while (i <= 100)
{
if ((bool)(webDriver as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0"))
{
break;
}
Thread.Sleep(200);
i++;
}
//3 - fazer a verificação desejada do teste. Por exemplo verificar se encontrou o elemento que tem a borda azul (supondo nome da class do estilo ".bordaAzul"):
IWebElement elemento = null;
try
{
elemento = webDriver.FindElement(By.ClassName("bordaAzul"));
}
catch (NoSuchElementException)
{
}
catch (InvalidSelectorException)
{
}
bool passouNoTeste = elemento != null;