Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
10.02.2016
Размер:
26.69 Кб
Скачать

Министерство образования, науки, молодежи и спорта Украины

Одесский национальный политехнический университет

Институт компьютерных систем

Кафедра информационных систем

Лабораторная работа № 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.

Соседние файлы в папке Трофимов