【发布时间】:2020-03-10 02:29:48
【问题描述】:
我在控制台中编写 XPath 来查找图标元素 $x("//mat-icon")。
然后我得到元素列表:
0: <mat-icon class="mat-icon notranslate mat…-color ng-star-inserted" _ngcontent-cvb-c17="" aria-hidden="false" aria-label="start" role="img">
1: <mat-icon class="mat-icon notranslate mat…-color ng-star-inserted" _ngcontent-cvb-c17="" aria-hidden="false" aria-label="start" role="img">
我想选择第一个,所以我写了索引$x("//mat-icon[1]"),但它不起作用。但是,如果我写 $x("//mat-icon")[1] 它可以工作,但是当我在 IDE 中写它时会出现错误消息:
driver.findElement(By.xpath("//mat-icon")[0]).click();
【问题讨论】:
-
您不需要指定索引。
.findElement()总是返回找到的第一个元素。 -
@JeffC: 没错,但这里也有一个潜在的 XPath 问题:OP 应该使用
(//mat-icon)[1]来选择文档中的第一个mat-icon。//mat-icon[1]表示选择作为其父元素的第一个子元素的mat-icon元素,这可能与文档中的第一个mat-icon不同。有关详细信息,请参阅重复链接。 -
有些情况不是定位器问题,而是元素被隐藏(不可交互),请您查看当前节点以及父节点的css样式值。您可能会找到无法与之交互的原因。您可能必须使用更新 css 值的技巧来与元素交互。
-
@kjhughes 同意但是... OP 说
I want to pick the first one然后尝试了两种不同的方法。 1.$x("//mat-icon[1]")不起作用,因此它不是其父母的第一个孩子(正如您所解释的)。然后他尝试了 2.$x("//mat-icon")[1],这意味着获得文档中的第一个并且它确实有效。因此,在这个问题中提出的情况下,.findElement()可以正常工作......没有索引,不需要任何复杂的东西。
标签: html xml selenium selenium-webdriver xpath