You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定位带有ng-class属性的<i>元素?附尝试代码咨询

正确定位该AngularJS元素的方法

你之前的尝试出错是因为对ng-class的理解有偏差——getArrowClass($index)是AngularJS用来动态生成class的方法,不是元素实际拥有的class属性值,所以直接用By.className("getArrowClass($index)")肯定找不到元素。下面给你几种可靠的定位方式:

方法1:利用静态class属性定位

你的目标元素有几个固定的静态class:pull-right、glyphicon、glyphicon-chevron-right,可以通过这些class的组合来定位,这种方式稳定性高:

// 用CSS选择器组合多个class
List<WebElement> elements = driver.findElements(By.cssSelector("i.pull-right.glyphicon.glyphicon-chevron-right"));
System.out.println(elements.size());

如果glyphicon-chevron-right这个class足够唯一,也可以简化:

List<WebElement> elements = driver.findElements(By.className("glyphicon-chevron-right"));
System.out.println(elements.size());

方法2:直接通过ng-class属性定位

如果需要精准匹配带有这个动态class逻辑的元素,可以直接定位ng-class属性值:

CSS选择器方式

List<WebElement> elements = driver.findElements(By.cssSelector("i[ng-class='getArrowClass($index)']"));
System.out.println(elements.size());

XPath方式

List<WebElement> elements = driver.findElements(By.xpath("//i[@ng-class='getArrowClass($index)']"));
System.out.println(elements.size());

方法3:针对动态生成的class定位(可选)

如果getArrowClass($index)会返回特定的class值(比如arrow-open或arrow-close),你可以先通过浏览器开发者工具查看元素最终渲染的class,然后用这个动态class定位:

// 假设返回的class是arrow-open
List<WebElement> elements = driver.findElements(By.className("arrow-open"));
System.out.println(elements.size());

不过这种方式依赖动态生成的结果,稳定性不如前两种,优先推荐方法1或2。

内容的提问来源于stack exchange,提问作者Pinaj Patro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:25:16