(18)python+playwright自動化測試鼠標拖拽-上

1.簡介

本文主要介紹兩個在測試過程中可能會用到的功能:在selenium中介紹了Actions類中的拖拽操作和Actions類中的劃取字段操作。例如:需要在一堆log字符中隨機劃取一段文字,然后右鍵選擇摘取功能。playwright同樣可以實現元素的拖拽和釋放的操作。

2.拖拽操作

鼠標拖拽操作,顧名思義就是:就是鼠標按住將一個元素拖拽到另一個元素上。拖拽是指將某個元素從一個位置拖動到另一個位置。為了模擬這種操作,Playwright 提供了 DragToAsync 方法,它可以幫助我們輕松地完成拖拽功能。

2.1基礎知識

1.按住元素從頁面的一個位置拖動到另外一個位置,有2種方式可以實現:

locator.drag_to(target: locator) 先定位元素,調用drag_to方法到目標元素
page.drag_and_drop(source: str, target: str) page對象直接調用

2.拖動和釋放操作

page.drag_and_drop可以實現通過page對象調用drag_and_drop ,部分源碼如下:

def drag_and_drop(self,source: str,target: str,*,source_position: typing.Optional[Position] = None,target_position: typing.Optional[Position] = None,force: typing.Optional[bool] = None,no_wait_after: typing.Optional[bool] = None,timeout: typing.Optional[float] = None,strict: typing.Optional[bool] = None,trial: typing.Optional[bool] = None) -> None:"""Page.drag_and_dropThis method drags the source element to the target element. It will first move to the source element, perform a`mousedown`, then move to the target element and perform a `mouseup`.**Usage**```pyawait page.drag_and_drop(\"#source\", \"#target\")# or specify exact positions relative to the top-left corners of the elements:await page.drag_and_drop(\"#source\",\"#target\",source_position={\"x\": 34, \"y\": 7},target_position={\"x\": 10, \"y\": 20})``````pypage.drag_and_drop(\"#source\", \"#target\")# or specify exact positions relative to the top-left corners of the elements:page.drag_and_drop(\"#source\",\"#target\",source_position={\"x\": 34, \"y\": 7},target_position={\"x\": 10, \"y\": 20})```

注:source 和 target 是字符串格式,也就是傳selector 選擇器的方法

3.拖拽操作

locator.drag_to()可以實現拖放操作,該操作將:

  • 將鼠標懸停在要拖動的元素上
  • 按鼠標左鍵
  • 將鼠標移動到將接收放置的元素
  • 松開鼠標左鍵

語法示例:

page.locator("#item-to-be-dragged").drag_to(page.locator("#item-to-drop-at"))

手工拖拽:

locator.hover()、mouse.down()、mouse.move()、mouse.up()

語法示例:

page.locator("#item-to-be-dragged").hover()
page.mouse.down()
page.locator("#item-to-drop-at").hover()
page.mouse.up()

3.牛刀小試

學習過Playwright的拖拽基礎知識后,我們趁熱打鐵將其實踐一下,以為我們更好的理解和記憶。這里JqueryUI網站的一個拖拽demo實戰一下。

3.1拖拽操作

使用locator.drag_to()執行拖放操作,實現自動化測試。

3.1.1代碼設計
3.1.2參考代碼
# coding=utf-8🔥
# 1.導入模塊
from playwright.sync_api import Playwright, sync_playwright, expectdef run(playwright: Playwright) -> None:browser = playwright.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()page.goto("https://jqueryui.com/resources/demos/droppable/default.html")page.wait_for_timeout(1000)page.locator("#draggable").drag_to(page.locator("#droppable"))page.wait_for_timeout(3000)# page.pause()# page.drag_and_drop('#dragger', 'text=Item 2')context.close()browser.close()with sync_playwright() as playwright:run(playwright)
3.1.3運行代碼

1.運行代碼,右鍵Run'Test'

2.運行代碼后電腦端的瀏覽器的動作。如下圖所示:

3.2拖動和釋放操作

使用page.drag_and_drop(locator, loacator),實現自動化測試。

3.2.1代碼設計
3.2.2參考代碼
# coding=utf-8🔥
# 1.導入模塊
from playwright.sync_api import Playwright, sync_playwright, expectdef run(playwright: Playwright) -> None:browser = playwright.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()page.goto("https://jqueryui.com/resources/demos/droppable/default.html")page.wait_for_timeout(1000)# page.locator("#draggable").drag_to(page.locator("#droppable"))page.drag_and_drop('#draggable', '#droppable')page.wait_for_timeout(3000)# page.pause()context.close()browser.close()with sync_playwright() as playwright:run(playwright)
3.2.3運行代碼

1.運行代碼,右鍵Run'Test':

3.3手工拖拽

想精確控制拖動操作,可以使用較低級別的手工方法,如locator.hover()、mouse.down()、mouse.move()和mouse.up()。來實現自動化測試。

3.1代碼設計
3.2參考代碼
# coding=utf-8🔥
# 1.導入模塊
from playwright.sync_api import Playwright, sync_playwright, expectdef run(playwright: Playwright) -> None:browser = playwright.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()page.goto("https://jqueryui.com/resources/demos/droppable/default.html")page.wait_for_timeout(1000)page.locator('#draggable').hover()page.mouse.down()page.locator('#droppable').hover()page.mouse.up()page.wait_for_timeout(3000)# page.pause()context.close()browser.close()with sync_playwright() as playwright:run(playwright)
3.3運行代碼

1.運行代碼,右鍵Run'Test'

2.運行代碼后電腦端的瀏覽器的動作。如下圖所示:

4.小結

由于網絡的原因,有時可以訪問到jquery UI的網頁的demo,有時又不可以,在網上找了半天又找到一個網址:Sahi Tests?里邊有很多在線免費的demo供大家學習使用。有興趣的同學可以找到里邊的拖拽demo來鞏固一下今天學習的知識。

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

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

相關文章

Android 網絡全棧攻略(四)—— TCPIP 協議族與 HTTPS 協議

Android 網絡全棧攻略系列文章: Android 網絡全棧攻略(一)—— HTTP 協議基礎 Android 網絡全棧攻略(二)—— 編碼、加密、哈希、序列化與字符集 Android 網絡全棧攻略(三)—— 登錄與授權 Andr…

Python爬蟲實戰:從零構建完整項目(數據采集+存儲+異常處理)

Python爬蟲實戰:從零構建完整項目(數據采集存儲異常處理) 爬蟲不是簡單的請求解析,而是一個系統工程。本文將帶你體驗企業級爬蟲開發的核心流程。 一、前言:為什么需要完整的爬蟲項目? 作為初學者&#xf…

大數據時代UI前端的用戶體驗設計新思維:以用戶為中心的數據可視化

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言:大數據重構用戶體驗設計的底層邏輯在數據爆炸式增長的今天,用…

FreeRTOS 中任務控制塊(Task Control Block,TCB)用于管理和描述任務的核心數據結構

在 FreeRTOS 中,任務控制塊(Task Control Block,TCB)是用于管理和描述任務的核心數據結構。每個任務都有一個對應的 TCB,它包含了任務的所有相關信息。 TCB 的主要功能 存儲任務狀態信息:TCB 中包含了任務…

前端-HTML-day1

目錄 1、標簽語法 2、HTML基本骨架 3、標簽的關系 4、注釋 5、標題標簽 6、段落標簽 7、換行和水平線標簽 8、文本格式化標簽 9、圖像標簽-基本使用 10、圖像標簽-屬性 11、相對路徑 12、絕對路徑 13、超鏈接 14、音頻 15、視頻 16、綜合案例1--個人簡介 17、…

OpenCV篇——項目(二)OCR文檔掃描

目錄 文檔掃描項目說明 前言 文檔掃描代碼總體演示 OCR文檔識別代碼總體演示: ?編輯 代碼功能詳解 1. 預處理階段 2. 邊緣檢測 3. 輪廓處理 4. 透視變換 5. 后處理 主要改進說明: 使用建議: 文檔掃描項目說明 前言 本項目實現了一個自動…

Java 中導出包含多個 Sheet 的 Excel 文件

在 Java 中導出包含多個 Sheet 的 Excel 文件,可以使用 Apache POI 或 EasyExcel(阿里開源庫)。以下是兩種方法的詳細實現: 方法 1:使用 Apache POI(支持 .xls 和 .xlsx) 1. 添加 Maven 依賴 …

OneCode采用虛擬DOM結構實現服務端渲染的技術實踐

一、技術背景與挑戰 隨著企業級應用復雜度的提升,傳統服務端渲染(SSR)面臨頁面交互性不足的問題,而純前端SPA架構則存在首屏加載慢和SEO不友好的缺陷。OneCode框架創新性地將虛擬DOM技術引入服務端渲染流程,構建了一套兼顧性能與開發效率的企…

變幻莫測:CoreData 中 Transformable 類型面面俱到(八)

概述 各位似禿似不禿小碼農們都知道,在蘋果眾多開發平臺中 CoreData 無疑是那個最簡潔、擁有“官方認證”且最具兼容性的數據庫框架。使用它可以讓我們非常方便的搭建出 App 所需要的持久存儲體系。 不過,大家是否知道在 CoreData 中還存在一個 Transfo…

汽車LIN總線通訊:從物理層到協議棧的深度解析

目錄一、物理層:單線傳輸的信號奧秘1.1 電平定義與信號傳輸1.2 關鍵硬件組件作用二、數據鏈路層:幀結構與通信協議2.1 LIN幀的組成與功能2.2 主從式通信機制三、波特率同步:從節點的時鐘校準原理四、軟件實現:基于S32K144的主節點…

馬爾可夫鏈:隨機過程的記憶法則與演化密碼

本文由「大千AI助手」原創發布,專注用真話講AI,回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我,一起撕掉過度包裝,學習真實的AI技術! 一、核心定義:無記憶的隨機演化 馬爾可夫鏈(M…

【vue3+tauri+rust】如何實現下載文件mac+windows

項目背景:【vue3taurirust】 由于Safari對于下載總是有諸多阻攔,目前需求windowsmac可以實現: 后端返回的url文件可以下載;前端根據dom元素生成的PDF報告可以下載(無遠程URL); 我的嘗試: 方法…

SQL 快速參考手冊-SQL001

SQL 快速參考手冊: 為方便快速學習和實踐,提供了一份 SQL 快速參考手冊,您可以打印出來隨時查看,了解常見 SQL 命令的語法和用法。 SQL 數據類型 SQL 數據類型根據不同的數據庫系統(如 Microsoft Access、MySQL、SQL…

學習java集合

集合與數組的對比集合的長度可變, 數組的長度不可變集合實際上跟數組一樣, 是一種容器, 可以存放數據數組可以直接存放基本數據類型和引用數據類型集合可以存放引用數據類型, 但是不能直接存放基本數據類型, 如果要存放基本數據類型, 需要變成一個包裝類才行泛型: 限定集合中存…

python訓練day49 CBAM

import torch import torch.nn as nn# 定義通道注意力 class ChannelAttention(nn.Module):def __init__(self, in_channels, ratio16):"""通道注意力機制初始化參數:in_channels: 輸入特征圖的通道數ratio: 降維比例,用于減少參數量,默認…

在小程序中實現實時聊天:WebSocket最佳實踐

前言 在當今互聯網應用中,實時通信已經成為一個標配功能,特別是對于需要即時響應的場景,如在線客服、咨詢系統等。本文將分享如何在小程序中實現一個高效穩定的WebSocket連接,以及如何處理斷線重連、消息發送與接收等常見問題。 W…

Python網絡爬蟲編程新手篇

網絡爬蟲是一種自動抓取互聯網信息的腳本程序,廣泛應用于搜索引擎、數據分析和內容聚合。這次我將帶大家使用Python快速構建一個基礎爬蟲,為什么使用python做爬蟲?主要就是支持的庫很多,而且同類型查詢文檔多,在同等情…

LeetCode.283移動零

題目鏈接:283. 移動零 - 力扣(LeetCode) 題目描述: 給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。 請注意 ,必須在不復制數組的情況下原地對數組進行…

2025年7月4日漏洞文字版表述一句話版本(漏洞危害以及修復建議),通常用于漏洞通報中簡潔干練【持續更新中】,漏洞通報中對于各類漏洞及修復指南

漏洞及修復指南 一、暗鏈 危害:攻擊者通過技術手段在用戶網頁中插入隱藏鏈接或代碼,并指向惡意網站,可導致用戶信息泄露、系統感染病毒,用戶訪問被劫持至惡意網站,泄露隱私或感染惡意軟件,被黑客利用進行…

python --飛漿離線ocr使用/paddleocr

依賴 # python3.7.3 paddleocr2.7.0.2 paddlepaddle2.5.2 loguru0.7.3from paddleocr import PaddleOCR import cv2 import numpy as npif __name__ __main__:OCR PaddleOCR(use_doc_orientation_classifyFalse, # 檢測文檔方向use_doc_unwarpingFalse, # 矯正扭曲文檔use…