【发布时间】:2020-02-08 21:02:50
【问题描述】:
我的登录页面绑定中有一个步骤定义
[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();
问题是我将在我的所有功能文件(如主页功能)中使用“我单击'(。*)'按钮”,因此使用使用实例的登录页面步骤定义似乎不正确其他页面上所有按钮的登录页面类。
我正在考虑为这些类型的方法创建一个通用步骤 defs 文件,但是当我将构造函数添加到 BasePage(与其他页面对象类相同)并在通用步骤 defs 绑定中执行以下操作时:
BasePage basePage = new BasePage();
basePage.ClickTheButton(buttonName);
有更好的实现吗?...使用 BasePage 类似乎是错误的,但我看不到如何在使用页面对象时跨多个功能共享步骤定义。我正在尝试创建尽可能多的通用步骤,以便在所有功能之间共享。
【问题讨论】:
标签: c# selenium-webdriver specflow gherkin pageobjects