Puppeteer - XPath 属性



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

但是,如果id属性不存在,我们可以使用其他属性,例如class、name等等。如果id、name和class等属性不存在,我们可以利用仅对该标签可用或属性及其值的组合来识别元素。为此,我们必须使用xpath表达式。

如果只有一个属性的xpath表达式识别多个元素,我们可以使用多个属性在xpath表达式中定位单个元素。

只使用一个属性编写xpath的格式如下:

//tagname[@attribute='value']

对于多个属性,我们可以应用AND和OR条件。使用AND条件编写xpath的格式:

//tagName[@attribute1='value1'] [@attribute2='value2']

或者,

//tagName[@attribute1='value1' and @attribute2='value2']

使用OR条件编写xpath的格式如下:

//tagName[@attribute1='value1' or @attribute2='value2']

我们还可以通过对属性应用NOT条件来识别元素。使用NOT条件编写xpath的格式:

//tagname[not(@attribute='value')]

让我们使用alt属性来识别页面上下面突出显示的徽标,然后单击它。

Tutorialspoint Category

该元素的xpath如下:

//img[@alt='tutorialspoint'].

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

首先,请按照Puppeteer基本测试章节中的步骤1到2操作,步骤如下:

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

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

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

Node Modules

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

Testcase1.JS

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

//Puppeteer library
const pt= require('puppeteer')
async function selectorAttributeXpath(){
   //launch browser in headed mode
   const browser = await pt.launch()
   //browser new page
   const page = await browser.newPage()
   //launch URL
   await page.goto('https://tutorialspoint.com/questions/index.php')
   //identify element with relative xpath then click
   const b = (await page.$x("//img[@alt='tutorialspoint']"))[0]
   b.click()
   //wait for sometime
   await page.waitForTimeout(4000)
   //obtain URL after click
   console.log(await page.url())
}
selectorAttributeXpath()

步骤4 - 使用以下命令执行代码:

node <filename>

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

node testcase1.js
Mac Book

成功执行命令后,单击徽标图像后导航到的页面的URL - https://tutorialspoint.com/index.htm 将打印在控制台中。

广告