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

简介: 软件测试|web自动化测试神器playwright教程(四)

前言

上一篇文章我们介绍了playwright的定位方法,在实际操作中,我们找到元素之后,就要对元素进行操作,达到与页面进行交互的目的,我们主要的操作包括鼠标单击,输入文本,复选框操作,单选按钮,选择选项,上传文件等。本篇文章我们就来介绍playwright如何实现这些操作。

fill() 输入文本

使用 locator.fill() 是填写表单字段的最简单方法。它聚焦元素并input使用输入的文本触发事件。它适用于,和[contenteditable]元素。例如我们在百度的搜索框中输入我们想要搜索的内容,代码如下:

from playwright.sync_api import sync_playwright


with sync_playwright() as p:
    browser = p.chromium.launch(headless=False, slow_mo=1000)
    page = browser.new_page()
    page.goto("https://www.baidu.com")
    print(page.title())
    page.fill('#kw', "theshy")
    page.wait_for_timeout(5000)
    browser.close()

我们也可以模拟注册操作,部分网站注册时需要提供用户名,邮箱,生日并输入密码等信息,我们也可以使用playwright来模拟这部分操作,代码如下:

# Text 文本框输入
page.get_by_role("textbox").fill("theshy")

# 根据label 定位 Date 日期输入
page.get_by_label("Birth date").fill("1999-12-31")

# 邮箱输入
page.get_by_label("mail").fill("123456789@qq.com")

# 密码输入
page.get_by_label("password").fill("play123456789")

# 确认密码
page.get_by_label("confirm_password").fill("play123456789")

当输入框有label标签时,我们可以直接根据label标签定位,非常便捷,示例代码如下:

# 直接根据label定位
    page.get_by_label("用 户 名:").fill("theshy")
    page.get_by_label("密     码:").fill("play123456789")

type() 输入文本

与fill()不同,type()输入文本是以一个字符一个字符输入的,模拟我们在键盘上键入的每一个字符,示例如下:


page.locator('#area').type('Hello World!')

注:type() 方法将发出所有必要的键盘事件,所有keydown, keyup,keypress事件就位,甚至可以指定delay按键之间的可选操作来模拟真实的用户行为。大多数时候,page.fill()会正常工作。如果页面上有特殊的键盘处理,您只需要键入字符。

click() 鼠标点击

我们在网页上进行操作的时候,免不了要执行点击操作,click()方法就能帮助我们实现简单的点击操作。使用方法如下:

# Generic click
page.get_by_role("button").click()

# Double click
page.get_by_text("Item").dblclick()

# Right click
page.get_by_text("Item").click(button="right")

# Shift + click
page.get_by_text("Item").click(modifiers=["Shift"])

# Hover over element
page.get_by_text("Item").hover()

# Click the top left corner
page.get_by_text("Item").click(position={ "x": 0, "y": 0})

使用示例,当我们输入了用户名密码之后,通常情况下,我们点击登录按钮即可完成登录操作。

    page.get_by_label("用 户 名:").fill("theshy")
    page.get_by_label("密     码:").fill("play123456789")
    page.locator("text=登录").click()
    # page.click("text=登录")

文件上传

一般情况下,可以使用locator.set_input_files()方法选择要上传的输入文件。它期望第一个参数指向类型为 的输入元素"file"。数组中可以传递多个文件。如果某些文件路径是相对的,则它们将相对于当前工作目录进行解析。空数组清除所选文件。

# Select one file
page.get_by_label("Upload file").set_input_files('myfile.pdf')

# Select multiple files
page.get_by_label("Upload files").set_input_files(['file1.txt', 'file2.txt'])

# Remove all the selected files
page.get_by_label("Upload file").set_input_files([])

# Upload buffer from memory
page.get_by_label("Upload file").set_input_files(
    files=[
        {"name": "test.txt", "mimeType": "text/plain", "buffer": b"this is a test"}
    ],
)

如果当前没有输入元素(它是动态创建的),可以通过处理page.on("filechooser")事件或在您的操作中使用相应的等待方法:

with page.expect_file_chooser() as fc_info:
    page.get_by_label("Upload file").click()
file_chooser = fc_info.value
file_chooser.set_files("myfile.pdf")

select 下拉框

使用locator.select_option()选择元素中的一个或多个选项。可以指定选项value,或label选择。可以选择多个选项。

# Single selection matching the value
page.get_by_label('Choose a color').select_option('red')

# Single selection matching the label
page.get_by_label('Choose a color').select_option(label='Green')

# Multiple selected items
page.get_by_label('Choose multiple colors').select_option(['red', 'green', 'blue'])

复选框和单选

使用locator.set_checked()是选中和取消选中复选框或单选按钮的最简单方法。input[type=checkbox]此方法可与,input[type=radio]和元素一起使用[role=checkbox]。

# Check the checkbox
page.get_by_label('I agree to the terms above').check()

# Assert the checked state
assert page.get_by_label('Subscribe to newsletter').is_checked() is True

# Select the radio button
page.get_by_label('XL').check()

drag_to 拖动

这个操作和selenium的拖拽非常像,实现的功能也是一样的,这个方法将:

  • 将鼠标悬停在要拖动的元素上
  • 按鼠标左键
  • 将鼠标移动到将接收放置的元素
  • 松开鼠标左键
page.locator("#item-to-be-dragged").drag_to(page.locator("#item-to-drop-at"))

如果页面依赖于dragover正在调度的事件,则您至少需要移动两次鼠标才能在所有浏览器中触发它。要可靠地发出第二次鼠标移动,请重复mouse.move()或locator.hover()两次。操作顺序是:悬停拖动元素,鼠标向下,悬停放置元素,第二次悬停放置元素,鼠标向上。代码如下:

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

总结

本文主要介绍了playwright对于元素的操作,包括输入内容,鼠标点击,上传文件,拖拽元素等操作,相对于selenium来说,playwright在很多方面更加简单快捷,相对于selenium,有明显的优势。

相关文章
|
25天前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
81 8
|
23天前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
75 19
Selenium IDE:Web自动化测试的得力助手
|
25天前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
144 17
Selenium:强大的 Web 自动化测试工具
|
18天前
|
机器学习/深度学习 人工智能 jenkins
探索软件测试中的自动化与持续集成
【10月更文挑战第21天】 在软件开发的生命周期中,软件测试扮演着至关重要的角色。随着技术的进步和开发模式的转变,自动化测试和持续集成已经成为提高软件质量和效率的关键手段。本文将深入探讨自动化测试和持续集成的概念、实施策略以及它们如何相互配合以优化软件开发流程。我们将通过分析实际案例,展示这些技术如何在实际项目中发挥作用,以及面临的挑战和解决方案。此外,文章还将讨论未来趋势,包括人工智能在测试领域的应用前景。
67 17
|
30天前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
1月前
|
数据管理 测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
在当今快速迭代的软件开发环境中,自动化测试已成为确保软件质量和加速产品上市的关键手段。本文旨在探讨软件测试中的自动化测试策略,包括选择合适的自动化测试工具、构建有效的自动化测试框架以及实施持续集成和持续部署(CI/CD)。通过分析自动化测试的最佳实践,本文为软件开发团队提供了一系列实用的指南,以优化测试流程、提高测试效率并减少人为错误。
65 4
|
1月前
|
监控 测试技术 定位技术
探索软件测试中的自动化测试框架选择与实施###
本文不概述传统意义上的摘要内容,而是直接以一段对话形式引入,旨在激发读者兴趣。想象一下,你是一名勇敢的探险家,面前摆满了各式各样的自动化测试工具地图,每张地图都指向未知的宝藏——高效、精准的软件测试领域。我们将一起踏上这段旅程,探讨如何根据项目特性选择合适的自动化测试框架,并分享实施过程中的关键步骤与避坑指南。 ###
40 4
|
1月前
|
jenkins 测试技术 持续交付
软件测试中的自动化与持续集成
在现代软件开发过程中,自动化测试和持续集成已成为不可或缺的组成部分。本文将深入探讨自动化测试和持续集成的重要性、优势以及如何有效实施它们以提升软件质量和开发效率。通过具体案例分析,我们将展示这些技术如何在实际项目中发挥作用,并讨论其面临的挑战及应对策略。
50 3
|
3月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
175 3
|
29天前
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南