我遇到了一个更令人沮丧的硒问题。
我在页面上找到了一个表格,其中一个元素有一个链接。链接名为"Send“。
<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>
<!----><span aria-hidden="true" class="fa fa-info-circle ng-star-inserted"
id="reservert-info">
</span><!----><!----><!----></div><!---->
</saksnytt></td>这以前起过作用,我还没有找到为什么它现在停止工作的原因。但无论我如何努力找到它,Selenium都会用
no such element: Unable to locate element: {"method":"xpath","selector":"//data-e2e-selector[contains(text(),'Send brev ')]"}或者类似的-
我试过以下几种方法:
Browser.Wait().until(presenceOfElementLocated(By.linkText(merknad + " ")));这件事已经过去了。
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怎么可能找不到这样一个明显可见且可交互的元素呢?
由于代码是以角度生成的,并且或多或少是动态的,所以我也不能为这个特定的元素创建标记,所以我只能尝试通过文本来找到它。我没法去工作了。
有什么想法吗?
我可以用以下代码单击它:
driver.findElement(By.xpath("//*[@id='sakHendelser_0']/saksnytt/div/button/span")).click();但我希望能够将链接文本发送到该方法,而不是像这样硬编码xpath。
发布于 2019-12-16 14:37:34
将XPath放在属性(如//id或//data-e2e-selector)之前使用//的方式是不正确的。这些是元素属性,而不是标记。
文本Send brev包含在一个span元素中,所以试图通过查询data-e2e-selector来定位它是行不通的--这也不是WebElement,它是button上的一个属性。
由于您提到此项有一些您希望用作参数的可见链接文本,所以我只查询文本,并使用contains来处理任何隐藏的空格:
driver.findElement(By.xpath("//span[contains(text(), 'Send brev')]")).click();您可以这样使用链接文本作为参数:
string linkText = "Send brev"
driver.findElement(By.xpath("//span[contains(text(), '" + linkText + "')]")).click();不过,单击button本身可能会更好:
driver.findElement(By.xpath("//button[span[contains(text(), '" + linkText + "')]]")).click();发布于 2019-12-16 15:29:06
LinkText和PartialLinkText只处理A标记中的文本。你没有给你的HTML,所以这是行不通的。要找到给定包含的文本的元素,唯一的选择是使用XPath。
发布于 2019-12-16 14:48:13
尝试在xpath中使用规范化空间:
//span[normalize-space(text())='Send brev']
https://stackoverflow.com/questions/59358600
复制相似问题