几天前,我要求让我的 WebDriver (在这种情况下为Chromedriver)在我的浏览器上的两个标签之间切换(其中一个已经通过点击链接自动打开)。
我能够使用以下行( C#)
来实施解决方案var tabs = new List<String>(Driver.WindowHandles);
//Switches to the first tab
Driver.SwitchTo().Window(tabs[0]);
但是,我最近遇到了一些使用框架和警报的实现,这让我很困惑。
documentation对我来说并不是很有帮助,因为我仍然难以找出每个用例。
请您告诉我框架和窗口之间的区别是什么(性能,可靠性,跨平台,......)?
答案 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 context或current top-level browsing context的上下文中。
当前的顶级浏览上下文在协议中由关联的窗口句柄表示。可以使用Switch To Window
命令选择顶级浏览上下文,如下所示:
Driver.SwitchTo().Window(windowHandle)
同样,可以使用Switch to Frame
命令选择特定的浏览上下文。
Driver.SwitchTo().Frame(driver.FindElement(By.XPath("//iframe[contains(@src,'<src_attribute_value>')]")));