Как считать и получать текст из лития с использованием селена - PullRequest
0 голосов
/ 20 апреля 2020

Ниже моя DOM

<div class="demo-frame">
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
    <style>
#feedback { font-size: 1.4em; }
#selectable .ui-selecting { background: #FECA40; }
#selectable .ui-selected { background: #F39814; color: white; }
#selectable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
#selectable li { margin: 3px; padding: 0.4em; font-size: 1.4em; height:  56px; }

</style>
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <script>
$( function() {
    $( "#selectable" ).selectable();
} );
</script>
    <ol id="selectable" class="ui-selectable">
        <li class="ui-widget-content ui-selectee">Item 1</li>
        <li class="ui-widget-content ui-selectee">Item 2</li>
        <li class="ui-widget-content ui-selectee">Item 3</li>
        <li class="ui-widget-content ui-selectee">Item 4</li>
        <li class="ui-widget-content ui-selectee">Item 5</li>
        <li class="ui-widget-content ui-selectee">Item 6</li>
        <li class="ui-widget-content ui-selectee">Item 7</li>
    </ol>
</div>

Мне нужно нажать на каждый из Предметов и напечатать Названия Предметов в последовательном порядке. Для этого я пытаюсь получить счетчик теги li, а затем итерация с использованием a для l oop

List<WebElement> countryUL = driver.findElements(By.xpath("//*[@class='demo-frame']/ol"));

System.out.println(countryUL.size());

Но вышеприведенный вывод "1" Я не знаю, какую ошибку я совершаю

Ответы [ 2 ]

3 голосов
/ 20 апреля 2020

Вы должны использовать

List<WebElement> countryUL = driver.findElements(By.xpath("//div[@class='demo-frame']/ol/li"));

Ваш xPath не входит в ol. Чтобы подсчитать li элементов, вы должны исправить свой путь, как я показал, чтобы он занимал нужные вам конечные узлы.

Вам также нужно учитывать, что нажатие на элемент может привести к перестройке DOM, поэтому что элементы в вашем списке будут go устаревшими. Если это так, то лучшим решением будет поэтапный подход с использованием подхода, подобного //your_xpath[number_of_element].

Тест, который отлично работает:

public void testListIteration() {
    driver.get("https://demoqa.com/selectable/");
    List<WebElement> countryUL = driver.findElements(By.xpath("//div[@class='demo-frame']/ol/li"));
    for(WebElement item: countryUL){
        item.click();
        boolean isSelected = item.getAttribute("class").contains("ui-selected");
        if(!isSelected){
            System.out.println("Test FAILED");
            return;
        }
    }
}
0 голосов
/ 20 апреля 2020
List<WebElement> olElements = driver.findElements(By.tagName("ol"));
// other options if above does not work
// driver.findElement(By.xpath("//ol[@id='selectable']"));
// driver.findElement(By.cssSelector(".ui-selectable"));
// driver.findElement(By.cssSelector("ol#selectable"));

List<WebElement> liElements = olElements.get(0).findElements(By.tagName("li"));
System.out.println("liElements" + liElements.size());
        for(int i=0;i<liElements.size();i++)
            liElements.get(i).getText();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...