When I create the following user:
| Field | Value |
| Username | test |
| First name | John |
| Last name | Doe |
步骤定义将得到
Table
CreateInstance<T>()
中的扩展方法
TechTalk.SpecFlow.Assist
[When(@"I create the following user:")]
public void WhenICreateTheFollowingUser(Table table)
{
var user = table.CreateInstance<UserRow>();
var userForm = new AddEditUserPageObject(driver);
// Send user object to Selenium page object in order to enter
// data into form fields
userForm.FillForm(user);
}
从表映射的类将是:
public class UserRow
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Username { get; set; }
}
以及Selenium的示例页面对象:
public class AddEditUserPageObject
{
private readonly IWebDriver driver;
public AddEditUserPageObject(IWebDriver driver)
{
this.driver = driver;
}
public void FillForm(UserRow data)
{
Username.SendKeys(data.Username);
FirstName.SendKeys(data.FirstName);
LastName.SendKeys(data.LastName);
}
}
如果您想利用对象母亲来设置一些默认参数,可以使用
table.CreateInstance<T>()
方法,该方法允许您指定一个lambda表达式,该表达式用于创建UserRow的新实例,然后可以使用对象母亲:
[When(@"I create the following user:")]
public void WhenICreateTheFollowingUser(Table table)
{
var user = table.CreateInstance<UserRow>(() => objectMother.CreateUser("someExample"));
var userForm = new AddEditUserPageObject(driver);
// Send user object to Selenium page object in order to enter
// data into form fields
userForm.FillForm(user);
}
如果要参数化传递给对象母亲的值,则始终可以添加新步骤:
[When(@"I create a user named ""(.*)"":")]
public void WhenICreateTheFollowingUser(string username, Table table)
{
var user = table.CreateInstance<UserRow>(() => objectMother.CreateUser(username));
var userForm = new AddEditUserPageObject(driver);
// Send user object to Selenium page object in order to enter
// data into form fields
userForm.FillForm(user);
}
功能文件中的步骤如下:
When I create a user named "test"