首页 > 其他分享 >软件测试|web自动化测试神器playwright教程(二十六)

软件测试|web自动化测试神器playwright教程(二十六)

时间:2023-08-06 17:33:06浏览次数:38  
标签:web None playwright locator drag context page 软件测试

在这里插入图片描述

前言

我们使用selenium进行元素拖拽时,通常要使用ActionChains来实现drag_and_drop的操作,playwright同样可以实现元素的拖拽和释放的操作。

按住元素从页面的一个位置拖动到另外一个位置,有2种方式可以实现

  • locator.drag_to(target: locator) 先定位元素,调用drag_to方法到目标元素
  • page.drag_and_drop(source: str, target: str) page对象直接调用

示例场景

我们以这个网页为例,介绍playwright的元素拖拽和释放的操作,网页地址:https://sahitest.com/demo/dragDropMooTools.htm,页面如下:

在这里插入图片描述

拖拽操作

locator.drag_to()可以实现拖放操作,该操作将:

  • 将鼠标悬停在要拖动的元素上
  • 按鼠标左键
  • 将鼠标移动到将接收放置的元素
  • 松开鼠标左键

语法示例:

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

示例如下:

from playwright.sync_api import Playwright, sync_playwright, expect


def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://sahitest.com/demo/dragDropMooTools.htm")
    page.locator("#dragger").drag_to(page.locator("text=Item 1"))
    page.pause()
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

拖动和释放操作

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:

注:source 和 target 是字符串格式,也就是传selector 选择器的方法

语法如下:

page.drag_and_drop(locator,  loacator)
from playwright.sync_api import Playwright, sync_playwright, expect


def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://sahitest.com/demo/dragDropMooTools.htm")
    page.drag_and_drop('#dragger', 'text=Item 2')
    page.pause()
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

运行脚本,结果如下图:

在这里插入图片描述

鼠标拖动

想精确控制拖动操作,可以使用较低级别的方法,如locator.hover()、mouse.down()、mouse.move()和mouse.up()。代码如下:

from playwright.sync_api import Playwright, sync_playwright, expect


def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.get_by_text('Drag me').hover()
    page.mouse.down()
    page.locator('text=Item 3').hover()
    page.mouse.up()
    page.pause()
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

运行脚本,界面如下所示:

在这里插入图片描述

总结

本文主要介绍了playwright的元素拖拽和释放操作,与selenium一样,playwright同样支持元素拖拽操作,不过playwright的拖拽操作比selenium更加简单。

标签:web,None,playwright,locator,drag,context,page,软件测试
From: https://www.cnblogs.com/hogwarts/p/17609633.html

相关文章

  • 基于web技术的大百科书店网站设计与实现
    随着社会的快速发展,计算机的影响是全面且深入的。人们生活水平的不断提高,日常生活中人们通过网络购买图书的数量在不断增加,网上书店的数量更是不断增加,使得大百科书店网站的开发成为一件有意义的事情。大百科书店网站主要是借助计算机,通过对大百科书店网站所需的信息管理,增加用户的......
  • Deconstructf-2023-WEB
    比赛比较简单,只做web,也是ak了。where-are-the-cookies 查看robots.txtcookie是no的base64编码,改成yes的base64即可  why-are-types-weird password为 sha1('aaroZmOk')//0e66507019969427134894567494305185566735,sha1后开头是0通过若比较,登入进去尝试注入,根......
  • web日刷
    今天是简单反序列化1<?php2include'flag.php';3classpkshow4{5functionecho_name()6{7return"Pkverysafe^.^";8}9}1011classacp12{13protected$cinder......
  • JavaWeb之Servlet入门版教务系统(二)
    本次要分享的内容是之前教务系统中系统管理模块下的角色列表功能,包括对角色信息进行增删改查以及对当前的用户进行角色的分配(重点讲解)。首先还是需要使用mysql数据库准备一张角色表,建表语句如下:DROPTABLEIFEXISTS`sys_role`;CREATETABLE`sys_role`(`role_id`int(11)NO......
  • .Net Web API 005 Controller上传小文件
    1、附属文件对象定义一般情况下,系统里面的文件都会附属一个对象存在,例如用户的头像文件,会附属用户对象存在。邮件中的文件会附属邮件存在。所以在系统里面,我们会创建一个附属文件对象,命名为AttachedFileEntity。其定义如下所示。///<summary>///附属文件实体对象///</summ......
  • 创建一个基于SpringBoot的web项目
    1、使用国内地址创建SpringBoot项目国内地址:https://start.springboot.io/2、项目结构1:Java目录下放Java相关文件2:static目录下放.css.html.js等文件,包括图片之类的3:templates目录下放模板文件4:放SpringBoot主要配置文件3、创建基于SpringBoot的web案例在上面基础之上,进行下......
  • 《软件测试的艺术》原书第三版 - 第六章 - 更高级别的测试
    第六章更高级别的测试软件产品开发周期的模型软件最终用户的要求转换为一系列书面的需求。这些需求就是该软件产品要实现的目标。通过评估可行性与成本、消除相抵触的用户需求、建立优先级和平衡关系,将用户需求转换为具体的目标。将上述目标转换为一个准确的产品规格说明,将......
  • 漏洞发现-web应用之漏洞探针利用修复
    原理分析1.已知CMS---如常见的dedecms.discuz,wordpress等源码结构,这种一般采用非框架类开发,但也有少部分采用的是框架类开发,针对此类源码程序的安全检测,我们要利用公开的漏洞进行测试,如不存在可采用白盒代码审计自行挖掘。(1.在漏洞平台如seebug、cnvd搜索关键字2.使用工具......
  • 《软件测试的艺术》原书第三版 - 第四章 - 测试用例的设计
    第四章测试用例的设计白盒测试白盒测试关注的是测试用例执行的程度或覆盖程序逻辑结构(源代码)的程度。完全的白盒测试是将程序中每条路径都执行到,然而对一个带有循环的程序来说,完全的路径测试并不切合实际。逻辑覆盖测试判定覆盖或分支覆盖是较强一些的逻辑覆盖准则。该准......
  • 10.2 web服务器
    Web客户端和服务器之间的交互用的是一个基于文本的应用级协议,叫做HTTP(HypertextTransferProtocol,超文本传输协议)。HTTP是一个简单的协议。一个Web客户端(即浏览器)打开一个到服务器的因特网连接,并且请求某些内容。服务器响应所请求的内容,然后关闭连接。浏览器读取这些内容,并把......