带有页面对象模型的Specflow中的通用步骤定义

问题描述 投票:1回答:1

我的登录页面绑定中有步骤定义

[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 ....

c# selenium-webdriver specflow gherkin pageobjects
1个回答
0
投票

您的页面模型不是真正的页面模型。它们只是使用Selenium进行处理的便捷包装,而没有提供良好的抽象层。

© www.soinside.com 2019 - 2024. All rights reserved.