java - Selenium Chromedriver 无法通过 LinkText 找到元素,但 Geckodriver 可以

java - Selenium Chromedriver can't find element by LinkText but Geckodriver does

所以我要点击的元素位于此处:

<li class=" ">
    <a href="google.de">
        <i class="fa fa-lg fa-fw fa-profile"></i>&nbsp;
        <span class="menu-item-parent ">Mein Konto</span>
    </a>
</li>

现在我设置了以下 Java 代码:

WebElement konto = driver.findElement(By.xpath("//*[contains(text(),'Mein Konto')]"));

WebElement konto1 = driver.findElement(By.linkText("Mein Konto"));

但是在 Chrome 驱动程序中它找不到元素:

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"link text","selector":"Mein Konto"}

xpath 工作正常,但对于我的测试团队来说 linktext 更容易使用,所以我尝试使用它而不是 xpath。

<span> 元素包含文本 'Mein Konto'

如果您的元素是 <a href='#'>Mein Konto</a> 那么您可以使用 By.linkText();

找到它

在这里您可以找到定位器如何工作的更多信息:

https://www.softwaretestingmaterial.com/how-to-locate-element-by-link-text-and-partial-link-text-locator/

link文本方法与页面上显示的文本完全匹配。它不完全匹配可能是因为浏览器渲染问题。 您可以尝试使用 Parital link text.

因为'Mein Konto'不是你所有的LinkText,而是在一个<span>元素里面,你不能使用By.linkText();,因为添加了&nbsp。在这种情况下,您可以使用 By.PartialLinkText(); 来定位元素。

DOM就是这样,

<a href="google.de">
  <i class="fa fa-lg fa-fw fa-profile"></i>&nbsp;
    <span class="menu-item-parent ">Mein Konto</span>
</a>

只是'Mein Konto'不只是link文字。它将是部分 link 文本,因为 &nbsp 也在那里。我的建议是使用部分 link 文本。

driver.findelement(By.partialLinkText("Mein Konto"));

编辑:

我想强调安德森的评论

link 文本中存在空格不是使用 partialLinkText 搜索的理由。只需从呈现的网页(而不是从 Chrome 开发控制台)复制 link 文本并传递给 By.linkText()。它可能看起来像 driver.findElement(By.linkText(" Mein Konto"));。但是,如果您确定页面上没有其他 link 带有 Mein Konto 子字符串,那么 By.partialLinkText 就可以了。