Playwrigh
文章目录
前言
Playwright是由Microsoft开发的一款开源的自动化测试工具,首次开源于2020年1月,主要用于对Web应用进行UI自动化测试。
一、Playwrigh用途
1.用途
1.1 功能定位:Playwright是一个端到端的测试工具,允许开发者创建跨浏览器和跨平台的自动化测试脚本。
1.2 支持浏览器:Playwright支持所有现代渲染引擎,包括Chromium(Chrome、Edge)、Firefox和WebKit(Safari),可以在不同浏览器中执行自动化测试。
1.3 跨平台能力:Playwright能够在Windows、Linux和macOS上运行,实现跨平台测试。
1.4 编程语言支持:Playwright支持多种编程语言,包括JavaScript/TypeScript、Python、Java、.NET等,开发者可以根据自己的喜好和项目需求选择合适的语言。
2.配置与安装(python环境结合浏览器例子,工具pycharm和谷歌浏览器)
2.1 安装Playwright库:
对于Python环境,可以使用pip命令安装Playwright依赖库。
pip install playwright
2.2 安装浏览器驱动文件:
在安装Playwright库后,需要安装Chromium、Firefox、WebKit等浏览器的驱动文件。这通常可以通过Playwright提供的命令行工具来完成。
python -m playwright install
2.3 打开已有浏览器(详情见上博客)
cd D:\Program Files\Google\Chrome\Application && chrome.exe --remote-debugging-port=1262 --user-data-dir="D:\playwright\user_data"
3.函数介绍
3.1 get_by_label函数
方法通过关联标签的文本查找表单控件。这通常用于定位具有特定
<label for="password-input">Password:</label>
<input id="password-input" type="password">
可以使用page.get_by_label()方法定位到“Password:”标签对应的输入框,并填写密码:可以使用page.get_by_label()方法定位到“Password:”标签对应的输入框,并填写密码:
page.get_by_label("Password").fill("secret")
# Time input
page.get_by_label("Appointment time").fill("13:15")
# Local datetime input
page.get_by_label("Local time").fill("2020-03-02T05:15")
3.2 get_by_role函数
方法通过显式和隐式可访问性属性进行定位。它根据元素的角色(role)来查找元素,这些角色通常由ARIA属性(如role属性)或HTML元素的隐式角色定义。这种方法反映了用户和辅助技术(如屏幕阅读器)如何感知页面,因此非常适合用于提高网页的可访问性。
3.2.1 假设有以下HTML代码:role是按钮属性
<button role="button" aria-label="Sign in">Sign In</button>
可以使用page.get_by_role()方法定位到按钮,并执行点击操作:
page.get_by_role("button", name="Sign in").click()
3.2.2 假设有以下HTML代码:role是复选框属性
<input type="checkbox" role="checkbox" aria-label="Subscribe" id="subscribe-checkbox">
page.get_by_role("checkbox", name="Subscribe").check()
3.3 get_by_text函数
是一个用于定位页面元素的方法。该方法通过查找与给定文本内容相匹配的元素来定位页面上的一个或多个元素。
参数:
text:这是该方法的主要参数,用于指定要定位的元素的文本内容。
exact(可选):这是一个布尔值参数,用于指定是否进行精确匹配。如果设置为 True,则只有与给定文本完全匹配的元素才会被定位。如果设置为 False 或省略,则可能会定位到包含给定文本内容的部分匹配元素。
例子:如果页面上有多个元素包含“提交”文本,但你想要定位并操作第一个精确匹配的元素,你可以使用 exact=True 参数:
page.get_by_text('提交', exact=True).click()
3.4 其他函数
浏览器启动相关:
playwright.chromium.launch(): 启动Chromium浏览器实例。
playwright.firefox.launch(): 启动Firefox浏览器实例。
playwright.webkit.launch(): 启动WebKit浏览器实例。
页面操作相关:
browser.newPage(): 在浏览器中打开一个新页面。
page.goto(url): 转到指定的URL。
page.waitForSelector(selector): 等待页面上匹配指定选择器的元素出现。
page.click(selector): 单击匹配指定选择器的元素。
page.type(selector, text): 在匹配指定选择器的输入字段中输入文本。
page.evaluate(expression): 在页面上下文中执行指定的JavaScript表达式。
page.screenshot(options): 截取页面的屏幕截图。
page.waitForNavigation(): 等待页面完成导航。
page.close(): 关闭当前页面。
page.get_by_placeholder(placeholder): 根据元素的占位符文本定位输入字段。例如,page.get_by_placeholder(“Enter email”)可以定位到一个占位符为“Enter email”的输入框。
page.locator(“xpath=expression”): 使用XPath表达式定位元素。例如,page.locator(“xpath=//button[@type=‘submit’]”)可以定位到一个类型为“submit”的按钮。
3.5 其他的看官方文档
二、浏览器已开页面和Playwright结合
1.引入库
代码如下(示例):
from playwright.sync_api import Playwright, sync_playwright
import re
import time
2.内容
browser = playwright.chromium.connect_over_cdp("http://localhost:1355")
default_context = browser.contexts[0]
page = default_context.pages[0]
print(page)
global count
count = 1
# page1.get_by_role("link", name="......").click()
with page.expect_popup() as page1_info:
page.get_by_title(".......").click()
page1 = page1_info.value
time.sleep(1)
while(count>=1):
try:
page1.locator("li").filter(has_text="处理").click()
page1.get_by_role("button", name="刷新").click()
page1.get_by_role("button", name="筛选").click()
try:
all_elements = page1.query_selector_all("text=王调")
except:
count=all_elements.count()
print("处理的为:"+count)
page1.close()
break
for element in all_elements:
count=count+1
element.click()
time.sleep(1)
elements = page1.query_selector_all("text=..........")
# 检查是否找到至少一个匹配的元素
if elements:
# 获取第一个元素的内部文本
first_element = elements[0]
text_tt = first_element.inner_text()
parts = text_tt.split(',')
# 取第二个部分(即逗号后面的部分)
second_part = parts[1]
# 再次分割第二部分,以短横线(-)为分隔符
name_parts = second_part.split('-')
# 取第一个名字(即第二个短横线前面的部分)
person_name = name_parts[0]
# 输出结果
print(person_name)
else:
print("未找到匹配的元素")
# print(text_tt)
# # 分割字符串为列表,以逗号为分隔符
#后面写自己需要的内容
except Exception as e:
print(f"Error processing row {index}: {e}")
continue
三、代码生成库
playwright codegen
注意
提示:若通过这个方式不能找到元素,可以使用找他的上一层。