Практики объектной модели страницы
Я создаю среду тестирования для веб-сайта, используя Page Object Model с Selenium
Я думаю, что в целом, если у меня есть две страницы с точными пользовательскими элементами управления и функциями, но разными URL, я должен создать один класс родительской страницы, у которого есть два класса, наследуемых от него. Но что, если у меня две одинаковые страницы с разными локаторами для элементов управления? что ты думаешь? Считаете ли вы, что создание совершенно отдельного класса для каждой страницы будет хорошей практикой? или есть способ позволить дочерним классам переопределять локаторы? зная, что я использую PageFactory.
Вот пример
public class Header
{
[FindsBy(How = How.ClassName, Using = "logout_button")]
public IWebElement BtnLogout { get; set; }
public Header()
{
PageFactory.InitElements(Browser.Driver, this);
}
public void Logout()
{
this.BtnLogout.Click();
}
}
public class SecondHeader
{
[FindsBy(How = How.ClassName, Using = "logout")]
public IWebElement BtnLogout { get; set; }
public Header()
{
PageFactory.InitElements(Browser.Driver, this);
}
public void Logout()
{
this.BtnLogout.Click();
}
}
1 ответ
Решение
Вы можете сделать так:
public class Header
{
[FindsBy(How = How.ClassName, Using = "logout_button")]
public virtual IWebElement BtnLogout { get; set; }
public Header()
{
PageFactory.InitElements(Browser.Driver, this);
}
public void Logout()
{
this.BtnLogout.Click();
}
}
public class SecondHeader: Header
{
[FindsBy(How = How.ClassName, Using = "logout")]
public overidde IWebElement BtnLogout { get; set; }
}