WatiN - 根据浏览器内的元素切换到浏览器窗口,表示Heading1元素

时间:2014-03-14 11:41:02

标签: c# watin

有没有人在WatiN中实现切换浏览器窗口的不同方法? 目前支持的方法是:

browserType

输入:System..::.Type

要附加的WatiN浏览器类型。 constraint

输入:WatiN.Core.Constraints..::.Constraint

要查找的浏览器窗口的Constraint。支持Find.ByUrl()Find.ByUri()Find.ByTitle()Find.By("hwnd", windowHandle)

我想创建一个方法,根据浏览器页面中存在的某个元素或使用应该是唯一的hwnd切换到新的弹出窗口。 理想情况下,此方法应支持浏览器IE和Firefox。

用例:

假设我打开了一个浏览器窗口,单击一个链接后,它会打开两个新的弹出/浏览器窗口。两者都有相同的标题但内容不同。 一个窗口将heading1文本作为" My Heading One"和其他人有标题2文本作为"我的标题二"。 现在我想切换到标题为heading2元素的第二个弹出浏览器窗口。 是否可以使用Browser.AttachTo(browser.getType(), Find.By.....); ??

1 个答案:

答案 0 :(得分:0)

根据您的使用案例,一旦您点击链接,就会打开一个新的弹出/窗口。如果你确定在父窗口中会有H1元素(用于验证/附加)和子窗口H2元素(验证/附加)。因此,您需要创建H1和H2元素,如下所示。

[ElementTag("h1")]
public class HeaderLevel1 : ElementContainer<HeaderLevel1>
{
    /// <summary>
    /// Initializes a new instance of the <see cref="Div"/> class.
    /// Mainly used by WatiN internally.
    /// </summary>
    /// <param name="domContainer">The DOM container.</param>
    /// <param name="htmlH1Element">The HTML h1 element.</param>
    public HeaderLevel1(DomContainer domContainer, INativeElement htmlH1Element) : base(domContainer, htmlH1Element) { }

    /// <summary>
    /// Initializes a new instance of the <see cref="Div"/> class.
    /// Mainly used by WatiN internally.
    /// </summary>
    /// <param name="domContainer">The DOM container.</param>
    /// <param name="finder">The HTML h1 element.</param>
    public HeaderLevel1(DomContainer domContainer, ElementFinder finder) : base(domContainer, finder) { }

    /// <summary>
    /// Gets the name of this Watin element.
    /// </summary>
    /// <returns></returns>
    public string GetName()
    {
        return "HeaderLevel1";
    }
}    

对于H2,您也可以这样做。对于IE,您可以使用,
IECollection browsers = IE.InternetExplorers(), 它返回IE集合,并为每个,获取H2元素计数,然后尝试使用当前标题附加。我不太确定如何在FF中实现这一点,但必须有办法。

谢谢, 深水_

相关问题