WatiN -根据浏览器内的元素(例如Heading1元素)切换到浏览器窗口

本文关键字:元素 浏览器 窗口 Heading1 -根 WatiN 例如 | 更新日期: 2023-09-27 17:50:25

是否有人实现了在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",另一个窗口的heading2文本为"My Heading two"。现在我想切换到第二个弹出式浏览器窗口,其中heading heading2元素。是否可以使用Browser.AttachTo(browser.getType(), Find.By.....); ??

WatiN -根据浏览器内的元素(例如Heading1元素)切换到浏览器窗口

根据您的用例,一旦您单击链接,将打开一个新的弹出/窗口。如果您确定父窗口将有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浏览器= IE.InternetExplorers();它返回您的IE集合,并为每个,获得H2元素计数,然后尝试使用当前标题附加。我不太确定我们如何在FF中实现这一点,但一定有办法。

谢谢,Sham_