У меня есть определение шага в привязках моей страницы входа в систему
[When(@"I click the '(.*)' button")]
public void IClickTheButton(string buttonName)
{
LoginPage loginPage = new LoginPage();
loginPage.ClickTheButton(buttonName);
}
Объекты «Моя страница» настроены с помощью метода ClickTheButton в BasePage:
public class LoginPage : BasePage
{
public LoginPage(IWebDriver _driver)
{
driver = _driver;
}
// some methods
}
public class HomePage : BasePage
{
public HomePage(IWebDriver _driver)
{
driver = _driver;
}
// some methods
}
public class BasePage
{
//no constructor atm
public void ClickTheButton(string buttonName)
{
driver.GetFirstButtonWithTextContaining(buttonName).Click();
}
// more methods
}
Все кнопки в приложении отформатированы одинаково, поэтому метод GetFirstButtonWithTextConisting будет щелкать их все, используя
driver.FindElements(By.TagName("button")).Where(x => x.Text == buttonName).First();
Проблема в том, что я буду использовать «Я нажимаю» (. *) 'button' во всех моих файлах функций, таких как функция HomePage, поэтому кажется неправильным использовать определение шага страницы входа в систему, которое использует экземпляр класса страницы входа для всех кнопок на других страницах.
Я думал о создании файла общего шага defs для методов этого типа, но когда я добавляю конструктор в BasePage (аналогично другим классам объектов страницы) и делаю следующее в привязке общего шага defs:
BasePage basePage = new BasePage();
basePage.ClickTheButton(buttonName);
Есть ли лучшая реализация? ... просто кажется неправильным использовать класс BasePage, но я не вижу, как разделить определение шага между несколькими функциями при использовании объектов страницы. Я пытаюсь создать как можно больше общих шагов для всех функций.