首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium (Java)无法通过可见链接文本找到元素

Selenium (Java)无法通过可见链接文本找到元素
EN

Stack Overflow用户
提问于 2019-12-16 14:24:45
回答 4查看 130关注 0票数 0

我遇到了一个更令人沮丧的硒问题。

我在页面上找到了一个表格,其中一个元素有一个链接。链接名为"Send“。

代码语言:javascript
复制
<td data-e2e-selector="sakHendelser" id="sakHendelser_0" class="ng-star-inserted">
  <saksnytt><!----><!----><!---->
   <div class="hb-tekst--ingenBryting ng-star-inserted">
    <!----><!----><!---->
     <button class="hb-knapp hb-knapp--lenke hb-knapp--alignTeks hb-knapp-lenke-nopadding ng-star-inserted" 
      data-e2e-selector="saksnytt-link">
        <i aria-hidden="true" class="fa fa-flag fa-envelope"></i>
        <span class="hb-knapp-tekst">Send brev </span></button> &nbsp;&nbsp;
        <!----><span aria-hidden="true" class="fa fa-info-circle ng-star-inserted" 
        id="reservert-info">
        </span><!----><!----><!----></div><!---->
</saksnytt></td>

这以前起过作用,我还没有找到为什么它现在停止工作的原因。但无论我如何努力找到它,Selenium都会用

代码语言:javascript
复制
 no such element: Unable to locate element: {"method":"xpath","selector":"//data-e2e-selector[contains(text(),'Send brev ')]"}

或者类似的-

我试过以下几种方法:

代码语言:javascript
复制
Browser.Wait().until(presenceOfElementLocated(By.linkText(merknad + " ")));

这件事已经过去了。

代码语言:javascript
复制
driver.findElement(By.linkText(merknad + " ")).click();
driver.findElement(By.partialLinkText(merknad + " ")).click();
driver.findElement(By.xpath("//data-e2e-selector[contains(text(),'" + "Send brev" +"')]"));    
driver.findElement(By.xpath("//id[contains(text(),'" + "Send brev" +"')]"));
data-e2e-selector="sakHendelser" id="sakHendelser

我还尝试在链接文本中的"v“之后添加一个空格,但没有结果。

Selenium怎么可能找不到这样一个明显可见且可交互的元素呢?

由于代码是以角度生成的,并且或多或少是动态的,所以我也不能为这个特定的元素创建标记,所以我只能尝试通过文本来找到它。我没法去工作了。

有什么想法吗?

我可以用以下代码单击它:

代码语言:javascript
复制
driver.findElement(By.xpath("//*[@id='sakHendelser_0']/saksnytt/div/button/span")).click();

但我希望能够将链接文本发送到该方法,而不是像这样硬编码xpath。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-12-16 14:37:34

将XPath放在属性(如//id//data-e2e-selector)之前使用//的方式是不正确的。这些是元素属性,而不是标记。

文本Send brev包含在一个span元素中,所以试图通过查询data-e2e-selector来定位它是行不通的--这也不是WebElement,它是button上的一个属性。

由于您提到此项有一些您希望用作参数的可见链接文本,所以我只查询文本,并使用contains来处理任何隐藏的空格:

代码语言:javascript
复制
driver.findElement(By.xpath("//span[contains(text(), 'Send brev')]")).click();

您可以这样使用链接文本作为参数:

代码语言:javascript
复制
string linkText = "Send brev"
driver.findElement(By.xpath("//span[contains(text(), '" + linkText + "')]")).click();

不过,单击button本身可能会更好:

代码语言:javascript
复制
driver.findElement(By.xpath("//button[span[contains(text(), '" + linkText + "')]]")).click();
票数 1
EN

Stack Overflow用户

发布于 2019-12-16 15:29:06

LinkText和PartialLinkText只处理A标记中的文本。你没有给你的HTML,所以这是行不通的。要找到给定包含的文本的元素,唯一的选择是使用XPath。

票数 2
EN

Stack Overflow用户

发布于 2019-12-16 14:48:13

尝试在xpath中使用规范化空间:

//span[normalize-space(text())='Send brev']

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59358600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档