На нашей новой онлайн Конференции Тестировщиков КОТэ будут представлены три мастер-класса: для автоматизаторов, для тест-менеджеров и для всех.
Чем мастер-класс отличается от обычного доклада?
Вовлеченностью слушателей. Перед началом конференции все участники получат «домашние задания» и инструкции по их выполнению. Мастер-класс будет строиться на основе выполненных заданий: будет сделан разбор типичных ошибок, показаны наиболее оригинальные и удачные решения. Вы сможете сравнить свой подход к решению задач с альтернативными вариантами, увидеть свои слабые места или порадоваться тому, что вы круче всех.
Я не так давно в автоматизации тестировании и только недавно начал изучать программирование.
Работаю над своим первым проектом (C# - NUnit - Selenium WebDriver).
Написал первые тесты и осознал, что упустил по сути самое главное - про Page Object я совсем забыл. В итоге у меня все запросы написаны в хелперах, и иногда даже в тестах (что не есть хорошо, я знаю - но сейчас не об этом).
Структура проекта сейчас выглядит следующим образом:
В тестах - тесты, в хелперах - сценарии с запросами, ну и в менеджере приложений - запуск/остановка браузера.
Пример теста:
[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' и на его основании строить и наращивать свой проект.
Народная мудрость гласит: кто не рискует, тот не пьет шампанского. Действительно, опасность провала подстерегает нас в любой деятельности – неважно, тестируем ли мы ПО или выпекаем печеньки на продажу. В этой статье мы рассмотрим проектные риски с точки зрения тестирования. Для начала определим разницу между рисками и проблемами проекта. Представим себе ситуацию: мы попали под дождь, зонтика у нас нет, нам холодно и мокро, нужно срочно что-то решать. Так вот, это уже проблема, с которой мы столкнулись из-за того, что утром проигнорировали риск выпадения осадков и вышли из дома, не взглянув на прогноз погоды. Попробуем понять, как можно подготовиться к неожиданностям заранее и выйти сухим из воды.