Trofimov_moi / Трофимов / Laba_7
.docxМинистерство образования, науки, молодежи и спорта Украины
Одесский национальный политехнический университет
Институт компьютерных систем
Кафедра информационных систем
Лабораторная работа № 7
По дисциплине: «Качество и надёжность»
На тему: «Разработка сценариев автоматизированного тестирования на основе Selenium»
Выполнил:
ст. гр. АИ-091
Подкошин А.С.
Проверил:
Трофимов Б.Ф.
Одесса, 2013
Цель работы:
Разработка сценариев автоматизированного тестирования на основе Selenium c помощью, либо связки Junit+Selenium (обязательно следованть патерну Page object design), либо фреймворка http://thucydides.info/ Для выполнения работы необходимо выбрать уникальный произвольный WEB ресурс (требования - наличие авторизации). Выбор ресурса должен быть предварительно согласован с преподавателем.
Далее необходимо реализовать 3 сценария (по одному на некоторое осмысленное функциональное требование, например, провести авторизацию, оставить комментарий в гостевой книге и т.п.). Для каждого сценария провести проверку на содержание определенного текста, специфичного для той или иной страницы.
Ход работы
1. Для разработки сценариев автоматизированного тестирования на основе Selenium я выбрал связку Junit+Selenium.
2. В качестве WEB ресурса для тестирования я выбрал сайт https://github.com.
3. Реализовал три сценария, связанные с тестированием авторизации и созданием репозитория.
Программный код
Класс LoginPage
package pages;
import org.junit.Before;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class LoginPage {
private String url = "https://github.com";
private final WebDriver driver;
public LoginPage(WebDriver driver) {
super();
this.driver = driver;
driver.get(url);
}
public HomePage loginWith(String username, String password) {
driver.findElement(By.cssSelector("a.button:nth-child(2)")).click();
driver.findElement(By.cssSelector("#login_field")).sendKeys(username);
driver.findElement(By.id("password")).sendKeys(password);
driver.findElement(By.name("commit")).click();
return new HomePage(driver);
}
public String getTitle() throws Exception {
return driver.getTitle();
}
}
Класс HomePage
package pages;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class HomePage {
private final WebDriver driver;
public HomePage(WebDriver driver) {
super();
this.driver = driver;
}
public String getTitle() throws Exception {
return driver.getTitle();
}
public String getPageText() {
return (driver.findElement(By.tagName("html")).getText());
}
public boolean containsSignOut() {
return((driver.findElements(By.id("logout"))).size()!=0);
}
public NewRepositoryPage newRepository() {
driver.findElement(By.cssSelector("a.minibutton")).click();
return new NewRepositoryPage(driver);
}
}
Класс NewRepositoryPage
package pages;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class NewRepositoryPage {
private String url = "https://github.com";
private final WebDriver driver;
public NewRepositoryPage(WebDriver driver) {
super();
this.driver = driver;
}
public RepositoryHomePage addRepository(String repName) {
driver.findElement(By.cssSelector("#repository_name")).sendKeys(repName);
driver.findElement(By.cssSelector("#repository_description"))
.sendKeys("Desc");
driver.findElement(By.cssSelector(".button")).click();
return new RepositoryHomePage(driver);
}
}
Класс RepositoryHomePage
package pages;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class RepositoryHomePage {
private final WebDriver driver;
public RepositoryHomePage(WebDriver driver) {
super();
this.driver = driver;
}
public boolean containsRepositoryName(String name) {
String text = driver.findElement(By.tagName("html")).getText();
return text.contains(name);
}
}
Класс GithubTests
package selenium;
import java.util.concurrent.TimeUnit;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.chrome.*;
import junitx.framework.StringAssert;
import static org.junit.Assert.*;
import pages.NewRepositoryPage;
import pages.HomePage;
import pages.LoginPage;
import pages.RepositoryHomePage;
public class GithubTests {
private final WebDriver driver = new FirefoxDriver();
public GithubTests() {
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
/*
* Тестирование авторизации с неверным логином и паролем
*/
@Ignore
public void testLogginWithWrongCredentials() throws Exception {
HomePage hPage = new LoginPage(driver).loginWith("dmitriy@mail.com","wrongpasswd");
assertEquals("Sign in · GitHub", hPage.getTitle());
StringAssert.assertContains("Incorrect username or password.", hPage.getPageText());
}
/*
* Тестирование авторизации с корректным логином и паролем
*/
@Ignore
public void testLoginWithValidCredentials() throws Exception {
HomePage hPage = new LoginPage(driver).loginWith("dmitrii-goncharenko@mail.ru","passwd");
assertEquals("GitHub", hPage.getTitle());
assertTrue(hPage.containsSignOut());
}
/*
* Тестирование создания нового репозитория
*/
@Test
public void testCreateNewRepository() {
HomePage hPage = new LoginPage(driver).loginWith("dmitrii-goncharenko@mail.ru","passwd");
NewRepositoryPage repPage = hPage.newRepository();
RepositoryHomePage repHome = repPage.addRepository("MyRepository");
assertTrue(repHome.containsRepositoryName("MyRepository"));
}
}
Выводы: в ходе выполнения данной лабораторной работы я разработал три сценария для тестирования авторизации и создания репозитория. Для реализации тестов использовал связку Junit+Selenium и следовал паттерну Page object design.