WebDriver.SwitchTo()。Window()和WebDriver.SwitchTo()之间有什么区别.Frame()

时间:2018-05-17 13:48:56

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

几天前,我要求让我的 WebDriver (在这种情况下为Chromedriver)在我的浏览器上的两个标签之间切换(其中一个已经通过点击链接自动打开)。

我能够使用以下行( C#

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

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

documentation对我来说并不是很有帮助,因为我仍然难以找出每个用例。

请您告诉我框架窗口之间的区别是什么(性能,可靠性,跨平台,......)?

3 个答案:

答案 0 :(得分:2)

框架:

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

&lt; 框架&gt;标签定义了<frameset>

中的一个特定窗口(框架

通常,您必须在 DOM 中看到 iframe 。它基本上是HTML页面的一部分。

此外,如果你想要交互框架内的任何元素,你将不得不切换到框架。

如何

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

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

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

Windows:

当您点击任何链接并打开一个新标签页或打开一个新窗口时,这是Selenium中的一个窗口。

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

希望这会有所帮助。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

窗口对象

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

如果文档包含框架(标签),浏览器会为 HTML文档创建一个窗口对象,并为其包含的每个框架创建一个额外的窗口对象。< / p>

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

Driver.SwitchTo()。窗口(windowHandle)

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

Driver.SwitchTo().Window(windowHandle)

Driver.SwitchTo()。帧(frameReference)

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

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