自动化测试工具playwright中文文档-------1.编写测试

目录

介绍

第一个测试

操作

导航

交互(Interactions)

基本操作

断言

测试隔离

使用夹具(Fixtures)


介绍

Playwright 测试非常简单,它们

  • 执行操作,
  • 并断言状态是否符合预期。

在执行任何操作之前,无需等待任何内容:Playwright 在执行每个操作之前会自动等待一系列可操作性检查通过。

此外,在执行检查时也不需要处理竞态条件------Playwright 的断言设计方式能够描述最终需要满足的期望。

就这样!这些设计选择允许 Playwright 用户完全忘记他们测试中的不稳定超时和竞态检查。

您将学习

  • 如何编写第一个测试
  • 如何执行操作
  • 如何使用断言
  • 测试如何在隔离环境中运行
  • 如何使用测试钩子

第一个测试

请查看以下示例,了解如何编写测试。请注意文件名如何遵循以 test_ 为前缀的约定,以及每个测试名称的命名方式。

# test_example.py
import re  
from playwright.sync_api import Page, expect  
  
def test_has_title(page: Page):  
    page.goto("https://playwright.dev/")  
  
    # 期待标题"包含"一个子字符串。  
    expect(page).to_have_title(re.compile("Playwright"))  
  
def test_get_started_link(page: Page):  
    page.goto("https://playwright.dev/")  
  
    # 点击"开始使用"链接。  
    page.get_by_role("link", name="Get started").click()  
  
    # 期待页面有一个标题为"Installation"的标题。  
    expect(page.get_by_role("heading", name="Installation")).to_be_visible()

定义了两个测试函数,分别用于检查 Playwright 官网的标题和点击"开始使用"链接后的页面内容。

  1. test_has_title 函数通过 page.goto 方法导航到 Playwright 官网,并使用 expect(page).to_have_title 方法来检查页面标题是否包含"Playwright"这个子字符串。这里使用了正则表达式 re.compile("Playwright") 来匹配标题。

  2. test_get_started_link 函数同样先导航到 Playwright 官网,然后使用 page.get_by_role 方法找到"开始使用"链接(假设该链接的角色是"link"且其名称是"Get started"),并执行点击操作。之后,再次使用 page.get_by_role 方法找到标题为"Installation"的标题,并使用 expect(...).to_be_visible 方法来检查该标题是否可见。这验证了点击"开始使用"链接后,用户被正确地导航到了安装指南页面。

操作

导航

大多数测试将从将页面导航到URL开始。之后,测试将能够与页面元素进行交互。

page.goto("https://playwright.dev/")

Playwright 将在继续之前等待页面达到加载状态。了解更多关于page.goto() 选项的信息。

交互(Interactions)

执行操作始于定位元素。Playwright 使用 Locators API来实现这一点。Locator 表示在任何时刻在页面上查找元素(或多个元素)的一种方式,了解更多关于可用的不同类型 Locator 的信息。Playwright 将在执行操作之前等待元素变为可操作状态actionable,因此无需等待它变为可用状态。

# Create a locator.
get_started = page.get_by_role("link", name="Get started")

# Click it.
get_started.click()

在大多数情况下,这行代码会写成一行:

page.get_by_role("link", name="Get started").click()

使用Playwright的API来定位页面上角色(role)为"link",且其名称(name)为"Get started"的链接元素,并对该元素执行点击(click)操作。

基本操作

这是Playwright中最常用的操作列表。请注意,还有更多其他操作,因此请确保查阅Locator API部分以了解更多信息。

操作 描述
locator.check() 选中复选框
locator.click() 点击元素
locator.uncheck() 取消选中复选框
locator.hover() 鼠标悬停在元素上
locator.fill() 填写表单字段,输入文本
locator.focus() 使元素获得焦点
locator.press() 按下单个键
locator.set_input_files() 选择文件以进行上传
locator.select_option() 在下拉列表中选择选项

断言

Playwright 包含了断言功能,它会等待直到满足预期的条件。使用这些断言可以使测试更加稳定且不易出错。例如,以下代码将等待直到页面标题包含 "Playwright":

import re  
from playwright.sync_api import expect  
  
expect(page).to_have_title(re.compile("Playwright"))

以下是最常用的异步断言列表。请注意,还有更多其他断言需要熟悉:

断言 描述
expect(locator).to_be_checked() 复选框被选中
expect(locator).to_be_enabled() 控件被启用
expect(locator).to_be_visible() 元素可见
expect(locator).to_contain_text() 元素包含文本
expect(locator).to_have_attribute() 元素具有某个属性
expect(locator).to_have_count() 元素列表具有给定长度
expect(locator).to_have_text() 元素匹配文本
expect(locator).to_have_value() 输入元素具有值
expect(page).to_have_title() 页面具有标题
expect(page).to_have_url() 页面具有URL

测试隔离

Playwright的Pytest插件基于测试夹具(fixtures)的概念,如内置的页面夹具(page fixture),它会被传递到您的测试中。由于浏览器上下文(Browser Context)的存在,测试之间的页面是隔离的。浏览器上下文相当于一个新的浏览器配置文件,每个测试都会获得一个全新的环境,即使在单个浏览器中运行多个测试也是如此。

test_example.py

from playwright.sync_api import Page

def test_example_test(page: Page):
  pass
  # "page" belongs to an isolated BrowserContext, created for this specific test.

def test_another_test(page: Page):
  pass
  # "page" in this second test is completely isolated from the first test.

使用夹具(Fixtures)

您可以使用各种夹具(fixtures)在测试之前或之后执行代码,并在它们之间共享对象。一个函数作用域的夹具(如使用autouse=True)表现得像beforeEach/afterEach。而一个模块作用域的夹具(也使用autouse=True)则表现得像beforeAll/afterAll,它在所有测试之前运行一次,在所有测试之后也运行一次。

import pytest  
from playwright.sync_api import Page, expect  
  
# 定义一个函数作用域的夹具,它会自动应用于每个测试函数  
@pytest.fixture(scope="function", autouse=True)  
def before_each_after_each(page: Page):  
      
    print("测试运行之前")  
  
    # 在每个测试之前跳转到起始URL  
    page.goto("https://playwright.dev/")  
    yield  # yield 语句之后的代码会在测试函数执行完毕后执行  
      
    print("测试运行之后")  
  
def test_main_navigation(page: Page):  
    # 使用 expect API 进行断言  
    expect(page).to_have_url("https://playwright.dev/")
相关推荐
龙哥说跨境29 分钟前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
小白学大数据1 小时前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
flashman9111 小时前
python在word中插入图片
python·microsoft·自动化·word
菜鸟的人工智能之路1 小时前
桑基图在医学数据分析中的更复杂应用示例
python·数据分析·健康医疗
懒大王爱吃狼2 小时前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
秃头佛爷3 小时前
Python学习大纲总结及注意事项
开发语言·python·学习
深度学习lover4 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
API快乐传递者5 小时前
淘宝反爬虫机制的主要手段有哪些?
爬虫·python
阡之尘埃7 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
awonw10 小时前
[java][框架]springMVC(1/2)
测试工具·postman