📖 前言
👋 简介
本章节介绍在对元素进行定位后的操作,达到与页面进行交互的目的,比如鼠标点击,输入文本,单选/多选的操作等。
💡 正文
1 输入文本
1.1 fill()
locator.fill()
是输入文本做简单,最常用的一个方法,它聚焦元素并input使用输入的文本出发事件
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://www.baidu.com")
print(page.title())
page.locator('#kw').fill('playwright')
page.locator('#su').click()
page.wait_for_timeout(3000)
browser.close()
1.2 type()
locator.type()
输入文本是以一个字符一个字符输入的,模拟我们在键盘上键入的每一个字符
from playwright.sync_api import sync_playwright
import time
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://www.baidu.com")
print(page.title())
page.locator('#kw').type('playwright')
page.locator('#su').click()
page.wait_for_timeout(3000)
browser.close()
执行代码会发现,打开百度的时候,输入playwright
的是一个字符一个字符输入的,但是速度很快需要仔细观察
备注:type()
方法相当于执行了所有必要的键盘事件,如keydown
,keyup
,keypress
事件,甚至可以指定delay
按键之间的可选操作来模拟真实的用户行为。
2 鼠标点击
通过使用locator.click()
方法来帮助我们实现简单的点击操作
# 单击
page.get_by_role("link", name="登录").click()
# 双击
page.get_by_text("登录").dblclick()
# 右键
page.get_by_role("link", name="登录").click(button="right")
# Control+左键
page.get_by_role("link", name="登录").click(modifiers=["Control"])
# Shift+左键
page.get_by_role("link", name="登录").click(modifiers=["Shift"])
# Shift+右键
page.get_by_role("link", name="登录").click(button="right", modifiers=["Shift"])
3 下拉框
使用locator.select_option()
选择元素中的一个或多个选项。可以指定选项value,或label选择。可以选择多个选项
# 选择一个
page.get_by_label('address').select_option('上海')
# 选择多个
page.get_by_label('address').select_option(['上海', '南京', '成都'])
4 单选/多选
选中和取消选中多选框或单选按钮, locator.check()
。此方法可用于 input[type=checkbox]
,input[type=radio]
和 [role=checkbox]
元素
# 选中
page.get_by_label('test').check()
# 取消选中
page.get_by_label('test').uncheck()
5 文件上传
使用locator.set_input_files()
方法选择要上传的输入文件
# 上传单个文件
page.get_by_label("file").set_input_files('file.txt')
# 上传多个文件
page.get_by_label("files").set_input_files(['file1.txt', 'file2.txt'])
# 移除所有文件
page.get_by_label("Upload file").set_input_files([])
# 从缓存中上传
page.get_by_label("Upload file").set_input_files(
files=[{"name": "test.txt", "mimeType": "text/plain", "buffer": b"this is a test"}],
)
6 聚焦元素
使用locator.focus()
聚焦给定的元素
page.get_by_label('password').focus()