[英]What is the difference between WebDriver.SwitchTo().Window() and WebDriver.SwitchTo().Frame()
幾天前,我需要在瀏覽器的2個標簽之間切換WebDriver (在這種情況下為Chromedriver)(其中一個標簽通過單擊鏈接自動打開)。
我能夠使用以下幾行( C# )實現解決方案
var tabs = new List<String>(Driver.WindowHandles);
//Switches to the first tab
Driver.SwitchTo().Window(tabs[0]);
但是,我最近遇到了一些使用框架和警報的實現,這使我感到困惑。
該文檔對我不是很有幫助,因為我仍然很難確定每個用例。
您能否啟發我,“ 框架”和“ 窗口”在此方面有什么區別(性能,可靠性,跨平台...)?
框架:
是HTML中的標記。 但是,HTML5不支持該標記。
< frame >標記定義<frameset>
一個特定窗口( 框架 )
通常,您必須已經在DOM中看到了Iframe 。 它基本上是HTML頁面的一部分。
此外,如果要與frame內的任何元素進行交互,則必須切換到frame。
如何 :
SwitchTo().Frame(int frameIndex)
:使用索引
SwitchTo().Frame(IWebElement frameElement)
:使用其先前位於的OpenQA.Selenium.IWebElement選擇一個框架。
SwitchTo().Frame(string frameName)
:通過其名稱選擇一個框架。
Windows:
當您單擊任何鏈接並打開一個新標簽或一個新窗口本身時,這就是Selenium中的一個窗口。
方式 :您已經在帖子中提到了這一點。
希望這會有所幫助。
在Selenium中,Window可以是同一瀏覽器實例中的不同Tab或不同瀏覽器實例中的。 switch to window
的上下文是多個頁面或瀏覽器實例。
框架位於網頁內部,因此switch to frame
的上下文是一頁,而不是多個頁面或瀏覽器實例。
窗口對象代表瀏覽器中打開的窗口。
如果文檔包含框架(標簽),則瀏覽器將為HTML文檔創建一個Window對象 ,並為其中包含的每個框架創建一個其他窗口對象。
根據WebDriver W3C Editor's Draft
WebDriver命令在當前瀏覽上下文或當前頂級瀏覽上下文的上下文中發生 。
當前頂層瀏覽上下文在協議中由其關聯的窗口句柄表示 。 可以使用“ Switch To Window
命令來選擇頂級瀏覽上下文,如下所示:
Driver.SwitchTo().Window(windowHandle)
同樣,可以使用“ Switch to Frame
命令選擇特定的瀏覽上下文 。
Driver.SwitchTo().Frame(driver.FindElement(By.XPath("//iframe[contains(@src,'<src_attribute_value>')]")));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.