【问题标题】:What is the difference between WebDriver.SwitchTo().Window() and WebDriver.SwitchTo().Frame()WebDriver.SwitchTo().Window() 和 WebDriver.SwitchTo().Frame() 有什么区别
【发布时间】:2018-05-17 13:48:56
【问题描述】:

几天前,我需要让我的 WebDriver(在这种情况下为 Chromedriver)在浏览器上的 2 个选项卡之间切换(其中一个已通过单击链接自动打开)。

我能够使用以下行 (C#)

实施解决方案
var tabs = new List<String>(Driver.WindowHandles);
//Switches to the first tab
Driver.SwitchTo().Window(tabs[0]);

但是,我最近遇到了一些使用框架和警报的实现,这让我很困惑。

documentation 对我帮助不大,因为我仍然无法找出每个用例。

您能否告诉我 FrameWindow 之间的区别是什么(性能、可靠性、跨平台...)?

【问题讨论】:

    标签: c# selenium selenium-webdriver webdriver selenium-chromedriver


    【解决方案1】:

    框架:

    HTML 中的标签。但是 HTML5 不支持该标签。

    frame> 标签在&lt;frameset&gt; 中定义了一个特定的窗口(frame

    通常,您一定在 DOM 中见过 Iframe。它基本上是 HTML 页面的一部分。

    此外,如果您想与框架内的任何元素进行交互,则必须切换到框架。

    如何

    SwitchTo().Frame(int frameIndex):使用索引

    SwitchTo().Frame(IWebElement frameElement):使用之前定位的 OpenQA.Selenium.IWebElement 选择一个框架。

    SwitchTo().Frame(string frameName) : 按名称选择框架。

    窗户:

    当您单击任何链接并打开一个新选项卡或一个新窗口本身打开时,这就是 Selenium 中的一个窗口。

    如何:您已经在帖子中提到了这一点。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      在 Selenium 中,Window 可以是同一浏览器实例或不同浏览器实例中的不同 Tab。 switch to window 的上下文是多个页面或浏览器实例。

      网页内的框架,因此switch to frame 的上下文是一个页面,而不是多个页面或浏览器实例。

      【讨论】:

        【解决方案3】:

        窗口对象

        Window Object 代表浏览器中打开的窗口。

        如果文档包含框架(标签),浏览器会为 HTML 文档创建一个 Window 对象,并为它包含的每个框架创建一个额外的 window 对象。

        根据WebDriver W3C Editor's Draft WebDriver 命令发生在current browsing contextcurrent top-level browsing context 的上下文中。

        Driver.SwitchTo().Window(windowHandle)

        当前顶级浏览上下文在协议中由其关联的窗口句柄表示。可以使用Switch To Window 命令选择顶级浏览上下文,如下所示:

        Driver.SwitchTo().Window(windowHandle)
        

        Driver.SwitchTo().Frame(frameReference)

        同样,可以使用Switch to Frame 命令选择特定的浏览上下文

        Driver.SwitchTo().Frame(driver.FindElement(By.XPath("//iframe[contains(@src,'<src_attribute_value>')]")));
        

        【讨论】:

          猜你喜欢
          • 2010-11-07
          • 1970-01-01
          • 2013-01-08
          • 2011-07-08
          • 1970-01-01
          • 1970-01-01
          • 2011-03-17
          • 1970-01-01
          • 2012-01-13
          相关资源
          最近更新 更多