用于表格,浏览器和框架的H1 H2 H3的WatiN扩展

时间:2014-04-22 16:18:08

标签: c# html watin

我正在尝试在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然后浏览器和框架工作。 等待您的反馈!

1 个答案:

答案 0 :(得分:0)

似乎我应该通过扩展所需的类和检查继承来以不同的方式实现它。 最好的办法是扩展最后一个派生类,而不是使用where子句。

public static H1 H1(this Form form, string text)

public static H1 H1(this Frame frame, string text)

那就是它!