【问题标题】:How to find the index of HTML child tag in Selenium WebDriver?如何在 Selenium WebDriver 中找到 HTML 子标签的索引?
【发布时间】:2016-11-15 05:25:35
【问题描述】:

我正在尝试找到一种方法来根据其 xpath 返回 HTML 子标签的索引。

例如,在页面的右栏,我有三个元素:

//*[@id="ctl00_ctl50_g_3B684B74_3A19_4750_AA2A_FB3D56462880"]/div[1]/h4

//*[@id="ctl00_ctl50_g_3B684B74_3A19_4750_AA2A_FB3D56462880"]/div[2]/h4

//*[@id="ctl00_ctl50_g_3B684B74_3A19_4750_AA2A_FB3D56462880"]/div[3]/h4

假设我找到了第一个元素,我想返回标签div内的数字,即1。我该怎么做呢?

我参考了之前的帖子 (How to count HTML child tag in Selenium WebDriver using Java),但仍然无法弄清楚。

【问题讨论】:

  • 你的任务到底是什么?您是否通过另一个查询选择了一个 h4,现在想知道它的索引?或者您是否通过另一个选择器检索元素列表,这是单个 xpath 的?
  • 我正在尝试编写一个方法,该方法将在给定报告的 xpath 的情况下在右栏返回报告的索引。例如,假设报告名称是“hello1”。我的方法将采用报告的名称,即“hello 1”,并在右栏返回此报告的索引。 “hello 1”可以是右侧栏杆上的第一个,也可以是第二个或第三个。为了获取它的索引,我需要检索它的 xpath,因为 xpath 内的 div 标签具有索引。我的逻辑有道理吗?
  • 写这些 xpath 表达式的人(也许是你)想出了索引对吗?
  • 您好!对不起,我不太确定你在问什么。我只是想找出一种方法来检索 div 标签中的索引号。

标签: html css selenium


【解决方案1】:

您可以使用正则表达式获取号码:

var regExp = /div\[([^)]+)\]/;
var matches = regExp.exec("//[@id=\"ctl00_ctl50_g_3B684B74_3A19_4750_AA2A_FB3D56462880\"]/div[2]/h4");

console.log(matches[1]); \\ returns 2

【讨论】:

  • 非常感谢!
【解决方案2】:

您可以在 xpath 中选择前面的兄弟来获取当前报告之前的所有报告,如下所示:

//h4[contains(text(),'hello1')]/preceding-sibling::h4

现在您只需计算找到的数量加上当前的数量即可获得索引。

另一种选择是一次选择所有报告并循环检查它们的内容。它们总是按照它们在 dom 中的顺序出现。

对于 java,它可能看起来像这样:

List<WebElement> reports = driver.findElements(By.xpath("//*[@id='ctl00_ctl50_g_3B684B74_3A19_4750_AA2A_FB3D56462880']/div/h4")
for(WebElement element : reports){
    if(element.getText().contains("report1"){
         return reports.indexOf(element) + 1;
    }
}

否则您将不得不自己解析 xpath 以提取值(请参阅 LG3527118 的答案)。

【讨论】:

  • 您好!非常感谢!我也在考虑for循环。
  • 实际上我尝试了您的代码的第一行,List ...。直到我将“List”更改为“IReadOnlyList”,它才起作用。你知道为什么会这样吗?
  • 它不起作用是什么意思? official api doc 将返回值定义为List&lt;WebElement&gt;
  • 我看到它下面有一条红色波浪线,警告是“不能隐式转换类型'System.Collections.ObjectModel.ReadOnlyCollection 到'System.Collections.Generic.List '
  • 你用的是哪个版本?
猜你喜欢
  • 2019-12-30
  • 2021-01-25
  • 2013-12-31
  • 2015-11-10
  • 2021-06-29
  • 2013-05-24
  • 2021-12-12
  • 1970-01-01
  • 2018-01-03
相关资源
最近更新 更多