《刚刚问世》系列初窥篇-Java+Playwright自动化测试-7-元素基础定位方式-下篇 (详细教程)

1.简介

上一篇主要是讲解我们日常工作中在使用Playwright进行元素定位的一些比较常用的基础定位方式的理论基础知识以及在什么情况下推荐使用。今天这一篇讲解和分享一下剩下部分的基础定位方式。

2.过滤器定位

例如以下 DOM 结构,我们要在其中单击第二个产品卡的购买按钮。我们有几个选项来过滤定位器以获得正确的定位器。

《刚刚问世》系列初窥篇-Java+Playwright自动化测试-7-元素基础定位方式-下篇 (详细教程)_第1张图片

2.1按文本过滤

定位器可以使用 locator.filter()方法按文本进行过滤。它将搜索元素内某处的特定字符串,可能在后代元素中,不区分大小写。您还可以传递正则表达式。

1.使用文本

 
  

less

代码解读

复制代码

page.getByRole(AriaRole.LISTITEM) .filter(new Locator.FilterOptions().setHasText("Product 2")) .getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Add to cart")) .click();

2.使用正则表达式

 
  

less

代码解读

复制代码

page.getByRole(AriaRole.LISTITEM) .filter(new Locator.FilterOptions() .setHasText(Pattern.compile("Product 2"))) .getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Add to cart")) .click();

2.2按没有文本进行筛选

通过没有文本进行筛选:

 
  

less

代码解读

复制代码

// 5 in-stock items assertThat(page.getByRole(AriaRole.LISTITEM) .filter(new Locator.FilterOptions().setHasNotText("Out of stock"))) .hasCount(5);

2.3子项/后代过滤

定位器支持一个选项,即仅选择具有或没有与另一个定位器匹配的后代的元素的元素。因此,您可以按任何其他定位器进行过滤,例如 Locator.getByRole()、Locator.getByTestId()、Locator.getByText() 等。

《刚刚问世》系列初窥篇-Java+Playwright自动化测试-7-元素基础定位方式-下篇 (详细教程)_第2张图片

 
  

less

代码解读

复制代码

page.getByRole(AriaRole.LISTITEM) .filter(new Locator.FilterOptions() .setHas(page.GetByRole(AriaRole.HEADING, new Page.GetByRoleOptions() .setName("Product 2")))) .getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Add to cart")) .click()

我们还可以断言产品卡,以确保只有一个:

 
  

less

代码解读

复制代码

assertThat(page .getByRole(AriaRole.LISTITEM) .filter(new Locator.FilterOptions() .setHas(page.GetByRole(AriaRole.HEADING, new Page.GetByRoleOptions().setName("Product 2")))) .hasCount(1);

过滤定位器

你可能感兴趣的:(《刚刚问世》系列初窥篇-Java+Playwright自动化测试-7-元素基础定位方式-下篇 (详细教程))