Puppeteer - Xpath 轴


为了唯一地确定一个元素,我们可以借助 html 标签中的任何属性,也可以使用 html 标签上的属性组合。大多数情况下使用 id 属性,因为它对于页面来说是唯一的。

但是,如果 id 属性不存在,我们可以使用其他属性,例如类、名称等。如果 id、name 和 class 等属性不存在,我们可以利用仅对该标签可用的独特属性或属性及其值的组合来标识元素。

为此,我们必须使用 xpath 表达式。另外,如果页面上的元素是动态的,那么 xpath 选择器可能是一个不错的选择器。

xpath 是双向的,这意味着我们可以从父元素遍历到子元素,也可以从子元素遍历到父元素。xpath 轴的详细信息应在以下链接中提供 -

https://www.tutorialspoint.com/xpath/xpath_axes.htm

在下图中,让我们识别突出显示的编辑框并获取其类属性 - gsc-input 的值。

突出显示的编辑框

在上面的示例中,表中有两列(由 td 标签表示),其父级为 tr 标签。输入框位于第一列中。

因此 xpath 表达式应如下所示 -

//table/tbody/tr/child::td.

在这里,我们正在使用 xpath 选择器,因此我们必须使用方法:page.$x(xpath value)。有关此方法的详细信息将在 Puppeteer 定位器一章中讨论。

首先,请按照《Puppeteer 基本测试》一章中的步骤 1 至 2 进行操作,如下所示 -

步骤 1 - 在创建 node_modules 文件夹的目录中创建一个新文件(Puppeteer 和 Puppeteer 核心的安装位置)。

Puppeteer 安装的详细信息将在 Puppeteer 安装章节中讨论。

右键单击创建 node_modules 文件夹的文件夹,然后单击“新建文件”按钮。

节点模块

步骤 2 - 输入文件名,例如 testcase1.js。

测试用例1.JS

步骤 3 - 在创建的 testcase1.js 文件中添加以下代码。

//Puppeteer library
const pt= require('puppeteer')
async function selectorAxesXpath(){
   //launch browser in headless mode
   const browser = await pt.launch()
   //browser new page
   const page = await browser.newPage()
   //launch URL
   await page.goto('https://www.tutorialspoint.com/index.htm')
   //identify element with xpath axes
   const n = (await page.$x("//table/tbody/tr/child::td"))[0]
   // get value of class attribute
   let v = await page.$eval("input", n => n.getAttribute("class"))
   console.log(v)
}
selectorAxesXpath()

步骤 4 - 使用下面给出的命令执行代码 -

node <filename>

因此,在我们的示例中,我们将运行以下命令 -

node testcase1.js
节点_testcase1.jpg

成功执行命令后,元素 gsc-input 的类属性值将打印在控制台中。