我的登录页面绑定中有步骤定义
[When(@"I click the '(.*)' button")]
public void IClickTheButton(string buttonName)
{
LoginPage loginPage = new LoginPage();
loginPage.ClickTheButton(buttonName);
}
我的页面对象是通过BasePage中的ClickTheButton方法设置的:
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
}
应用程序中的所有按钮的格式都相同,因此GetFirstButtonWithTextContaining方法将使用]单击所有按钮>
driver.FindElements(By.TagName("button")).Where(x => x.Text == buttonName).First();
问题是我将在所有功能文件(例如Homepage功能)中使用'我单击'(。*)'按钮',因此,使用利用的实例的登录页面步骤定义似乎不正确。其他页面上所有按钮的登录页面类。
[我曾考虑为这些类型的方法创建一个通用的步骤defs文件,但是当我向BasePage添加构造函数(与其他页面对象类相同)并在通用的步骤defs绑定中执行以下操作:
BasePage basePage = new BasePage(); basePage.ClickTheButton(buttonName);
是否有更好的实现?...使用BasePage类似乎只是错误的,但是当使用页面对象时,我看不到如何在多个功能之间共享步骤定义。我正在尝试创建尽可能多的通用步骤,以在所有功能之间共享。
我在登录页面绑定中有一个步骤定义[When(@“我单击'(。*)'按钮”)] public void IClickTheButton(string buttonName){LoginPage loginPage = new LoginPage(); loginPage ....
您的页面模型不是真正的页面模型。它们只是使用Selenium进行处理的便捷包装,而没有提供良好的抽象层。