В предыдущей статье мы рассмотрели процесс настройки тестового фреймворка. Проект можно скачать по уже известной ссылке. Сейчас речь пойдет об основных компонентах проекта.
Основные компоненты:
- Common\BasePage.cs — базовый классы для описания PageObject страниц. Он содержит вспомогательные методы поиска элементов на странице при помощи селекторов.
- Common\BaseTest.cs — базовый класс для всех автоматизированных тестов. Содержит логику запуска и остановки браузера для выполнения тестов.
- PageObjects — директория содержит описание страниц клиентского приложения. Сраница Page Object инкапсулирует в себе объявление элементов страницы и действия, которые можно выполнить на странице.
- Директория SearchPageTests — содержит кейсы для выполнения тестов (в нашем случае поиск).
Тест GoogleSearchResultTest состоит из шагов — Step(). Шаг может выполнить действие и проверить выполнение некоторого утверждения. Можно увидеть, что этот метод имеет на входе системный делегат Action:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public void Step(string message, Action action) { LogMessage(string.Format("Выполняется кейс: '{0}'", message)); try { action(); } catch (Exception) { DoScreenShotOnError(message); throw; } } |
Ниже приведен код теста:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[Test] public void Google_Should_Find_Selenium_Site() { Step("Ввод запроса 'смс автоматизация'", () => googleSearchResultPage = googlePage.EnterSearchText("selenium")); Step("Нажатие на кнопку Search", () => googleSearchResultPage.clickSearchButton()); Step("Первая ссылка должна содержать адрес sms-automation.ru", () => { var href = googleSearchResultPage.FirstLink.GetAttribute("href"); Assert.AreEqual(href, "http://www.seleniumhq.org/"); }); } |
Отчет об ошибке
Если во время теста произошла ошибка — например, не был найден какой-то элемент, то в директорию, указанную в app.config, будет сохранен скриншот страницы, название теста, шага и html страница с ошибкой. Для теста вы можете задать неправильный локатор и ждать, пока тест упадет.
Использование нескольких брайзеров
Также отличительной чертой фреймворка есть то, что в классе фабрики BrowserFactory используется несколько брайзеров. Ниже приведен метод:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
public static RemoteWebDriver GetLocalDriver(string browser) { InternetExplorerOptions internetExplorerOptions; switch (browser) { case "Firefox": var profile = new FirefoxProfile(); return new FirefoxDriver(profile); case "Chrome": return new ChromeDriver(PathToDriver); case "IE": internetExplorerOptions = new InternetExplorerOptions { IntroduceInstabilityByIgnoringProtectedModeSettings = true, EnableNativeEvents = true }; return new InternetExplorerDriver( PathToDriver, internetExplorerOptions); default: var profile1 = new FirefoxProfile(); return new FirefoxDriver(profile1); } } |