Как создать список, а затем выполнить итерацию для печати данных с использованием Selenium в Java - PullRequest
0 голосов
/ 26 апреля 2018

Теперь я хочу напечатать всю дату, например "17.03.2008", в Selenium WebDriver, и вот мой HTML-анализ в Chrome:

<div id="ember3175" class="ember-view encounter-list"><header class="box-margin-Bsm"><h3 class="header3a">Encounters</h3></header>
<section class="d-complex-list-container box-padding-Tsm-v2 type-v2">
                <div class="item box-padding-TBxs-v2">
                    <span class="link-text box-margin-Rsm-v2">03/17/2018</span>
                    <span>Encounter (Patient Phone Message)</span>
<!---->                    <div class="chief-complaint">
                        <span class="p-666">CC:</span>
                            <span>Pt. called to follow-up on monospot results.</span>
                    </div>
                </div>
                <div class="item box-padding-TBxs-v2">
                    <span class="link-text box-margin-Rsm-v2">02/17/2018</span>
                    <span>Encounter (SOAP Note)</span>
<!---->                    <div class="chief-complaint">
                        <span class="p-666">CC:</span>
                            <span>chronic sinusitis</span>
                    </div>
                </div>
                <div class="item box-padding-TBxs-v2">
                    <span class="link-text box-margin-Rsm-v2">01/17/2018</span>
                    <span>Encounter (SOAP Note)</span>
<!---->                    <div class="chief-complaint">
                        <span class="p-666">CC:</span>
                            <span>nasal congestion</span>
                    </div>
                </div>
                <div class="item box-padding-TBxs-v2">
                    <span class="link-text box-margin-Rsm-v2">11/17/2017</span>
                    <span>Encounter (SOAP Note)</span>
<!---->                    <div class="chief-complaint">
                        <span class="p-666">CC:</span>
                            <span>nasal congestion</span>
                    </div>
                </div>
                <div class="item box-padding-TBxs-v2">
                    <span class="link-text box-margin-Rsm-v2">10/17/2016</span>
                    <span>Encounter (SOAP Note)</span>
                        <span class="link-text icon-lock"></span>
                    <div class="chief-complaint">
                        <span class="p-666">CC:</span>
                            <span>nasal congestion</span>
                    </div>
                </div>
<!----></section>
</div>

Теперь я могу напечатать любую отдельную дату с ееXPath as:

String time = driver.findElement(By.xpath("//*[@id=\"ember3175\"]/section/div[2]/span[1]")).getText();
System.out.println(time);

Но я хочу перебрать всю дату и напечатать всю дату, я попытался:

int size = driver.findElement(By.xpath("[@id=\"ember3175\"]/section/div/span[1]")).size();

Чтобы получить размер всех дочерних элементов, но нетэто ошибка, что я не могу получить его размер.Поэтому мой вопрос заключается в том, как я повторяю и печатаю все даты здесь?Кроме того, если я хочу выполнять итеративные задания в других таблицах, как я могу выбрать родителя?Я имею в виду, что в большинстве случаев я мог получить какие-либо отдельные данные с помощью XPath в Chrome, но когда я хочу перебрать все данные, я не знаю, как выбрать родителя и получить его размер.Большое спасибо!

Ответы [ 4 ]

0 голосов
/ 26 апреля 2018

Если вам необходимо напечатать все даты под заголовком Встречи , и вы можете создать Список из дат взаголовок Обнаруживает и печатает их, используя следующий кодовый блок:

Кодовый блок:

List<WebElement> encounterDates = driver.findElements(By.xpath("//h3[@class='header3a' and contains(.,'Encounters')]//following::section[@class='d-complex-list-container box-padding-Tsm-v2 type-v2']//span[@class='link-text box-margin-Rsm-v2']"));
for (WebElement ele : encounterDates) 
    System.out.println(ele.getAttribute("innerHTML"));

Консольный вывод:

03/17/2018
02/17/2018
01/17/2018
11/17/2017
10/17/2016
0 голосов
/ 26 апреля 2018

Вы можете взять количество элементов одного класса, используя findElements и ListElements:

 List<WebElement> findValue = driver.findElements(By.xpath("//span[@class='link-text box-margin-Rsm-v2']"));

 for (WebElement webElement : findValue) {
 String printValue = webElement.getText();
 System.out.println(printGroupName);
 }

Здесь List<E> - это List array, в котором хранятся все элементы из DOM, который содержит вышекласс span и Webelement будут извлекать текст из класса span.

0 голосов
/ 26 апреля 2018

Вы можете использовать этот код для получения всех дат:

public List<WebElement> allDates(){  

List<WebElement> allDates = driver.findElements(By.cssSelector("div[class$='link-text box-margin-Rsm']"));  

for(WebElement elements : allDates){  

System.out.println(elements.getText());

}  
    return allDates;  
}
0 голосов
/ 26 апреля 2018

1) Получение одного элемента:

WebElement time = driver.findElement(By.xpath("//*[@id=\"ember3175\"]/section/div[2]/span[1]"));

2) Получение последовательности элементов:

List<WebElement> time2 = driver.findElements(By.xpath("//*[@id=\"ember3175\"]/section/div[2]/span"));

Различия:

  • findElement против findElements - для получения нескольких элементов требуется множественная версия.
  • Не указывайте [#] для диапазона.Сказать, что span[1] будет соответствовать только первому вхождению, но span будет соответствовать всем возможностям.
...