node.js - 如何通过 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']")));
解决方案
根据您共享的 HTML 来定位文本为myemail@example.com的元素,您可以使用以下解决方案:
var profile = await driver.wait(until.elementLocated(By.xpath("//div//p[@role='heading' and @data-email='myemail@example.com']")));