如何實現對iframe的自動化測試,一篇文章告訴你

簡介

在進行元素定位時,如果遇到無法找到的情況,首先需要考慮是否存在嵌套的 frame 窗口或者目標元素位於新打開的窗口中。這時,必須進行相應的 frame 切換或窗口切換操作。

frame 類似於在原始主 HTML 頁面的基礎上嵌套了一個獨立的 HTML,彼此之間相互獨立且不產生影響。

通常,當打開一個頁面時,光標默認定位在主頁面中。如果頁面由多個 frame 構成,直接定位到具體元素可能會受限。因此,需要在定位元素之前切換到目標 frame 中,以便準確查找所需的元素。

iframe 解析

如圖可以看到 iframe 的標籤。

iframe 的多種切換方式

HTML 代碼示例:

<iframe src="1.html" id="hogwarts_id" name="hogwarts_name"></iframe>

那麼通過傳入 id、name、index 以及 Selenium 的 WebElement 對象來切換 frame:

Pyhton 實現


# index:傳入整型的參數,從 0 開始,這裏的 0 就是第一個 frame
driver.switch_to.frame(0)

#id:iframe 的 id
driver.switch_to.frame("hogwarts_id")

#name: iframe 的 name
driver.switch_to.frame("hogwarts_name")

#WebElement: 傳入 `selenium.webelement` 對象
driver.switch_to.frame(driver.find_element(By.TAG_NAME,"iframe"))

Java 實現


//通過位置index選中frame,0表示第一個frame
driver.switchTo().frame(0);
//通過frame的id或name來選中frame
driver.switchTo().frame("hogwarts_id");
driver.switchTo().frame("hogwarts_name");
//WebElement: 傳入 `selenium.webelement` 對象
driver.switchTo().frame(driver.findElement(By.tagName("iframe")));

iframe 切換回默認頁面

在切換頁面之後,如果還想操作原頁面,則可以使用:

Python 版本

driver.switch_to.default_content()

Java 版本

driver.switchTo().defaultContent();

iframe 多層切換

如圖所示爲多層嵌套結構的 iframe

從最外部 iframe 切換到 iframe2 則需要層層切換,當從 iframe2 切換回 iframe1 可以使用父子切換,示例如下:

Python 實現

driver.switch_to.frame("iframe1")
driver.switch_to.frame("iframe2")

# 從 iframe2 切換到上一級 iframe1
driver.switch_to.parent_frame()
# 從 iframe1 切換到上一級 iframe,如果 iframe 已經是最上級,則保持不變
driver.switch_to.parent_frame()

Java 實現

driver.switchTo().frame("iframe1");driver.switchTo().frame("iframe2");

從 iframe2 切換回 iframe1 可以使用父子切換:


# 從iframe2切換到上一級iframe1
driver.switchTo().parent_frame()
# 從iframe1切換到上一級iframe,如果iframe已經是最上級,則保持不變
driver.switchTo().parent_frame()

這個方法是 Selenium 提供的直接從子 frame 切換到父 frame,可以使用在嵌套的 frame 框架中。

總結

在瀏覽器中,存在一種名爲 frame 的組件,通過常規的定位很難直接找到這個組件內的元素,因此需要進入到該 frame 組件裏,並切換到相應的 frame 句柄,以便準確地定位和操作 frame 裏面的元素。

獲取更多軟件測試技術資料/面試題解析,請點擊!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章