Vou compartilhar uma solução bem simples que descobri para tratar Modal Panels com o Selenium. Na verdade a solução é bem fácil mas como eu quebrei a cabeça com até chegar nesse ponto, acho interessante repassar pois outros podem utilizar esse mesmo tempo para descobrir e compartilhar outras soluções. Descobri conversando com outros profissionais da área tais como Elias Nogueira e uns colegas da Índia e Singapura, através de fóruns e listas de discussão sobre Selenium e Java e outros.
Para este caso, é importante levar em consideração três etapas importantes:
- O próprio Selenium IDE já gera essa linha de código, mas é interessante entender o motivo pelo qual ele insere o mesmo:
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
Esse trecho de código é utilizado para o Selenium "esperar" o browser durante 20 segundos (ou quantos segundos o usuário desejar) enquanto o elemento desejado não aparece na tela. Então, só depois desses 20 segundos o elemento ficaria disponível.
- Pode-se mapear o Modal Panel e utilizá-lo como referência para procurar o objeto daquela tela, como por exemplo:
WebElement modalPanel = driver.findElement(By.id("idDoElemento"));
WebElement dsArquivo = modalPanel.findElement(By.xpath("xpathDoElemento"));
- Ou, caso a solução acima não atenda, sugiro acessar diretamente a URL (mapeando esta através de um Firebug da vida) e acessar o arquivo diretamente. Como por exemplo:
// Preencher URL
driver.get("http://URL.com.br/sistema");
// Mapear campos da tela
WebElement login = driver.findElement(By.id("username"));
WebElement password = driver.findElement(By.id("password"));
WebElement submit = driver.findElement(By.cssSelector("input.formSubmit"));
// Preencher usuário//senha e clicar em Enter
login.sendKeys("teste");
password.sendKeys("teste");
submit.click();
// Navega até a tela Cria Minuta de Documento
driver.findElement(By.linkText("linkDaTela")).click();
driver.findElement(By.xpath("xPathDoLink1")).click();
driver.findElement(By.xpath("xPathDoLink2")).click();
// Tela do modal panel
// Acessar diretamente a URL do modal panel
driver.get("http://URL.com.br/sistema/modalpanel&blablabla?=usuario=testeblabla");
WebElement campo1 = driver.findElement(By.xpath("xpathDoCampo1"));
String textoTeste = "teste123";
campo1.sendKeys(textoTeste);
Espero ter ajudado!
Como popular a base de dados de maneira rápida e fácil?
20 horas atrás


2 comentários:
Muito bom! Obrigada por compartilhar essa solução! Com certeza vai ajudar muitos testadores!
Obrigado Maira!
Alguns me perguntaram em que momento inserir o código no script:
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
Idealmente depois que instanciar o driver, por exemplo:
WebDriver driver = new FirefoxDriver();
Sendo assim, isso fará com que esse comando seja válido para todas as ações do driver. Ou seja, para o script inteiro.
Postar um comentário