首页 > 解决方案 > 如何通过 Selenium 根据 HTML 定位文本为 My Name 的元素

问题描述

我正在尝试在 node.js 中使用 selenium-webdriver 和 mocha 来查找元素。我做得很好,但我有一个特定的谷歌页面的问题,它的 HTML 格式很差(许多标签没有关闭)。Selenium 不喜欢这样。这是标准的 Google 点击您的个人资料以登录页面。这是一个 HTML 示例。如何等待页面加载我的名字并点击它?似乎已关闭的唯一标签是 li。

<div class="vdE7Oc f3GIQ"><p role="presentation" 
class="wpW1cb">My Name<p class="uRhzae" role="heading" 
aria-level="2" data-email="myemail@example.com"
>myemail@example.com</div></div></li>

这是我尝试过的事情的列表(以及许多其他事情):

var profile = await driver.wait(until.elementLocated(By.partialLinkText("My Name")));
var profile = await driver.findElement(By.partialLinkText("My"));
var profile = await driver.findElement(By.xpath("//*[contains(., 'My Name')]"));
var profile = await driver.wait(until.elementLocated(By.css("p[email='myemail@example.com']")));
var profile = await driver.wait(until.elementLocated(By.xpath("//*[contains(., 'My Name')]")));
var profile = await driver.wait(until.elementLocated(By.partialLinkText("My")));
var profile = await driver.wait(until.elementLocated(By.xpath("//p[@email='myemail@example.com']")));

标签: node.jsseleniumselenium-webdriverxpathcss-selectors

解决方案


根据您共享的 HTML 来定位文本为myemail@example.com的元素,您可以使用以下解决方案:

var profile = await driver.wait(until.elementLocated(By.xpath("//div//p[@role='heading' and @data-email='myemail@example.com']")));

推荐阅读