frame 與新窗口切換操作【selenium 】

🧭 一、切換到 iframe 內部進行操作

在瀏覽器自動化測試中,iframe 是一個特別的存在。它相當于在當前頁面中嵌入了另一個獨立的 HTML 頁面。

當我們試圖直接訪問 iframe 中的元素時,往往會發現定位不到,比如:

elements = wd.find_elements(By.CLASS_NAME, 'plant')

雖然語法沒錯,但程序返回的卻是空的,這是因為目標元素不在當前 DOM 中,而是在 iframe 中。

? 正確做法:切換上下文

在進行任何元素定位前,我們必須先切換到 iframe 中:

wd.switch_to.frame('innerFrame')  # 或者使用 ID: 'frame1'

如果你想動態查找 iframe 元素,也可以通過 WebElement 方式切換:

iframe_element = wd.find_element(By.TAG_NAME, 'iframe')
wd.switch_to.frame(iframe_element)

🚫 忘記切換會怎樣?

如果你沒有顯式切換,Selenium 會默認操作“主頁面”的 DOM,自然找不到嵌套在 iframe 里的元素。


🔁 二、從 iframe 回到主頁面

一旦你切入到了 iframe 中,所有的元素查找都會限定在這個嵌套文檔里。

那如果你之后想操作頁面中的其他部分(即外層主頁面),你需要“跳出”當前的 iframe 環境:

wd.switch_to.default_content()

這將把控制權從 iframe 重新交還給主文檔,讓你可以操作原始頁面中的元素。


🪟 三、處理新打開的瀏覽器窗口

在 Web 自動化測試中,還有一種常見的情況是用戶點擊某個鏈接后,瀏覽器會新開一個窗口或標簽頁。

例如:

link = wd.find_element(By.TAG_NAME, "a")
link.click()

這條語句點擊了一個鏈接,但此時 webdriver 默認仍然在原窗口上下文中,即使新窗口已經被打開。

? 錯誤示范

此時若你嘗試操作新窗口的元素,Selenium 仍然會在舊窗口中查找,導致元素找不到或拋出異常。


🧩 四、如何切換到新窗口

為了解決這個問題,需要主動切換窗口。你可以遍歷所有窗口句柄,判斷哪一個是你要操作的新窗口:

for handle in wd.window_handles:wd.switch_to.window(handle)if 'Bing' in wd.title:break  # 找到目標窗口就停下

window_handles 是瀏覽器中當前所有打開窗口的句柄列表,title 是頁面標題。


📝 五、記住原窗口并切回來

如果你在跳轉到新窗口之前,事先保存了原窗口的句柄,就可以輕松返回:

original_window = wd.current_window_handle# ...跳轉到新窗口操作完畢...# 回到原窗口
wd.switch_to.window(original_window)

這種方式在需要多窗口頻繁切換時尤其推薦,避免你寫大量冗余的判斷邏輯。


? 總結小貼士

  • iframe 操作前記得用 switch_to.frame(...) 切換上下文

  • 操作完成后使用 switch_to.default_content() 返回主頁面

  • 新開窗口操作需配合 switch_to.window(...) 切換句柄

  • 保存主窗口句柄是一種更穩定的“回退方案”


如你有更多關于 iframe 嵌套、iframe 中的 iframe、或是彈窗窗口處理的具體例子,也歡迎繼續提問!我可以幫你寫出更實用的模板代碼。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914067.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914067.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914067.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MYSQL C_API使用全解

文章目錄C_API(簡單的)安裝這個庫使用流程初始化連接mysql_init建立連接mysql_real_connect執行SQL語句mysql_query處理結果mysql_store_resultmsyql_use_resultmysql_num_rowsmsyql_free_resultmysql_num_fieldsmysql_fetch_row多線程安全關閉連接mysql…

閑庭信步使用圖像驗證平臺加速FPGA的開發:第二課——RGB轉YCbCr的FPGA硬件編程詳解

(本系列只需要modelsim即可完成數字圖像的處理,每個工程都搭建了全自動化的仿真環境,只需要雙擊文件就可以完成整個的仿真,大大降低了初學者的門檻!!!!如需要該系列的工程文件請關注…

RK3566/RK3568 Android11 修改selinux模式

概述RK3566/RK3568 Android11 SDK默認的selinux是Enforcing模式(強制模式)。Enforcing:強制模式:SELinux在運行中,且已經開始限制domain/type之間的驗證關系 Permisssive:寬容模式:SELinux在運行中,如果驗證…

iOS Widget 開發-3:Widget 的種類與尺寸(主屏、鎖屏、靈動島)

iOS 支持多種類型的 Widget,分布在主屏幕、鎖屏、靈動島、待機模式、控制中心等多個系統位置。每種 Widget 都有各自的尺寸、交互能力與限制。 本篇將系統梳理 iOS 當前支持的 Widget 類型與尺寸規格。主屏 Widget(Home Screen Widgets) 主屏…

ffmpeg 中 write_option()函數詳細注釋

author: hjjdebug date: 2025年 07月 11日 星期五 10:51:23 CST descrip: ffmpeg 中 write_option()函數詳細注釋 文章目錄1. 函數原型1.1 參數說明1.2 SpecifierOpt 說明符選項結構2. write_option 代碼注釋2.1 誰調用了write_option 函數?3. 小結:write_option()不僅在ffmpe…

PandaCoder重大產品更新-引入Jenkinsfile文件支持

寫在前面 安裝這個插件可以直接平替 Jenkinsfile Pro ,節省200元關于插件介紹的處女篇:https://mp.weixin.qq.com/s/fwMEhmx8vxVlvfnipx09Ag為什么叫「熊貓編碼助手」? 熊貓是中國的國寶,備受世界喜愛,代表著中國特色和…

鏈表算法之【判斷鏈表中是否有環】

目錄 LeetCode-141題 LeetCode-141題 給定一個鏈表的頭節點,判斷鏈表中是否存在環 class Solution {public boolean hasCycle(ListNode head) {// checkif (head null || head.next null)return false;// 定義兩個指針,一個快指針[fast]&#xff0c…

Ubuntu 22.04安裝SQL Server指南

看起來在安裝過程中出現了問題,導致 mssql-server 沒有正確安裝。以下是排查和修復步驟:1. 檢查是否成功安裝了 mssql-server 運行以下命令,確認是否已安裝: dpkg -l | grep mssql-server如果沒有任何輸出,說明 mssql-…

Vue+ElementUI聊天室開發指南

Hi,我是布蘭妮甜 !在現代Web應用中,實時聊天功能已成為許多社交平臺、協作工具和客戶支持系統的核心需求。本文將詳細介紹如何使用Vue.js框架配合ElementUI組件庫實現一個功能完整的聊天室應用。我們將從項目搭建開始,逐步實現用戶…

提升你的AI交互技能:使用Anthropic互動提示教程

探索Anthropic的互動式提示工程教程:讓Claude與你更默契 在當今人工智能世界中,熟練掌握有效的提示工程成為了與AI進行高效溝通的關鍵。Anthropic推出了一款全面且互動性強的教程,名為“Prompt Engineering Interactive Tutorial”&#xff0…

從 JavaFX WebView 遷移至 JxBrowser

長久以來,JavaFX 一直包含一個內置的 WebView 組件,這是在 Java 應用中渲染 Web 內容的一個穩定方案。然而,在更復雜或要求更高的使用場景中,它可能就不夠用了。因此,許多開發者轉向了像 JxBrowser 這樣的替代方案。 …

將 Go 應用從 x86 平臺遷移至 Amazon Graviton:場景剖析與最佳實踐

簡介 近年來,Amazon Graviton 處理器以其優越的性價比和強勁的性能,成為了構建高效、可擴展云原生應用的重要選擇。Graviton 采用基于 Arm64 架構的芯片,與傳統的 x86 架構相比存在不少架構差異。雖然 Go 天生對 Arm64 具有良好支持&#xf…

arcgis api for js 設置地圖服務請求帶有請求頭信息

通過地圖的config模塊的請求攔截器來設置請求頭信息,如下示例: 1、引入:‘esri/config’ 1、設置請求頭信息 import { loadArcgisModules } from /utils/map/mapLoadUtil export default { mounted() {this.loadMap()}, methods: {/** ****…

工業通信升級新選擇:耐達訊CCLINKIE轉Modbus TCP網關

在工業自動化系統中,協議轉換網關的選擇直接影響系統穩定性與通信效率。對于CCLINKIE轉Modbus TCP場景,耐達訊通信技術網關憑借以下特性,成為多個項目中的優選方案。技術選型要點協議兼容性支持CCLINKIE的令牌環機制與Modbus TCP的TCP/IP協議…

使用python的 FastApi框架開發圖書管理系統-前后端分離項目分享

今天給大家分享一個 我最近使用python 框架 fastapi 寫的一個web項目 ,叫圖書管理系統。項目主要是來鞏固 python的編程技術。使用的是前端后 分離開發。 主要實現的功能: 1、用戶管理:可以新增、編輯、刪除用戶信息。 2、圖書管理&#xff1…

上位機知識篇---Docker

Docker 詳細介紹 一、Docker 是什么 Docker 是一個開源的容器化平臺,它允許開發者將應用程序及其依賴項打包到一個標準化的單元(稱為容器)中,確保應用在任何環境中都能以相同的方式運行。 簡單來說,Docker 解決了 &…

藍橋杯第十六屆(2025)真題深度解析:思路復盤與代碼實戰

> 省一選手的血淚經驗:**避免這些坑,你也能沖進國賽!** 2025年藍橋杯省賽已落下帷幕,作為近年來**難度最高的一屆競賽**,不少選手在考場上遭遇了“滑鐵盧”。本文將以C++ B組真題為例,逐題解析解題思路,并提供**優化后的AC代碼與詳細注釋**。筆者最終排名省一前40%,…

使用gdal讀取shp及filegdb文件

一、使用qgis開源工具構建兩個文件,分別是filegdb和shp,每個文件包含一個圖層,圖層內容只包含一個字段:id,有兩個數據行,圖層幾何為多邊形,圖層都是如下的效果。二、使用rust讀取上述文件 rust依…

從0開始學習R語言--Day44--LR檢驗

之前我們提到用LM檢驗的方式,來判斷數據在空間上是否受到鄰近數據及其殘差的影響,但是LM檢驗是采用直接計算的方式,只關注了數據的殘差平方和,沒有數據關于依賴項的考慮,容易被結果誤導。而LR檢驗雖然在結果上有時候跟…

openEuler 24.03 (LTS-SP1) 下私有鏡像倉庫部署與自簽 SSL 全流程目標

目錄 openEuler 24.03 (LTS-SP1) 下私有鏡像倉庫部署與自簽 SSL 全流程 1 創建根 CA 與服務器證書(修正版:SAN 寫法兼容所有 OpenSSL) 2 配置 Docker Compose 文件 3 客戶端節點信任 CA 3.1 Docker 3.2 containerd 4 推送 / 拉取測試 …