【selenium】三大切換 iframe 彈窗alert 句柄window 和 鼠標操作

目錄

一、iframe

1、切換方式:

1、第一種情況:

2、第二種情況:

方式1:

先找到iframe,定位iframe元素(可以通過元素定位的各種方式:xpath,css等等),用對象接收,再去跳轉

方式2:通過frame序號——不推薦??

2、跳轉到父級iframe中

3、切換到默認iframe

總結:

二、切換Alert(提示框)

三、切換Window?句柄

四、鼠標操作


一、iframe

當想要定位iframe中的元素時,由于driver的焦點還停留在原頁面,我們在iframe新的頁面上定位元素時,自然會產生錯誤:【報錯:no such element: Unable to locate element】

所以我們需要將driver的焦點切換到iframe頁面中。

java中iframe的三個重載方法

1、切換方式:

1、第一種情況:

frame有具體的name 和 id 屬性(id和name的屬性值如果是動態變化的數字 就不能使用)

——直接通過id或name屬性切換iframe

driver.switchTo().frame("mainFrame");
2、第二種情況:

frame標簽本身沒有id 和 name 屬性 或者 其是動態

方式1:
先找到iframe,定位iframe元素(可以通過元素定位的各種方式:xpath,css等等),用對象接收,再去跳轉
WebElement mainFrame = driver.findElementByName("mainFrame");
driver.switchTo().frame("mainFrame");
方式2:通過frame序號——不推薦??
?# 根據需要填入index,這里定位HTML里的第一個
iframe = driver.find_elements_by_tag_name("iframe")[0] ?
driver.switch_to.frame(iframe)

2、跳轉到父級iframe

如果是頂級iframe,不會有任何變化

driver.switchTo().parentFrame()

3、切換到默認iframe

一般就是最外層網頁。當有超過兩層以上的iframe嵌套,使用此方法可直接跳到最外層

driver.switchTo().defaultContent()

總結:

iframe往內層iframe進,只能一層層進,跳出去可以直接跳出最外面,iframe是一層一層往里面切

二、切換Alert(提示框)

  1. alert.getText()——獲取警告框中的提示信息
  2. alert.accept()——點擊確認按鈕
  3. alert.dismiss()——取消

alert 操作示例:

alert 頁面代碼:

<!DOCTYPE html><html><head><title>a.html</title></head><body><input type="text" name=""></body><script type="text/javascript">//confirm(確認到充值么)if(confirm("確認到充值么?")){alert("充值成功")}else{alert("取消充值")}</script>
</html>

alert操作代碼:

//得到alert框
Alert alert = driver.switchTo.alert();
//獲取內容
System.out.println(alert.getText());
//點擊取消
alert.dismiss();
//再次點擊確定 可以在alert原來操作的基礎上直接再次點擊
alert.accept();

三、切換Window?句柄

當我們點擊了 a 標簽元素時,會觸發打開鏈接頁面的事件,有兩種情形:

  1. 在當前窗口加載新頁面內容

  2. 新建一個窗口加載新頁面內容,這種情況在 a 標簽有 target="_blank" 時觸發

當發生第2種情況時,同iframe類似,我們需要切換窗口

切換方式:

傳入要操作窗口的handle句柄 --窗口的標識,唯一,并且是一串字符串來的

句柄(handle):selenium為每一個窗口分配的值,每一次都是不同的

切換方式:

driver.switchTo.window(nameOrHandle);

name一般沒人用,Handle句柄,如何獲取到窗口的句柄呢:

driver.getWindowHandle();獲取當前操作窗口的句柄,返回set集合,無序
driver.getWindowHandles();獲取測試時打開的所有窗口句柄

四、鼠標操作

自動化測試時,有些元素不適合直接點擊或者進行某些操作時,可以使用Selenium的Actions類(鼠標操作類)來模擬鼠標鍵盤操作,通過Actions對象可以發起鼠標左鍵、右鍵、移動鼠標等操作,最后使用perform方法執行操作。

clickAndHold() //在特定元素上單擊鼠標左鍵(不釋放)
release() //在特定元素上釋放鼠標左鍵
doubleClick() //在特定元素上雙擊鼠標左鍵
moveToElement() //移動鼠標指針到特定元素
contextClick() //在特定元素上右鍵單擊
dragAndDrop() //拖拽元素perform() //執行具體的操作,前面6個方法都是聲明一個操作,只有調用perform()后才會真正執行操作

Actions:? 在操作一個頁面元素的時候需要一連串的動作配合的時候,可以使用Actions來完成

//鼠標操作類
//創建對象
Actions action = new Actions(driver);
?
actions.clickAndHold(onElement).moveToElement(toElement).release().build().perform();

案例:ZTREE DEMO - drag & drop

拖拽一個元素到另一個元素的位置

 ? //按住一個元素,移動到另一個元素處,釋放
action.clickAndHold(treeDemo_2_span).moveToElement(treeDemo_11_span).release().perform();//拖拽 dragAndDrop(源,目標)  同上面效果一樣
action.dragAndDrop(treeDemo_2_span,treeDemo_11_span).perform();

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

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

相關文章

MyBatis Plus中的動態表名實踐

隨著數據庫應用的不斷發展&#xff0c;面對復雜多變的業務需求&#xff0c;動態表名的處理變得愈發重要。在 MyBatis Plus&#xff08;以下簡稱 MP&#xff09;這一優秀的基于 MyBatis 的增強工具的支持下&#xff0c;我們可以更便捷地應對動態表名的挑戰。本文將深入研究如何在…

美創新一代數據安全管理平臺宣傳片「龍」重登場

美創新一代數據安全管理平臺&#xff08;DSM Cloud&#xff09;產品宣傳片 國產化、混合多云環境催生愈加復雜的數據安全防護、管理及可持續運營挑戰。 美創新一代數據安全管理平臺&#xff08;DSM Cloud&#xff09;&#xff0c;圍繞韌性數據安全體系&#xff0c;聚焦全域數據…

[HTML]Web前端開發技術27(HTML5、CSS3、JavaScript )JavaScript基礎——喵喵畫網頁

希望你開心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你點贊&#xff01; 最后的最后&#xff0c;關注喵&#xff0c;關注喵&#xff0c;關注喵&#xff0c;佬佬會看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你對我真的…

activeMq將mqtt發布訂閱轉成消息隊列

1、activemq.xml置文件新增如下內容 2、mqttx測試發送&#xff1a; 主題&#xff08;配置的模糊匹配&#xff0c;為了并發&#xff09;&#xff1a;VirtualTopic/device/sendData/12312 3、mqtt接收的結果 4、程序處理 package comimport cn.hutool.core.date.DateUtil; imp…

ReactNative進階(二十三)error: no type or protocol named ‘RCTBridgeModule’問題修復

文章目錄 一、前言三、拓展閱讀 一、前言 Jenkins組包RN技術棧實現的iOS應用時&#xff0c;遇到以下錯誤提示信息&#xff1a; error: no type or protocol named ‘RCTBridgeModule’ interface RCTEventDispatcher : NSObject <RCTBridgeModule>error: cannot find i…

【AIGC】基于深度學習的圖像生成與增強技術

摘要&#xff1a; 本論文探討基于深度學習的圖像生成與增強技術在圖像處理和計算機視覺領域的應用。我們綜合分析了主流的深度學習模型&#xff0c;特別是生成對抗網絡&#xff08;GAN&#xff09;和變分自編碼器&#xff08;VAE&#xff09;等&#xff0c;并就它們在實際應用中…

嵌入式linux開發 (三十四) 內存管理2.0(6) 各種段(.code .rodata .data .bss .stack .heap)的含義

我們知道, 邏輯程序在連接的時候在elf 文件中會有 .code .rodata .data 然后在內存中才會有 .code .rodata .data那么為什么鏈接器在鏈接生成的elf文件中會有這些段呢?這涉及到鏈接器的歷史問題

小程序性能優化

背景 在開發小程序的過程中我們發現&#xff0c;小程序的經常會遇到性能問題&#xff0c;尤其是在微信開發者工具的時候更是格外的卡&#xff0c;經過排查發現&#xff0c;卡頓的頁面有這么多的js代碼需要加載&#xff0c;而且都是在進入這個頁面的時候加載&#xff0c;這就會…

Java架構師之路九、設計模式:常見的設計模式,如單例模式、工廠模式、策略模式、橋接模式等

目錄 常見的設計模式&#xff1a; 單例模式&#xff1a; 工廠模式&#xff1a; 策略模式&#xff1a; 橋接模式&#xff1a; 責任鏈模式&#xff1a; Java架構師之路八、安全技術&#xff1a;Web安全、網絡安全、系統安全、數據安全等-CSDN博客Java架構師之路十、框架和工…

Android 仿信號格子強度動畫效果實現

效果圖 在 Android 中&#xff0c;如果你想要繪制一個圓角矩形并使其居中顯示&#xff0c;你可以使用 Canvas 類 drawRoundRect 方法。要使圓角矩形居中&#xff0c;你需要計算矩形的位置&#xff0c;這通常涉及到確定矩形左上角的位置&#xff08;x, y&#xff09;&#xff0…

Leetcode 第 384 場周賽題解

Leetcode 第 384 場周賽題解 Leetcode 第 384 場周賽題解題目1&#xff1a;3033. 修改矩陣思路代碼復雜度分析 題目2&#xff1a;3034. 匹配模式數組的子數組數目 I思路代碼復雜度分析 題目3&#xff1a;3035. 回文字符串的最大數量思路代碼復雜度分析 題目4&#xff1a;3036. …

C語言標準庫介紹:<string.h>

在C語言中&#xff0c;<string.h>頭文件是標準庫中的一個重要部分&#xff0c;它定義了一系列操作字符串和字符數組的函數。本文將詳細介紹<string.h>頭文件中包含的22個函數&#xff0c;并提供每個函數的完整示例代碼。 簡介 <string.h>頭文件定義了一個變…

設計模式-工廠模式(Factory Pattern)

一、工廠模式說明 工廠模式是一種創建型設計模式&#xff0c;它提供了一種將對象的創建與使用分離的方式。工廠模式通過引入一個公共的接口來創建對象&#xff0c;而不是通過直接調用構造函數來創建對象。這樣做的好處是使得代碼更加靈活&#xff0c;更容易維護和擴展。 工廠模…

第3部分 原理篇2去中心化數字身份標識符(DID)(2)

3.2.2. DID相關概念 3.2.2.1. 去中心化標識符 (Decentralized identifier&#xff0c;DID) 本聰老師&#xff1a;DID有兩個含義&#xff0c;一是Decentralized identity&#xff0c;就是去中心化身份&#xff0c;是廣泛意義的DID。另外一個是Decentralized identifier&#xf…

Web性能優化-瀏覽器工作原理-MDN文檔學習筆記

瀏覽器工作原理 查看更多學習筆記&#xff1a;GitHub&#xff1a;LoveEmiliaForever MDN中文官網 導航 導航是加載 web 頁面的第一步&#xff1a;輸入 URL、點擊一個鏈接、提交表單等等 DNS查詢 導航的第一步是要去尋找頁面資源的位置 例如訪問https://example.com&#x…

如何解決DNS解析錯誤故障

DNS解析錯誤會導致將一個域名解析為錯誤的IP地址&#xff0c;或者根本無法確定某個域名對應的IP地址&#xff0c;從而無法通過域名訪問相應的站點&#xff0c;形成DNS解析故障。最常見的癥狀是訪問站點對應的IP地址沒有問題&#xff0c;但訪問其域名時卻出現錯誤。 DNS解析異常…

qt-動畫圓圈等待-LED數字

qt-動畫圓圈等待-LED數字 一、演示效果二、關鍵程序三、下載鏈接 一、演示效果 二、關鍵程序 #include "LedNumber.h" #include <QLabel>LEDNumber::LEDNumber(QWidget *parent) : QWidget(parent) {//設置默認寬高比setScale((float)0.6);//設置默認背景色se…

【深入了解TensorFlow】TensorFlow的安裝與配置

【深入了解TensorFlow】TensorFlow的安裝與配置 TensorFlow的安裝與配置準備就緒:開始前的準備工作1. 確定您的硬件和操作系統2. 選擇安裝方式3. 創建虛擬環境(可選)安裝TensorFlow使用pip安裝使用conda安裝從源代碼編譯安裝配置TensorFlow導入TensorFlow模塊檢查安裝是否成…

Oracle 表被刪除或重命名后賬戶間的授權與同義詞關系

Oracle 表被刪除或重命名后賬戶間的授權與同義詞關系 情景一、 當數據表刪除后 數據表被刪除后&#xff0c;同義詞還是存在的&#xff0c;可以查看當前用戶下查看同義詞&#xff1a; -- 查看當前用戶下的同義詞 select * from user_synonyms但授權關系不在了&#xff0c;若重…

10 個 Linux 中超方便的 Bash 別名

1、 你有幾次遇到需要解壓 .tar 文件但無法記住所需的確切參數&#xff1f;別名可以幫助你&#xff01;只需將以下內容添加到 .bash_profile 中&#xff0c;然后使用 untar FileName 解壓縮任何 .tar 文件。 alias untartar -zxvf 2、 下載文件時&#xff0c;如果出現問題想要…