【发布时间】:2013-03-13 12:26:38
【问题描述】:
无论如何我可以将这个方法更改为不需要对象而只需传递参数表达式:
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,并将文本作为字符串的值。
【问题讨论】:
-
我不这么认为,因为你在这里需要你的对象 -> "var value = (string)propertyInfo.GetValue(obj, null);"而您想要实现的方法只会将字符串传递给此方法,因此您将缺少对 obj 的引用。
标签: c# selenium lambda functional-programming expression