有反正我可以改變這個方法不需要對象,但只傳遞一個參數表達式:如何簡化此方法表達式參數?
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值=(字符串)propertyInfo.GetValue(obj,null);「你想實現的方法只會傳遞字符串到這個方法,所以你會丟失對obj的引用。 – mariozski 2013-03-13 12:35:42