无论如何我可以将这个方法更改为不需要对象,而只需传递一个参数表达式:
protected void FillInTextFor<T>(T obj, Expression<Func<T, object>> property)
{
var memberExpression = (MemberExpression)property.Body;
var propertyInfo = (PropertyInfo)memberExpression.Member;
// read value with reflection
var value = (string)propertyInfo.GetValue(obj, null);
// use the name and value of the property
FillInText(propertyInfo.Name, value);
}
protected void FillInText(String elementId, String text)
{
VerifyElementPresent(elementId);
Driver.FindElement(By.Id(elementId)).Clear();
Driver.FindElement(By.Id(elementId)).SendKeys(text);
}
叫像
var personToCreate = new PersonBuilder().RandomFirstName().Build();
FillInTextFor(personToCreate, a => a.FirstName);
我只想说FillInTextFor(_ => personToCreate.FirstName);
或类似的话
我们正在尝试为 Selenium 测试制作辅助方法。我想传递一个对象并选择一个属性,它会自动使用属性的名称作为元素 id,并将文本作为字符串的值。