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>
<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();
找到它
在这里您可以找到定位器如何工作的更多信息:
link文本方法与页面上显示的文本完全匹配。它不完全匹配可能是因为浏览器渲染问题。
您可以尝试使用 Parital link text.
因为'Mein Konto'不是你所有的LinkText,而是在一个<span>
元素里面,你不能使用By.linkText();
,因为添加了 
。在这种情况下,您可以使用 By.PartialLinkText();
来定位元素。
DOM就是这样,
<a href="google.de">
<i class="fa fa-lg fa-fw fa-profile"></i>
<span class="menu-item-parent ">Mein Konto</span>
</a>
只是'Mein Konto'不只是link文字。它将是部分 link 文本,因为  
也在那里。我的建议是使用部分 link 文本。
driver.findelement(By.partialLinkText("Mein Konto"));
编辑:
我想强调安德森的评论
link 文本中存在空格不是使用 partialLinkText
搜索的理由。只需从呈现的网页(而不是从 Chrome 开发控制台)复制 link 文本并传递给 By.linkText()
。它可能看起来像 driver.findElement(By.linkText(" Mein Konto"))
;。但是,如果您确定页面上没有其他 link 带有 Mein Konto 子字符串,那么 By.partialLinkText
就可以了。
所以我要点击的元素位于此处:
<li class=" ">
<a href="google.de">
<i class="fa fa-lg fa-fw fa-profile"></i>
<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();
在这里您可以找到定位器如何工作的更多信息:
link文本方法与页面上显示的文本完全匹配。它不完全匹配可能是因为浏览器渲染问题。 您可以尝试使用 Parital link text.
因为'Mein Konto'不是你所有的LinkText,而是在一个<span>
元素里面,你不能使用By.linkText();
,因为添加了 
。在这种情况下,您可以使用 By.PartialLinkText();
来定位元素。
DOM就是这样,
<a href="google.de">
<i class="fa fa-lg fa-fw fa-profile"></i>
<span class="menu-item-parent ">Mein Konto</span>
</a>
只是'Mein Konto'不只是link文字。它将是部分 link 文本,因为  
也在那里。我的建议是使用部分 link 文本。
driver.findelement(By.partialLinkText("Mein Konto"));
编辑:
我想强调安德森的评论
link 文本中存在空格不是使用 partialLinkText
搜索的理由。只需从呈现的网页(而不是从 Chrome 开发控制台)复制 link 文本并传递给 By.linkText()
。它可能看起来像 driver.findElement(By.linkText(" Mein Konto"))
;。但是,如果您确定页面上没有其他 link 带有 Mein Konto 子字符串,那么 By.partialLinkText
就可以了。