所以我要单击的元素位于此处:
<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:无此类元素:无法 定位元素:{“方法”:“链接文本”,“选择器”:“ Mein Konto”}
xpath可以正常工作,但是对于我的测试团队来说,链接文本将更易于使用,因此我尝试使用它代替xpath。
答案 0 :(得分:1)
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”不仅是链接文本。这将是部分链接文本,因为那里也有 
。我的建议是使用部分链接文本。
driver.findelement(By.partialLinkText("Mein Konto"));
编辑:
我要突出显示安德森的评论
链接文本中包含空格不是使用partialLinkText
搜索的原因。只需从渲染的网页(而不是从Chrome开发者控制台)复制链接文本,然后传递到By.linkText()
。它可能看起来像driver.findElement(By.linkText(" Mein Konto"))
;。但是,如果您确定页面上没有其他带有Mein Konto子字符串的链接,那么By.partialLinkText
是可以的。
答案 1 :(得分:0)
<span>
元素包含文本“ Mein Konto”
如果您的元素是<a href='#'>Mein Konto</a>
,则可以使用By.linkText();
在这里您可以找到更多有关定位器工作方式的信息:
答案 2 :(得分:0)
linkText方法完全匹配页面上显示的文本。可能由于浏览器渲染问题而导致不完全匹配。 您可以尝试使用Parital链接文本。
答案 3 :(得分:0)
因为'Mein Konto'并不是您所有的LinkText,而是在<span>
元素内,所以不能使用By.linkText();
,因为添加了 
。在这种情况下,您可以使用By.PartialLinkText();
来定位元素。