Html Can';无法使用XPath通过索引查找元素

Html Can';无法使用XPath通过索引查找元素,html,xml,selenium,selenium-webdriver,xpath,css-selectors,Html,Xml,Selenium,Selenium Webdriver,Xpath,Css Selectors,我在控制台中编写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…-col

我在控制台中编写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"> 

那么以下内容呢:

driver.FindElements(By.xpath("//mat-icon")).get(0).click();

我希望它能帮助你

要选择第一个
,不需要指定索引
.findElement()
总是在找到的第一个元素上返回。@JeffC:True,但这里也有一个底层XPath问题:OP应该使用
(//mat图标)[1]
来选择文档中的第一个
mat图标
//mat图标[1]
表示选择作为其父级的第一个子级的
mat图标
元素,该元素可能与文档中的第一个
mat图标
不同。有关详细信息,请参见重复链接。有些情况下,问题不在于定位器,而是元素被隐藏(无法交互),请查看当前节点以及父节点的css样式值。你可能会发现你无法与之互动的原因。您可能必须使用更新css值的技巧来与元素交互。@kjhughes同意,但。。。OP说,
我想挑第一个
,然后尝试了两种不同的方法。1. <代码>$x(“//mat icon[1]”)
无效,因此它不是其父级的第一个子级(如您所解释的)。然后他试了两次
$x(“//mat icon”)[1]
这意味着获取文档中的第一个,它确实起了作用。因此,在这个问题中,
.findElement()
可以很好地工作。。。没有索引,没有复杂的需要。我看不出有理由在这里投反对票;我会用一个向上的球来反击。但是请注意,OP误解的基础是关于
//mat icon[1]
(//mat icon)[1]
之间差异的常见错误。有关详细信息,请参阅重复链接。@DebanjanB
driver.findElements(By.xpath(“//mat icon”)[0]。单击()
无效。“需要数组类型”时出错@Yamis第一个选项如何?@DebanjanB第一个选项有效,但我不使用cssselector查找元素。我想说我不知道cssSelector命令:)@Yamis检查更新的答案并让我知道状态。这是实现结果(+1)的一种方法。但是请注意,OP误解的基础是关于
//mat icon[1]
(//mat icon)[1]
之间差异的常见错误。有关详细信息,请参阅重复链接。@kjhughes,感谢您的澄清。
driver.findElements(By.xpath(“//mat icon”)[0]。单击()
无效。有错误“数组类型预期”@Yamis,我已经更新了我的答案。现在应该可以了。我忘了它是Java:)
driver.FindElements(By.xpath("//mat-icon")).get(0).click();
driver.findElements(By.cssSelector("mat-icon")).get(0).click();
driver.findElements(By.xpath("//mat-icon")).get(0).click();
driver.findElements(By.xpath("//mat-icon")).get(0).click();