[英]How can I simplify this methods expression parameters?
无论如何我可以改变这个方法,不需要对象,只需传递一个参数表达式:
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,将文本作为字符串的值。
您可以像这样创建一个重载:
protected void FillInTextFor<T>(Expression<Func<T>> property)
{
var memberExpression = (MemberExpression)property.Body;
var propertyInfo = (PropertyInfo)memberExpression.Member;
var compiled = property.Compile();
var value = compiled();
FillInText(propertyInfo.Name, value as string);
}
并使用以下方式调用:
var personToCreate = new PersonBuilder().RandomFirstName().Build();
FillInTextFor(() => personToCreate.FirstName);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.