首页 > 编程语言 >《最新出炉》系列初窥篇-Python+Playwright自动化测试-18-处理鼠标拖拽-上篇

《最新出炉》系列初窥篇-Python+Playwright自动化测试-18-处理鼠标拖拽-上篇

时间:2023-10-11 13:44:58浏览次数:48  
标签:playwright Python 18 drop 拖拽 locator drag Playwright page

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_drop

        This 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**

        ```py
        await 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}
        )
        ```

        ```py
        page.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

标签:playwright,Python,18,drop,拖拽,locator,drag,Playwright,page
From: https://www.cnblogs.com/du-hong/p/17559838.html

相关文章

  • python:exec和eval函数使用
    我的案例方法:#函数公共配置defdebug_function(debug_req,function_text):try:exec(function_text)re=eval(debug_req)return{'code':200,'msg':'获取成功','data':re}exceptExceptionase:......
  • Python模板字符串Template如:${变量名称}
    1.概述如果你在操作字符串,如果你操作的字符串内容很多,希望字符串中的内容能够根据规则动态替换,并且在长篇幅的字符串中需要替换任意位置任意次数的字符,使用str提供的replace方法代码会写的非常复杂,且出错不易排查。在这个场景中试试Template类把,他能够创建一个模板替换字符串。......
  • 1、python脚本模拟登陆启信宝
    ##coding:utf-8#importrequests#fromlxmlimportetree#classlogin(object):#def__init__(self):#self.headers={#'Referer':'http://www.qixin.com/auth/login?return_url=%2F',#'User-......
  • 【转】loguru,一个神奇的 python 库
    转载来源:微信公众号:程序员学长 https://mp.weixin.qq.com/s/csxPONEaUbTdoRMd9opuMw大家好,我是小寒。今天给大家分享一个神奇的python库,loguruhttps://github.com/Delgan/loguruLoguru是一个旨在为Python带来愉快的日志记录的库,它可以完全增强你的日志记录体验,并且非常......
  • Python 动态加载模块
    Python动态加载模块-lwp-boy-博客园(cnblogs.com)python动态导入模块import_module和重载reload-掘金(juejin.cn)关于Python的动态导入(import)-知乎(zhihu.com)1,啥叫动态加载:动态加载指在程序运行中,动态的加载模块,而不是在运行之前利用import或from...imp......
  • python+requests库接口自动化测试(超详细)
         ......
  • Python元类详解
    Python中万物皆对象Python是一门面向对象的语言,所以Python中数字、字符串、列表、集合、字典、函数、类等都是对象。利用type()来查看Python中的各对象类型In[11]:#数字In[12]:type(10)Out[12]:intIn[13]:type(3.1415926)Out[13]:floatIn[14]:#字符串......
  • 《流畅的Python》 读书笔记 第二章数据结构(2) 231011
    2.5对序列使用+和*通常+号两侧的序列由相同类型的数据所构成,在拼接的过程中,两个被操作的序列都不会被修改,Python会新建一个包含同样类型数据的序列来作为拼接的结果+和*都遵循这个规律,不修改原有的操作对象,而是构建一个全新的序列l1=[1,2,3]l2=[4,5,6]print(id(l......
  • Python随机波动率(SV)模型对标普500指数时间序列波动性预测|附代码数据
    原文链接:http://tecdat.cn/?p=22546 原文出处:拓端数据部落公众号 最近我们被客户要求撰写关于随机波动率(SV)模型的研究报告,包括一些图形和统计输出。资产价格具有随时间变化的波动性(逐日收益率的方差)。在某些时期,收益率是高度变化的,而在其他时期则非常平稳。随机波动率模型......
  • Python爬虫必杀技:XPath
    XPath是什么XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力。跟BeautifulSoup4一样都是用来解析页面内容的工具,只......