具有大量控件的页面的 Specflow

问题描述

我使用 Specflow 进行测试自动化,我需要测试该用户是否可以注册

问题是注册的字段很多,30个左右。

我的脚本如下所示:

And user is adding <value1> in the TextBox1 field
And user is adding <value2> in the TextBox2 field
...
And user is adding <value3> in the TextBox3 field

Outline scenario

<value1> <value2> <value3>

这是 Specflow 中的一个方法还是我应该将所有内容压缩成这样:

And the user registers by filling in all the fields

解决方法

避免使用用户界面术语来表述您的步骤。而是专注于注册用户的业务流程。对于大型表格,我发现垂直数据表在一个步骤中非常清晰和简洁。您没有提供太多关于用户注册过程的信息,所以我会补上一些内容,也许您可​​以推断出您的具体应用。

When the user registers with the following information:
    | Field      | Value |
    | First Name | ...   |
    | Last Name  | ...   |
    | Username   | ...   |
    | Address    | ...   |
    | City       | ...   |
    | State      | ...   |

填写大表单的复杂性在步骤定义中得到处理,可能还有一个知道如何与注册页面交互的“页面模型”类。使用 Table.CreateInstance<T> 扩展方法将 table 参数映射到 C# 中的强类型对象。

[When(@"the user registers with the following information:")]
public void WhenTheUserRegistersWithTheFollowingInformation(Table table)
{
    var data = table.CreateInstance<RegisterUserDataRow>();
    var registrationPage = new RegistrationPage(driver); // pass Selenium driver object

    registrationPage.RegisterNewUser(username: data.Username,firstName: data.FirstName,lastName: data.LastName,address: data.Address,city: data.City,state: data.State);
}

还有page model class

public class RegistrationPage
{
    public void RegisterNewUser(string username,string firstName,string lastName,string address,string city,string state)
    {
        UsernameField.SendKeys(username);
        FirstNameField.SendKeys(firstName);
        ...
        RegisterButton.Click();
    }
}