【问题标题】:Can't find element by index using XPath [duplicate]无法使用 XPath 按索引查找元素 [重复]
【发布时间】: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


【解决方案1】:

要选择第一个 &lt;&lt;mat-icon&gt; 元素,您可以使用以下任一 Locator Strategies

  • 使用findElements()get()

    driver.findElements(By.cssSelector("mat-icon")).get(0).click();
    
  • 使用findElements()get()

    driver.findElements(By.xpath("//mat-icon")).get(0).click();
    
  • 使用findElements()索引

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

【讨论】:

  • 我认为没有理由在这里投反对票;我会反击它。但请注意,OP 误解的基础是关于//mat-icon[1](//mat-icon)[1] 之间差异的常见错误。有关详细信息,请参阅重复链接。
  • @DebanjanB driver.findElements(By.xpath("//mat-icon"))[0].click() 不起作用。出现错误“预期数组类型”
  • @Yamis 第一个选项怎么样?
  • @DebanjanB 第一个选项有效,但我不使用 cssSelectors 来查找元素。我会说我不知道​​ cssSelector 命令:)
  • @Yamis 查看更新的答案并告诉我状态。
【解决方案2】:

下面的呢:

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

希望对你有帮助!

【讨论】:

  • 这是实现结果 (+1) 的一种方法。但请注意,OP 误解的基础是关于//mat-icon[1](//mat-icon)[1] 之间差异的常见错误。有关详细信息,请参阅重复链接。
  • @kjhughes,感谢您的澄清。
  • driver.findElements(By.xpath("//mat-icon"))[0].click() 不起作用。出现错误“预期数组类型”
  • @Yamis,我已经更新了我的答案。现在它应该可以工作了。我忘了它是 Java :)
猜你喜欢
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2022-07-05
  • 2021-03-02
  • 2020-03-20
相关资源
最近更新 更多