Как извлечь динамический текст из нескольких дочерних узлов в html через getText()

У нас есть Div, содержащий некоторый жестко закодированный текст, и span, содержащий некоторые динамические текстовые значения (см. ниже HTML-код для большего понимания). Результирующий текст: 1 Задачи, которые нужно обновить с «XYZ» на «ABC»

но когда я извлекаю с помощью локатора Selenium, т.е.

final String actual = $("#bulk_update_confirmation").text();

Тогда актуальная содержит только «Задачи для обновления с по». Весь динамический текст отсутствует.

Код HTML приведен ниже (используется браузер Chrome)

<div id="bulk_update_confirmation" class="ui-dialog-content ui-widget-content" style="display: block; width: auto; min-height: 96.16px; height: auto;" scrolltop="0" scrollleft="0">
            <span id="taskCountSpan">1</span> Tasks to be updated from <span id="oldStatusSpan">'XYZ'</span> to <span id="newStatusSpan">'ABC'</span> <span id="desciptionSpan"> </span> <br>
            <hr>
            <div class="ui-dialog-buttonset">
                <button type="button" id="btn_bulk_update" onclick="updateBulkStatus()">Update</button>
                <button type="button" onclick="closeBulkUpdateRequest()">Cancel</button>
            </div>
        </div>

person Naveen Kumar Gautam    schedule 26.06.2018    source источник


Ответы (2)


Прежде чем пытаться извлечь весь текст, например. 1 Задачи должны быть обновлены с 'XYZ' до 'ABC', вы можете вызвать WebDriverWait, чтобы все три дочерних элемента были видны, и вы можете используйте следующее решение:

new WebDriverWait(driver, 10).until(ExpectedConditions.and(
    ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[@id='taskCountSpan']")),
    ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[@id='oldStatusSpan']")),
    ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[@id='newStatusSpan']"))
));
person DebanjanB    schedule 26.06.2018
comment
Спасибо, ваше предложение работает для меня, теперь я понимаю проблему, диапазон не заполнен, поэтому текст отсутствовал. Ожидание заполнения диапазона делает свое дело. - person Naveen Kumar Gautam; 26.06.2018

Вы можете использовать метод Webelement.getText() для извлечения текста, и вы можете получить ожидаемый результат, как показано ниже.

String actual =driver.findElement(By.id("bulk_update_confirmation")).getText();
person Subburaj    schedule 26.06.2018
comment
Привет, спасибо за обновление, но оно дает тот же результат. Насколько я понимаю, обе опции одинаковы, либо вы используете локатор driver.findElement, либо $(#bulk_update_confirmation) будут работать одинаково. - person Naveen Kumar Gautam; 26.06.2018