代码之家  ›  专栏  ›  技术社区  ›  Steve Staple

JavaSele-查找下一个元素

  •  0
  • Steve Staple  · 技术社区  · 8 年前

    我有一个非常类似的问题: Selenium: find element "next to" other element

    我的元素如下:

    <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>
    

    我想检查是否显示开关激活。我正在使用以下内容查找正确的元素:

        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
    
                }
            }
        }
    

    findElementSusingTMLxpathClass的代码:

    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找到的元素。

    我怎样才能得到下一个元素?

    从CruisePandey获得了这个解决方案。我只是更改了方法的名称以反映它的新函数:

        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;
    }
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   cruisepandey    8 年前

    您可以这样使用它:

    public static List<WebElement> findElementsUsingHtmlXpathClass(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;
    }