【问题标题】:java - Selenium Chromedriver can't find element by LinkText but Geckodriver doesjava - Selenium Chromedriver 无法通过 LinkText 找到元素,但 Geckodriver 可以
【发布时间】:2018-09-28 11:10:20
【问题描述】:

所以我要点击的元素位于这里:

<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:没有这样的元素:无法 定位元素:{"method":"link text","selector":"Mein Konto"}

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

【问题讨论】:

    标签: java selenium selenium-chromedriver geckodriver


    【解决方案1】:

    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>
    

    Just 'Mein Konto' 不仅仅是链接文本。这将是部分链接文本,因为&amp;nbsp 也在那里。我的建议是使用部分链接文本。

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

    编辑:

    我想强调安德森的评论

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

    【讨论】:

    • 感谢您详细解释原因和解决方法。
    • @DominikL。 ,仅供参考,链接文本中存在空格不是使用partialLinkText 搜索的理由。只需从呈现的网页(不是从Chrome 开发控制台)复制链接文本并传递给By.linkText()。它可能看起来像driver.findElement(By.linkText(" Mein Konto"));。但是如果您确定页面上没有其他带有Mein Konto 子字符串的链接,那么By.partialLinkText 就可以了
    【解决方案2】:

    linkText 方法与页面上出现的文本完全匹配。它不完全匹配可能是因为浏览器渲染问题。 您可以尝试使用 Parital 链接文本。

    【讨论】:

    • 您好,非常感谢您的回答。有了你建议的改变,我已经成功了。
    【解决方案3】:

    因为 'Mein Konto' 不是您的所有链接文本,而是在 &lt;span&gt; 元素中,所以您不能使用 By.linkText();,因为添加了 &amp;nbsp。在这种情况下,您使用By.PartialLinkText(); 来定位元素。

    【讨论】:

      【解决方案4】:

      &lt;span&gt; 元素包含文本“Mein Konto”

      如果您的元素是&lt;a href='#'&gt;Mein Konto&lt;/a&gt;,那么您可以通过 By.linkText(); 找到它

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

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

      【讨论】:

      • 您好,您的回答到底是什么意思?我不太明白你建议改变什么。谢谢
      • 我已经更正了回放的格式。要点是您无法使用定位器 By.linkText 找到文本,因为该文本包含在 标记中。正如其他人建议的那样,您可以使用 By.partialLinkText() 访问我提供的链接以获取更多信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-05
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多