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

Java Selenium:如何定位目标元素旁的switch-active元素

问题:Selenium定位目标元素旁的开关元素

我最近做Selenium自动化时碰到的问题,和一个关于「定位相邻元素」的场景高度相似。我的页面元素结构是这样的:

<div class="a-Trinity has-left-widget has-right-widget" style="cursor: pointer;"> 
  <div class="trinity-left-widget" style=""> 
    <div> 
      <span class="layer-style-rule-slice" style="background-color: rgb(233, 34, 91); border-color: rgb(255, 255, 255); margin-top: 12px;"></span> 
      <span class="layer-style-rule-slice" style="background-color: rgb(75, 170, 234); border-color: rgb(255, 255, 255); margin-top: 6px;"></span> 
      <span class="layer-style-rule-slice" style="background-color: rgb(42, 200, 159); border-color: rgb(255, 255, 255); margin-top: 0px;"></span> 
      <span class="layer-style-rule-slice" style="background-color: rgb(153, 207, 34); border-color: rgb(255, 255, 255); margin-top: -6px;"></span> 
      <span class="layer-style-rule-slice" style="background-color: rgb(247, 151, 29); border-color: rgb(255, 255, 255); margin-top: -12px;"></span> 
    </div> 
  </div> 
  <div class="gwt-Label trinity-middle-widget form-text">Street Lights</div> 
  <div class="trinity-right-widget" style=""> 
    <div class="small-switch-container layer-right-switch"> 
      <div class="small-switch switch-active"> 
        <div class="small-switch-button"></div> 
      </div> 
    </div> 
  </div> 
</div>

我需要检查页面上是否显示了switch-active类的元素,目前我是这么查找目标元素的:

String className = "gwt-Label trinity-middle-widget form-text";
String htmlElement = "div";
String textToFind = layerName; // i.e. Street Light

List<WebElement> elements = Common.findElementsUsingHtmlXpathClass(driver, htmlElement, className);
Common.myPrint(thisClass + " elements count: " + elements.size());

for (WebElement element : elements) {
    // select an element
    String text = Common.getAllAttributes(element, driver);
    if (text != null) {
        text = text.trim();
        if (text.contains(textToFind)) {
            // so this is my element
            // here is where I need to get the next one
        }
    }
}

其中findElementsUsingHtmlXpathClass方法的实现是:

public static List<WebElement> findElementsUsingHtmlXpathClass(WebDriver driver, String htmlElement, String className) {
    List<WebElement> elements = driver
            .findElements(By.xpath("//" + htmlElement + "[contains(@class, '" + className + "')]"));
    return elements;
}

麻烦的是页面里没有可用的ID来定位元素,我没法直接套用常规的相邻元素定位方案,不知道该怎么获取目标元素的下一个元素。

最后我采用了一个解决方案,只修改了方法名来匹配功能,代码如下:

public static List<WebElement> findElementsFollowingHtmlXpathClass(WebDriver driver, String htmlElement, String className) {
    List<WebElement> elements = driver
            .findElements(By.xpath("//" + htmlElement + "[contains(@class, '" + className + "')]/following-sibling::div[@class='trinity-right-widget']/descendant::div[contains(@class,'switch-active')]"));
    return elements;
}

内容的提问来源于stack exchange,提问作者Steve Staple

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:34:52