如何定位带有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
相关产品推荐
相关产品推荐

