Selenium 中 ActionChains 支持的鼠標和鍵盤操作設置及最佳實踐

Selenium 中 ActionChains 支持的鼠標和鍵盤操作設置及最佳實踐

一、引言

在使用 Selenium 進行自動化測試時,ActionChains 類提供了強大的功能,用于模擬鼠標和鍵盤的各種操作。通過 ActionChains,可以實現復雜的用戶交互,如鼠標懸停、拖放、組合鍵輸入等。以下將詳細介紹 ActionChains 支持的全部鼠標和鍵盤操作,并給出相應的最佳實踐示例。

二、鼠標操作

2.1 鼠標移動到元素上(懸停)

場景描述

在網頁中,有些元素在鼠標懸停時會顯示額外的信息或執行特定操作。使用 ActionChains 可以模擬鼠標懸停的效果。

代碼示例(Python + Selenium)
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Chrome()
driver.get('https://example.com')# 定位目標元素
element = driver.find_element('id', 'target-element-id')# 創建 ActionChains 對象
actions = ActionChains(driver)
# 鼠標移動到元素上
actions.move_to_element(element).perform()
最佳實踐說明
  • 使用 move_to_element() 方法將鼠標移動到指定元素上。
  • 調用 perform() 方法執行操作鏈中的所有操作。

2.2 鼠標點擊元素

場景描述

模擬用戶點擊網頁上的元素,如按鈕、鏈接等。

代碼示例(Python + Selenium)
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Chrome()
driver.get('https://example.com')# 定位目標元素
element = driver.find_element('id', 'button-element-id')# 創建 ActionChains 對象
actions = ActionChains(driver)
# 鼠標點擊元素
actions.click(element).perform()
最佳實踐說明
  • 使用 click() 方法點擊指定元素。
  • 可以將多個操作添加到操作鏈中,最后調用 perform() 一次性執行。

2.3 鼠標右鍵點擊元素

場景描述

模擬用戶使用鼠標右鍵點擊元素,觸發右鍵菜單。

代碼示例(Python + Selenium)
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Chrome()
driver.get('https://example.com')# 定位目標元素
element = driver.find_element('id', 'target-element-id')# 創建 ActionChains 對象
actions = ActionChains(driver)
# 鼠標右鍵點擊元素
actions.context_click(element).perform()
最佳實踐說明
  • 使用 context_click() 方法模擬鼠標右鍵點擊。

2.4 鼠標雙擊元素

場景描述

模擬用戶雙擊元素,有些元素在雙擊時會有特殊的響應。

代碼示例(Python + Selenium)
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Chrome()
driver.get('https://example.com')# 定位目標元素
element = driver.find_element('id', 'target-element-id')# 創建 ActionChains 對象
actions = ActionChains(driver)
# 鼠標雙擊元素
actions.double_click(element).perform()
最佳實踐說明
  • 使用 double_click() 方法模擬鼠標雙擊。

2.5 鼠標拖放元素

場景描述

模擬用戶將一個元素從一個位置拖放到另一個位置,常用于排序、拼圖等交互場景。

代碼示例(Python + Selenium)
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Chrome()
driver.get('https://example.com')# 定位源元素和目標元素
source_element = driver.find_element('id', 'source-element-id')
target_element = driver.find_element('id', 'target-element-id')# 創建 ActionChains 對象
actions = ActionChains(driver)
# 鼠標拖放元素
actions.drag_and_drop(source_element, target_element).perform()
最佳實踐說明
  • 使用 drag_and_drop() 方法將源元素拖放到目標元素上。

三、鍵盤操作

3.1 輸入文本

場景描述

在輸入框中輸入文本內容。

代碼示例(Python + Selenium)
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Chrome()
driver.get('https://example.com')# 定位輸入框元素
input_element = driver.find_element('id', 'input-element-id')# 創建 ActionChains 對象
actions = ActionChains(driver)
# 在輸入框中輸入文本
actions.send_keys_to_element(input_element, 'Hello, World!').perform()
最佳實踐說明
  • 使用 send_keys_to_element() 方法向指定元素輸入文本。

3.2 按下和釋放鍵盤按鍵

場景描述

模擬按下和釋放特定的鍵盤按鍵,如回車鍵、Ctrl 鍵等。

代碼示例(Python + Selenium)
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keysdriver = webdriver.Chrome()
driver.get('https://example.com')# 創建 ActionChains 對象
actions = ActionChains(driver)
# 按下回車鍵
actions.send_keys(Keys.ENTER).perform()# 按下 Ctrl 鍵并輸入 C(復制操作)
actions.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
最佳實踐說明
  • 使用 send_keys() 方法發送單個按鍵。
  • 使用 key_down()key_up() 方法模擬按下和釋放組合鍵。

3.3 組合鍵輸入

場景描述

模擬同時按下多個鍵盤按鍵,如 Ctrl + A(全選)、Ctrl + V(粘貼)等。

代碼示例(Python + Selenium)
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keysdriver = webdriver.Chrome()
driver.get('https://example.com')# 定位輸入框元素
input_element = driver.find_element('id', 'input-element-id')# 創建 ActionChains 對象
actions = ActionChains(driver)
# 全選輸入框內容
actions.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform()
最佳實踐說明
  • 組合鍵操作需要使用 key_down() 按下組合鍵,然后使用 send_keys() 發送其他按鍵,最后使用 key_up() 釋放組合鍵。

四、最佳實踐總結

4.1 操作鏈的使用

將多個操作添加到 ActionChains 對象的操作鏈中,最后調用 perform() 一次性執行,避免頻繁與瀏覽器交互,提高效率。

4.2 異常處理

在執行鼠標和鍵盤操作時,可能會出現元素未找到、操作失敗等異常情況,建議添加異常處理機制,確保程序的健壯性。

4.3 元素等待

在進行操作之前,確保目標元素已經加載完成,可以使用顯式等待來等待元素的出現,避免因元素未加載而導致的操作失敗。例如:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
driver.get('https://example.com')# 等待元素出現
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'target-element-id'))
)# 進行操作
actions = ActionChains(driver)
actions.click(element).perform()

4.4 跨平臺兼容性

不同的操作系統和瀏覽器可能對鼠標和鍵盤操作有細微的差異,在編寫測試用例時,要考慮跨平臺兼容性,確保操作在各種環境下都能正常工作。

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

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

相關文章

前端面試技術性場景題

87.場景面試之大數運算:超過js中number最大值的數怎么處理 在 JavaScript 中,Number.MAX_SAFE_INTEGER(即 2^53 - 1,即 9007199254740991)是能被安全表示的最大整數。超過此值時,普通的 Number 類型會出現…

【js逆向】iwencai國內某金融網站實戰

地址:aHR0cHM6Ly93d3cuaXdlbmNhaS5jb20vdW5pZmllZHdhcC9ob21lL2luZGV4 在搜索框中隨便輸入關鍵詞 查看請求標頭,請求頭中有一個特殊的 Hexin-V,它是加密過的;響應數據包中全是明文。搞清楚Hexin-V的值是怎么生成的,這個值和cooki…

ES Module 的 import 導入和 import () 動態導入

ES Module 的 import 導入和 import () 動態導入介紹 一、ES Module 簡介 ES Module 是 JavaScript 官方提供的標準化模塊系統,它的出現解決了長期以來 JavaScript 在模塊管理方面的混亂局面。通過 ES Module,開發者可以更加方便地組織和復用代碼&…

使用Node.js從零搭建DeepSeek本地部署(Express框架、Ollama)

目錄 1.安裝Node.js和npm2.初始化項目3.安裝Ollama4.下載DeepSeek模型5.創建Node.js服務器6.運行服務器7.Web UI對話-Chrome插件-Page Assist 1.安裝Node.js和npm 首先確保我們機器上已經安裝了Node.js和npm。如果未安裝,可以通過以下鏈接下載并安裝適合我們操作系…

BUUCTF——[GYCTF2020]FlaskApp1 SSTI模板注入/PIN學習

目錄 一、網頁功能探索 二、SSTI注入 三、方法一 四、方法二 使用PIN碼 (1)服務器運行flask登錄所需的用戶名 (2)modename (3)flask庫下app.py的絕對路徑 (4)當前網絡的mac地…

Java基礎關鍵_018_集合(二)

目 錄 一、泛型 ※ 1.說明 2.實例 3.擦除與補償 4.泛型的定義 (1)類定義 (2)靜態方法定義 (3)接口定義 5.通配符 (1)無限定 (2)上限 &#xff…

FPGA學習篇——Verilog學習3(關鍵字+注釋方法+程序基本框架)

1 Verilog常用關鍵字 大概知道以下哪些是關鍵字就好,如何使用還是得在編寫代碼中來學習。 2 Verilog注釋方法 Verilog有兩種注釋方式: 2.1 “ // ” 單行。 2.2 “ /* ... */ ” 可擴展多行。 3 Verilog程序基本框架 Verilog 的基本設計單元是“…

FPGA之USB通信實戰:基于FX2芯片的Slave FIFO回環測試詳解

FPGA之Usb數據傳輸 Usb 通信 你也許會有疑問,明明有這么多通信方式和數據傳輸(SPI、I2C、UART、以太網)為什么偏偏使用USB呢? 原因有很多,如下: 1. 高速數據傳輸能力 高帶寬:USB接口提供了較高的數據傳…

深入理解與配置 Nginx TCP 日志輸出

一、背景介紹 在現代網絡架構中,Nginx 作為一款高性能的 Web 服務器和反向代理服務器,廣泛應用于各種場景。除了對 HTTP/HTTPS 協議的出色支持,Nginx 從 1.9.0 版本開始引入了對 TCP 和 UDP 協議的代理功能,這使得它在處理數據庫…

【大模型安全】安全解決方案

【大模型安全】安全解決方案 1.技術層面2.數據層面數據收集階段訓練階段模型推理階段 1.技術層面 在使用大語言模型時,通常有幾種選擇:一種是采用封裝好的大語言模型SaaS云服務;另一種是在公有云上部署自有的大語言模型,并通過權…

python中httpx庫的詳細使用及案例

文章目錄 1. 安裝 httpx2. 同步請求3. 異步請求4. 高級功能5. 錯誤處理6. 配置客戶端7. 結合 Beautiful Soup 使用8. 示例:抓取并解析網頁9. 注意事項httpx 是一個現代化的 Python HTTP 客戶端庫,支持同步和異步請求,功能強大且易于使用。它比 requests 更高效,支持 HTTP/2…

OpenCV計算攝影學(19)非真實感渲染(Non-Photorealistic Rendering, NPR)

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 非真實感渲染(Non-Photorealistic Rendering, NPR)是一種計算機圖形學技術,旨在生成具有藝術風格或其他非現實…

微信小程序點擊按鈕,將圖片下載到本地

前言&#xff1a; 最近在公司完成一個小程序的時候需要實現一個功能&#xff1a;點擊按鈕獲取用戶相冊權限&#xff0c;將圖片下載到用戶本地相冊&#xff0c;經過了好幾次的嘗試最終算是實現了。將總結的經驗在這里分享給小伙伴們。 實現方式&#xff1a; //.wxml文件 <…

數據倉庫為什么要分層

數據倉庫分層架構是數據倉庫設計中的一個重要概念&#xff0c;其主要目的是為了更好地組織和管理數據&#xff0c;提高數據倉庫的可維護性、可擴展性和性能。分層架構將數據倉庫劃分為多個層次&#xff0c;每個層次都有其特定的職責和功能。以下是數據倉庫分層的主要原因和好處…

selenium庫

一、什么是selenium庫&#xff1f; selenim是一個用于Web應用程序自動化測試工具&#xff0c;selenium測試直接運行在瀏覽器中 像真正的用戶在操作一樣&#xff0c;驅動瀏覽器執行特定的動作&#xff0c;如點擊&#xff0c;下拉等操作 二、selenium在爬蟲中的應用 獲取動態…

python從入門到精通(二十四):python爬蟲實現登錄功能

這里寫目錄標題 requests實現登錄功能selenium實現登錄功能 requests實現登錄功能 使用 requests 庫結合會話&#xff08;Session&#xff09;來嘗試登錄。不過豆瓣有反爬蟲機制&#xff0c;這種方式可能會受到驗證碼等因素的限制 import requests import re# 豆瓣登錄頁面 l…

十七、從0開始卷出一個新項目之瑞薩RZN2L定時器(GPT)+DMA生成PWM的運動控制

一、概述 嵌入式科普(34)通過對比看透DMA的本質 分享瑞薩RZN2L使用DMA生成PWM的運動控制的例程源碼 rzn2l必要的外設資源&#xff1a; rzn2l擁有32-bit timer General PWM Timer (GPT) with 18 channels CPU、GPT最高頻率400Mhz DMAC0 and DMAC1 8 channels 8 channels 還…

MR的環形緩沖區(底層)

MapReduce的大致流程&#xff1a; 1、HDFS讀取數據&#xff1b; 2、按照規則進行分片&#xff0c;形成若干個spilt&#xff1b; 3、進行Map 4、打上分區標簽&#xff08;patition&#xff09; 5、數據入環形緩沖區&#xff08;KVbuffer&#xff09; 6、原地排序&#xff…

解鎖STM32外設:開啟嵌入式開發新世界

???這里是小韓學長yyds的BLOG(喜歡作者的點個關注吧) ???想要了解更多內容可以訪問我的主頁 小韓學長yyds-CSDN博客 目錄 探索 STM32 強大的外設家族 初窺門徑&#xff1a;STM32 外設開發基礎 開發方式與工具 外設配置基礎步驟 深入剖析&#xff1a;常見外設應用實例…

大模型AI平臺DeepSeek 眼中的SQL2API平臺:QuickAPI、dbapi 和 Magic API 介紹與對比

目錄 1 QuickAPI 介紹 2 dbapi 介紹 3 Magic API 介紹 4 簡單對比 5 總結 統一數據服務平臺是一種低代碼的方式&#xff0c;實現一般是通過SQL能直接生成數據API&#xff0c;同時能對產生的數據API進行全生命周期的管理&#xff0c;典型的SQL2API的實現模式。 以下是針對…