【问题标题】:Java Selenium - Find next elementJava Selenium - 查找下一个元素
【发布时间】:2023-03-09 18:00:02
【问题描述】:

我有一个非常相似的问题: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>

我想检查是否显示 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 找到的元素。

如何获得下一个元素?

使用 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;
}

【问题讨论】:

  • 试试这个 String cssSelector = "gwt-Label.trinity-middle-widget.form-text";
  • @cruisepandey - 我认为你误解了这个问题。我已经有了那个元素!
  • 你真的想知道下一个元素是否包含类 switch-active 吗?
  • 我认为下面的两个答案足以让你解决这个问题。
  • 这个问题不值得在不解释评论的情况下投反对票。我要投票了。

标签: java html selenium


【解决方案1】:

你可以这样使用它:

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

【讨论】:

  • 不检查 innerHtml - 必须包含文本 Street Lights。
  • 实际上,当我调用它来代替原来的 Common.findElementsUsingHtmlXpathClass 时,它就起作用了。我花了一点时间来弄清楚如何做!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 2014-01-03
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
  • 2018-07-28
  • 2016-06-29
相关资源
最近更新 更多