因此,在使用this教程实施Page Object Pattern
后,我有几个
源自BasePageElementMap
。
我想处理一些操作,所以我有这个课程:
public class DownloadAttachmentsHandler
{
public DownloadAttachmentsHandler(BasePageElementMap basePageElementMap)
{
Type type = basePageElementMap.GetType();
}
}
从Pages
派生的每个BasePageElementMap
都有html
个元素,这些元素位于从BasePageElementMap
派生的类中,并且来自此Page
我有Map
{1}}包含我正在使用的所有HTML
元素的对象。
public class YahooEmailPage: BasePage<YahooEmailPageElementMap, YahooEmailPageValidator>...
所以如果我这样称呼这个函数:
UploadAttachmentsHandler att = new UploadAttachmentsHandler(new YahooEmailPage().Map);
我想从我的YahooEmailPage
方法中将其转换为DownloadAttachmentsHandler
。
所以目前我有这个type
对象,如何将其加入YahooEmailPage
?
答案 0 :(得分:1)
如果我理解正确,您需要以下内容:
public class DownloadAttachmentsHandler
{
public static object Cast(object obj, Type t)
{
try
{
var param = Expression.Parameter(obj.GetType());
return Expression.Lambda(Expression.Convert(param, t), param)
.Compile().DynamicInvoke(obj);
}
catch (TargetInvocationException ex)
{
throw ex.InnerException;
}
}
public DownloadAttachmentsHandler(BasePageElementMap basePageElementMap)
{
Type type = basePageElementMap.GetType();
dynamic foo = Cast(basePageElementMap, type);
}
}
基于balage的this回答。
编辑:对于该示例,我们假设GetType()
返回类型bar
。您将不得不创建一个像这样的方法:
public static void UseDynamic(bar input)
{
// Stuff
}
然后再做
public DownloadAttachmentsHandler(BasePageElementMap basePageElementMap)
{
Type type = basePageElementMap.GetType();
dynamic foo = Cast(basePageElementMap, type);
UseDynamic(foo);
}
您可以使用重载来避免编写许多if
或开关。但是,无论采用哪种方法,都必须为每种可能的类型创建一种方法。