簡體   English   中英

WebDriver.SwitchTo()。Window()和WebDriver.SwitchTo()。Frame()有什么區別

[英]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命令在當前瀏覽上下文當前頂級瀏覽上下文的上下文中發生

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>')]")));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM