Расширения WatiN для H1 H2 H3 для формы, браузера и фрейма

Я пытаюсь написать методы расширения в 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, тогда работают браузер и форма. Когда я использую только документ, тогда работают браузер и фреймворк. Ждем ваших отзывов!


person rahoolm    schedule 22.04.2014    source источник


Ответы (1)


Кажется, я должен сделать это по-другому, расширив требуемый класс и проверив наследование. Лучше всего расширить последний производный класс и не использовать предложение where.

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

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

Вот и все!

person rahoolm    schedule 15.08.2014