Preciso testar alguns cenários no sistema, pesquisei a respeito e vi que o selenium é uma boa solução, instalei o plugin Selenium IDE e comecei a ver o basicão de como se trabalha com ele. Só que a medida que fui pensando no desenrolar deste primeiro teste, comecei a desconfiar que o plugin sozinho não resolve esse primeiro cenário.
Pontos que preciso testar neste primeiro cenário:
preciso cadastrar sempre uma nova pessoa, ou seja, o nome tem que ser diferente a cada nova execução do teste.
O sistema realiza marcações e preciso que cada vez que o teste seja executado, sempre marque no primeiro horário disponível e não no mesmo horário sempre, pois esse horário já estará ocupado pela marcação anterior.
preciso fazer testes com assertivas em ações que funcionam através de ajax.
É possível fazer essas coisas com o Selenium? Já li algo a respeito dizendo que é possível programar os testes com diferentes linguagens, mas ainda não entendi exatamente como começar.
Preciso instalar algo? É possível fazer isso programando sem criar classes? Apenas com scripts?
O sistema foi desenvolvido em Java.
Se alguém puder me dar uma idéia de como começar, ferramentas que devo utilizar e a estrutura inicial que devo criar.
Antes de eu escrever um punhado de coisas, como é esse sistema? Web? Desk?
O selenium simula um robô digitando na tela, movendo ponteiros do mouse e tudo mais. Se quiser te passo um fonte simples, acessando uma página de login/senha.
I
igortsouza
jaboot
Obrigado por tentar ajudar. O sistema é Web.
Deixa eu resumir em que estágio me encontro com relação ao conhecimento do Selenium.
Instalei o plugin Selenium IDE no firefox, já gravei uma pequena navegada no sistema e reproduzi a gravação.
A partir do momento que comecei a pensar melhor no teste, vi que não seria possível testá-lo apenas gravando.
Preciso de dados novos em alguns campos a cada vez que o teste for executado, tem ajax mudando partes da tela e eu preciso testar se a modificação foi realizada, eu preciso que o teste sempre faça uma marcação na hora que estiver disponível e nunca na mesma, ou seja, não pode ser totalmente estático.
Não sei se é possível fazer exatamente o que preciso e caso seja, não seio que preciso instalar e como dar o passo inicial sacou?
T
tveronezi
Se vc quer testes de integração, use Selenium e apenas ignore o resto dessa mensagem.
Fala tveronezi, obrigado por tentar ajudar.
Os testes que preciso fazer são de integração.
J
jaboot
Relax man. O lance é o seguinte, cria uma classe nova e roda ela como Java Application.
Procura os WebElement(s) pelo id do html. Até dá pra achar um botão ou um combo pelo nome ou xpath, mas o id é certeza de encontrar.
importorg.openqa.selenium.By;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.FirefoxDriver;importorg.openqa.selenium.support.ui.Wait;importorg.openqa.selenium.support.ui.WebDriverWait;importcom.google.common.base.Function;publicclassTestaLogin{privatestaticfinalStringURL="sua url";privatefinalstaticStringLOGIN="login";privatefinalstaticStringSENHA="senhaSenha";privatestaticWaitwait;privatestaticWebDriverdriver;protectedvoidstartWebDriver(){driver=newFirefoxDriver();wait=newWebDriverWait(driver,120);}publicstaticvoidmain(String[]args){TestaLoginp=newTestaLogin();p.startWebDriver();p.login(LOGIN,SENHA);}privatevoidlogin(StringinputLogin,StringinputPassword){// vai até a URL que você deseja driver.navigate().to(URL);// cria um WebElement baseado no input que você tem na tela // OBS: se fosse um combo, seria um Select ao invés de WebElement WebElementlogin=driver.findElement(By.id("txtLogin"));login.sendKeys(LOGIN);// digita // você pode procurar (By) por id, nome, xpath... // depois você se vira. Dá pra fazer bastante coisa WebElementpassword=driver.findElement(By.id("txtSenha"));password.sendKeys(SENHA);// digita // procura pelo link e clica nele WebElementlink=driver.findElement(By.id("botaoEntrar"));link.click();}privatestaticFunction<WebDriver,WebElement>presenceOfElementLocated(finalBylocator){returnnewFunction<WebDriver,WebElement>(){publicWebElementapply(WebDriverdriver){returndriver.findElement(locator);}};}}
I
igortsouza
Entendi seu código jaboot, a parte de login e senha por exemplo não é complicado, pois eu vou testar a princípio sempre com o mesmo usário e senha e vou estar preenchendo sempre os mesmos campos.
Após o login, precisarei preencher um campo sempre com um nome diferente. É possível executar o teste uma vez com um nome e depois de algumas horas executá-lo novamente com outro nome, mas sem precisar mudar o nome no script antes de rodar de novo? Algo tipo um arquivo que armazenaria diversos nomes diferentes ou então de outra forma?
O cenário também lida com marcações, se no primeiro teste a marcação for feita as 8:00, no segundo ela terá que ser realizada as 8:30, portanto nesse caso não tem como utilizar esse campo pelo Id e nem pelo name, pois ele sempre vai mudar na próxima execução de teste. Não pode ser um código estático. Tem como programar isso dinamicamênte, algo como uma verificação se o horário está ocupado e usar o primeiro disponível?
J
jaboot
Dá sim, o selenium pode chamar outras classes e outros métodos normalmente.
Daí você ajusta a sua lógica com o que você precisa.
I
igortsouza
jaboot muito obrigado pela ajuda, aos poucos eu to melhorando nisso.
Você sabe como faço um seletor com o WebDriver que pegue o elemento que é irmão de outro elemento? Ou seja, que estejam lado a lado.
Por exemplo, quero pegar um td pelo class mas quero pegar pelo tr de fora e esse usa o id. Tem como fazer isso?