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