我正在尝试在WatiN中为H1,H2,H3和UL编写扩展方法,所有这些元素都应该支持Browser,Frame,Form和Div。 我的方法是创建不同的.cs文件,如FormExtensions.cs,FrameExtensions.cs,并说DocumentExtensions.cs
在我的DocumentExtensions.cs中,我包含以下代码。
public static H1 H1<TDoc>(this TDoc doc, string text)
where TDoc : Document
{
ElementFactory.RegisterElementType(typeof(H1));
return doc.ElementOfType<H1>(Find.ByText(text));
}
public static H2 H2<TDoc>(this TDoc doc, string text)
where TDoc : Document
{
ElementFactory.RegisterElementType(typeof(H2));
return doc.ElementOfType<H2>(Find.ByText(text));
}
public static H3 H3<TDoc>(this TDoc doc, string text)
where TDoc : Document
{
ElementFactory.RegisterElementType(typeof(H3));
return doc.ElementOfType<H3>(Find.ByText(text));
}
我的FormExtensions.cs包括
public static H1 H1<TForm>(this TForm form, string text)
where TForm : Form
{
ElementFactory.RegisterElementType(typeof(H1));
return form.ElementOfType<H1>(Find.ByText(text));
}
public static H2 H2<TForm>(this TForm form, string text)
where TForm : Form
{
ElementFactory.RegisterElementType(typeof(H2));
return form.ElementOfType<H2>(Find.ByText(text));
}
public static H3 H3<TForm>(this TForm form, string text)
where TForm : Form
{
ElementFactory.RegisterElementType(typeof(H3));
return form.ElementOfType<H3>(Find.ByText(text));
}
上述两个类都位于相同的命名空间下。 当我尝试使用并测试上述扩展时,我会遇到歧义问题。
Console.WriteLine(browser.H1("h1 browser").Exists);
Console.WriteLine(browser.Forms.First().H1("h1 form").Exists);
Console.WriteLine(browser.Frames.First().H1("h1 frame").Exists);
支持所有Div,Form,Frame和Browser的正确方法是什么? 当我只使用DomContainer时,浏览器和表单工作。 当我只使用Document然后浏览器和框架工作。 等待您的反馈!
答案 0 :(得分:0)
似乎我应该通过扩展所需的类和检查继承来以不同的方式实现它。 最好的办法是扩展最后一个派生类,而不是使用where子句。
public static H1 H1(this Form form, string text)
public static H1 H1(this Frame frame, string text)
那就是它!