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

Я хочу проверить, отображается ли 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;
}

Я не вижу, как применить решение, данное в цитируемой статье, так как у меня нет элемента, который я могу просто найти по идентификатору.

Как мне получить следующий элемент?

Ездил с этим раствором от круизпандеев. Я просто изменил имя метода, чтобы отразить его новую функцию:

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

попробуйте эту строку cssSelector = "gwt-Label.trinity-middle-widget.form-text";

cruisepandey 18.05.2018 17:40

@cruisepandey - Я думаю, вы неправильно поняли вопрос. Этот элемент у меня уже есть!

Steve Staple 18.05.2018 17:41

Вы действительно хотите узнать, содержит ли следующий элемент класс switch-active?

DMart 18.05.2018 17:56

Я думаю, что двух приведенных ниже ответов достаточно, чтобы решить эту проблему.

DMart 18.05.2018 17:57

этот вопрос не заслуживает голосования "против" без поясняющего комментария. Я голосую.

cruisepandey 19.05.2018 19:44
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
1 016
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.

Steve Staple 18.05.2018 17:57

фактически, он работал, когда я назвал его вместо исходного Common.findElementsUsingHtmlXpathClass. Мне потребовалось время, чтобы понять, как это сделать!

Steve Staple 18.05.2018 18:02

Другие вопросы по теме