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.
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?
private static final String URL = "sua url";
private final static String LOGIN = "login";
private final static String SENHA = "senhaSenha";
private static Wait wait;
private static WebDriver driver;
protected void startWebDriver() {
driver = new FirefoxDriver();
wait = new WebDriverWait(driver, 120);
}
public static void main(String[] args) {
TestaLogin p = new TestaLogin();
p.startWebDriver();
p.login(LOGIN, SENHA);
}
private void login(String inputLogin, String inputPassword) {
// 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
WebElement login = 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
WebElement password = driver.findElement(By.id("txtSenha"));
password.sendKeys(SENHA); // digita
// procura pelo link e clica nele
WebElement link = driver.findElement(By.id("botaoEntrar"));
link.click();
}
private static Function<WebDriver, WebElement> presenceOfElementLocated(final By locator) {
return new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(locator);
}
};
}
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?
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?