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

文章讲述了在自动化工作中如何使用Playwright库来定位和获取HTML表格中的数据。通过理解table、tr、th、td等标签结构,利用xpath表达式选取特定行和列。示例代码展示了获取表格行数、特定行数据以及单元格数据的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

前言

我们在进行自动化工作中,还会遇到表格的问题,比如下面的情况:

在这里插入图片描述
如果我们想要获取表格内的数据,就需要我们先定位表格内的元素。

table 表格场景

在这里插入图片描述
我们可以从表格结构中发现,table页面有这几个明显的标签:table、tr、th、td

  • table 标示一个表格
  • tr 标示这个表格的一行
  • th 定义表头单元格
  • td 定义单元格标签,一组td标签将将建立一个单元格,td标签必须放在tr标签内

xpath 定位table 表格

我们通常使用xpath定位来定位表格数据,语法如下:

//*[@id="表格id"]/tbody/tr[m]/td[n]

参数说明:m表示第几行,n表示第几列

获取当前表格行数

可以通过定位有多少个tr 元素,计算tr 的个数,就是总行数

语法示例:

//*[@id="table"]/tbody/tr

playwright 获取table表格总行数示例

number = page.locator('//*[@id="table"]/tbody/tr')
print(number.count())   # 统计个数

获取表格数据

  1. 获取表格第1行的数据
n = page.locator('//*[@id="table"]/tbody/tr[1]')
print(n.inner_text())   # 获取第一行数据
  1. 获取第3列的数据
 a = page.locator('//*[@id="table"]/tbody/tr/td[3]')
    for td in a.all():
        print(td.inner_text())
  1. 获取第1行第3列数据
b = page.locator('//*[@id="table"]/tbody/tr[1]/td[3]')
print(b.inner_text())  

示例

我们还是以上方的表格为例,展示一下playwright对于表格的定位,代码如下:

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/tableTest.htm")
    # 计算总行数
    n = page.locator('//*[@id="t4"]/tbody/tr')
    print(n.count())
    # 打印表格第一行信息
    n1 = page.locator('//*[@id="t4"]/tbody/tr[1]')
    for a in n1.all():
        print(a.inner_text())
	# 打印第一行第三列的数据
    n2 = page.locator('//*[@id="t4"]/tbody/tr[1]/td[3]')
    print(n2.count())
    page.get_by_role("cell", name="EMPLOYEE_ID").click()
    page.get_by_role("cell", name="steven.king@gmail.com").click()

    # ---------------------
    context.close()
    browser.close()


with sync_playwright() as playwright:
    run(playwright)

--------------------------------------------------
输出结果如下:
8
EMPLOYEE_ID	FIRST_NAME	LAST_NAME	EMAIL	PHONE_NUMBER	HIRE_DATE	JOB_ID
LAST_NAME

总结

本文主要介绍了playwright对表格的处理,后续我们将介绍playwright的其他用法。

更多技术文章

### 关于Java和Playwright结合使用的教程 Playwright 是一种功能强大的自动化测试框架,支持多种编程语言,其中包括 Java [^4]。以下是有关如何使用 Playwright 进行 Java 开发的相关信息。 #### 1. **安装 Playwright for Java** 要开始使用 Playwright 和 Java,首先需要设置开发环境并安装必要的依赖项。可以通过 Maven 或 Gradle 来管理项目的依赖关系。以下是一个典型的 Maven 配置示例: ```xml <dependency> <groupId>com.microsoft.playwright</groupId> <artifactId>playwright</artifactId> <version>1.37.0</version> <!-- 替换为最新版本 --> </dependency> ``` 对于 Gradle 用户,则可以添加如下配置: ```gradle implementation 'com.microsoft.playwright:playwright:1.37.0' // 替换为最新版本 ``` 完成依赖项的引入后,还需要初始化浏览器实例以便运行自动化脚本 [^5]。 --- #### 2. **基本用法** 下面展示了一个简单的 Java 程序,演示了如何利用 Playwright 打开页面、填写表单以及截屏保存等功能。 ```java import com.microsoft.playwright.*; public class Main { public static void main(String[] args) { try (Playwright playwright = Playwright.create()) { // 创建 Playwright 实例 Browser browser = playwright.chromium().launch(new LaunchOptions() // 启动 Chromium 浏览器 .setHeadless(false)); // 设置无头模式关闭 Page page = browser.newPage(); // 新建一个新标签页 page.navigate("https://example.com"); // 导航至目标网站 System.out.println(page.title()); // 输出当前页面标题 // 填写输入框 page.fill("input[name='username']", "testUser"); // 截图保存 page.screenshot(new ScreenshotOptions() .setPath(Paths.get("screenshot.png"))); browser.close(); // 关闭浏览器 } } } ``` 此代码片段展示了如何启动浏览器、访问指定 URL 并执行一些基础操作 [^4]。 --- #### 3. **高级特性** ##### a. **跨浏览器兼容性** Playwright 不仅限于 Chromium 浏览器的支持,还能够处理 Firefox 和 WebKit 的场景 [^2]。尽管目前官方文档更倾向于推荐 Chromium 版本作为首选方案,但在某些特殊需求下也可以尝试其他引擎。 ##### b. **移动端仿真** 如果希望模拟不同设备上的行为表现(比如 iPhone),则可通过 `devices` API 提供的功能实现这一目的 [^3]: ```java DeviceDescriptor device = Devices.iPhone_12_Pro(); BrowserContext context = browser.newContext(ContextOptions.create().setViewportSize(device.viewportSize())); Page mobilePage = context.newPage(); mobilePage.navigate("http://www.example.com/"); System.out.println(mobilePage.content()); context.close(); ``` 此处定义了一款特定型号手机屏幕尺寸参数,并将其应用于新建上下文中加载的内容呈现方式调整过程之中 [^3]。 --- #### 4. **调试技巧** 当遇到复杂问题或者定位错误困难时,启用日志记录可以帮助分析具体原因所在之处: ```java browser.contexts().forEach(context -> { context.onConsoleMessage(message -> System.out.println("[CONSOLE MESSAGE]" + message.text())); }); ``` 以上方法会捕获所有来自前端控制台打印出来的消息内容显示出来便于排查潜在隐患 [^4]。 --- ### 总结 综上所述,借助 Playwright 及其丰富的接口设计可以让开发者轻松构建起针对各类 web 应用程序进行全面覆盖式的功能性验证体系结构;与此同时,由于该库本身具备良好的扩展性和灵活性特点,在实际应用场景当中往往也能满足更多定制化需求方面的考量因素影响下的选择依据之一便是如此强大而便捷的技术手段所带来的价值体现形式多样化的可能性空间无限广阔前景光明未来可期值得深入探索研究学习掌握运用自如达到事半功倍的效果最终成就非凡事业梦想成真指日可待!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值