Друзья.
Я не так давно в автоматизации тестировании и только недавно начал изучать программирование.
Работаю над своим первым проектом (C# - NUnit - Selenium WebDriver).
Написал первые тесты и осознал, что упустил по сути самое главное - про Page Object я совсем забыл. В итоге у меня все запросы написаны в хелперах, и иногда даже в тестах (что не есть хорошо, я знаю - но сейчас не об этом).
Структура проекта сейчас выглядит следующим образом:
2017-08-16_163727.png 6,72К 15 Количество загрузок:
2017-08-16_162548.png 33,53К 10 Количество загрузок:
В тестах - тесты, в хелперах - сценарии с запросами, ну и в менеджере приложений - запуск/остановка браузера.
Пример теста:
[TestFixture] public class Login : TestBase { [Test] public void Login_LoginWithValidCredentials() { // prepare app.Auth.Logout(); // action AccountData account = new AccountData("autotests-1@replyteam.io", "reply-auto"); app.Auth.Login(account); // verification //app.Auth.WaitForElement(By.TagName("rp-dropdown-menu")); Assert.IsTrue(app.Auth.IsLoggedIn(account)); } }
И пример хелпера:
{ public class LoginHelper : HelperBase { public LoginHelper(ApplicationManager manager) : base(manager) { } public void Login(AccountData account) { if (IsLoggedIn()) { if (IsLoggedIn(account)) { return; } Logout(); } manager.Navigator.GoToLoginPage(); Type(By.Name("Email"), account.Username); Type(By.Name("Password"), account.Password); driver.FindElement(By.CssSelector("button[type=\"submit\"]")).Click(); WaitForElement(By.TagName("rp-dropdown-menu")); } public bool IsLoggedIn() { return IsElementPresent(By.TagName("rp-dropdown-menu")); } public bool IsLoggedIn(AccountData account) { return IsLoggedIn() && GetLoggedUserName() == account.Username; } public string GetLoggedUserName() { string text = driver.FindElement(By.CssSelector(".menu-title")).Text; //System.Console.Out.Write(text); return text; } public void Logout() { if (IsLoggedIn()) { driver.FindElement(By.TagName("rp-dropdown-menu")).Click(); driver.FindElement(By.LinkText("Logout")).Click(); } } } }
Гуглил много на эту тему достаточно много, но ничего подходящего, к сожалению, не нашёл. Видел пару примеров, в которых сценарии пишутся прямо в объектах страниц, без менеджера приложений, минуя хелперы, и всё...
Т.е. в целом я понимаю что такое Page Object, но не знаю что делать мне конкретно... т.е. застрял на архитектурном вопросе + его коддинге.
Подскажите, пожалуйста, как будет наиболее просто и эффективно внедрить Page Object Pattern в мой проект?
В идеале увидеть какой-то работающий пример кода, который бы мне позволил взять его структуру 'as is' и на его основании строить и наращивать свой проект.