Google webdriver - Vytvárame vlastné testovacie kroky
V nadpis tohto seriálu je veta „vytvorte si vlastného testovacieho robota“ . V tejto časti sa o to aj pokúsime. Pri pohľade na metódy interface WebDriver si iste všimneme, že webdriver dokáže navigovať na zvolenú url get(String url), vyhľadať html element findElement(By by).

Ďalej dokáže vyhľadávať html elementy pomocou id(String id), linkText(String linkText), xpath(String xpath), atď.

Po nájdení html elementu naň dokáže kliknúť click(), zobraziť text getText(), respektíve simulovať zadávanie znakov z klávesnice, pričom sa zadané znaky nastavia ako value nájdeného elementu.

Na základe týchto metód je možné vytvorenie jednoduchého testovacieho robota, ktorý sa dokáže navigovať na ľubovoľnú url, vyplniť formulár a submitnúť vyplnený formulár na server. Triedu, ktorá bude obsahovať tieto možnosti nazveme „Steps.java“. Trieda bude obsahovať nasledujúce metódy.

Implementácia triedy Steps.java.
package com.googlecode.webdriver.example;
import com.googlecode.webdriver.By;
import com.googlecode.webdriver.WebDriver;
import com.googlecode.webdriver.WebElement;
public class Steps {
WebDriver driver;
protected Steps(WebDriver sdriver) {
super();
driver = sdriver;
}
protected void clickButtonByXpath(String xpath) {
System.out.println("clicking button "+xpath);
driver.findElement(By.xpath(xpath)).click();
}
protected void setInputFieldByXpath(String xpath, String input) {
System.out.println("setting input "+xpath);
driver.findElement(By.xpath(xpath)).clear();
driver.findElement(By.xpath(xpath)).sendKeys(input);
}
protected void invoke(String url) {
System.out.println("invoking "+url);
driver.get(url);
System.out.println("Title is "+driver.getTitle());
}
protected void setSelectFieldByXpath(String xpath, int input) {
WebElement select = driver.findElement(By.xpath(xpath));
List<WebElement> allOptions = select.getChildrenOfType("option");
for (WebElement optionX : allOptions) {
System.out.println(String.format("Value :%s", optionX.getValue()));
System.out.println(String.format("Text : %s", optionX.getText()));
}
WebElement option = allOptions.get(input);
option.setSelected();
}
protected void setSelectFieldByXpath(String xpath, String input) {
int i = 0;
WebElement select = driver.findElement(By.xpath(xpath));
List<WebElement> allOptions = select.getChildrenOfType("option");
for (WebElement optionX : allOptions) {
System.out.println(String.format("Value : %s", optionX.getValue()));
System.out.println(String.format("Text : %s", optionX.getText()));
if (optionX.getText().startsWith(input)) {
break;
}
i++;
}
WebElement option = allOptions.get(i);
option.setSelected();
}
private void clickOn(WebElement webElement) {
webElement.click();
}
private WebElement link(String linkText) {
return driver.findElement(By.linkText(linkText));
}
protected void clickLink(String lnk) {
System.out.println("clicking link "+lnk);
clickOn(link(lnk));
System.out.println("Title is "+driver.getTitle());
}
}
Imaginárna testovacia trieda, testovací robot by potom mohol vyzerať takto.
package com.googlecode.webdriver.example;
import com.googlecode.webdriver.WebDriver;
import com.googlecode.webdriver.firefox.FirefoxDriver;
public class Test5 {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
try {
System.out.println("Starting Test ...");
WebDriver driver = new FirefoxDriver();
Steps step = new Steps(driver);
step.invoke("http://www.testovany-web.sk");
step.clickButtonByXpath("//div[1]/input");
step.clickButtonByXpath("//input[@name='cartype']");
step.setInputFieldByXpath("//input[@name = 'ccm']", "1500");
step.setSelectFieldByXpath("//select[@name='fname']","Roman");
step.setSelectFieldByXpath("//select[@name='formp_type']",2);
step.setInputFieldByXpath("//input[@name = 'f_dob1']", "11");
step.setInputFieldByXpath("//input[@name = 'f_dob2']", "10");
step.setInputFieldByXpath("//input[@name = 'f_dob3']", "1967");
step.clickButtonByXpath("//input[@name='formp_data2_back']");
System.out.println("Test OK");
} catch (Exception e){
e.printStackTrace();
}
}
}
Nabudúce:
- Google webdriver - Testujeme web pomocou JUnit