Как проверить, есть ли у LI из UL строка (где есть любое количество UL) - PullRequest
0 голосов
/ 07 декабря 2018

Пример 1: Город - это Калгари

<div class="listresults">
    <ul id="company_1" class="companylist">
        <li><b>HEATCRAFT Freezing LTD., a Division of Lennox Inc.</b></li>
        <li>#8 - 7797 - 98th Street S. E.</li>
        <li>Calgary,AB T9H 9S6</li>
        <li>(603) 252-6322</li>
    </ul>
    <ul id="company_2" class="companylist">
        <li><b>SEARS INDOOR CLEAN WIND SERVICES (202222 ALBERTA LTD.)</b></li>
        <li>895 - 49 Avenue N. E.</li>
        <li>Calgary,AB T9E 9N4</li>
        <li>(603) 230-2629</li>
    </ul>
    <ul id="company_3" class="companylist">
        <li><b>ARPI'S INDUSTRIES CANADA LTD., a Division of Lennox Inc.</b></li>
        <li>6895 - 40 Street S. E.</li>
        <li>Calgary,AB T9C 9W7</li>
        <li>(603) 236-2666</li>
    </ul>
    <ul id="company_4" class="companylist">
        <li><b>SHEET Plastics WORKS</b></li>
        <li>P. O. Box 49089, 7740 - 98th St., S.E.</li>
        <li>Calgary,AB T9C 8W5</li>
        <li>(603) 279-0022</li>
    </ul>
</div>

Пример 2: Город - это Аврора

<div class="listresults">
    <ul id="company_1" class="companylist">
        <li><b>SUMMERS AND SMITH ROOFING &amp; Freezing LTD.</b></li>
        <li>55 Industrial Parkway South</li>
        <li>Aurora,ON L4G 8Y5</li>
        <li>(905) 727-2323</li>
    </ul>
    <ul id="company_2" class="companylist">
        <li><b>BEST CLIMATE Freezing AND ROOFING INC.</b></li>
        <li>68 Mugford Avenue</li>
        <li>Aurora,ON L4G 7H5</li>
        <li>(905) 713-3212</li>
    </ul>
</div>

Вопрос: Как я могу проверить любое количество UL в div class = "listresults", третий LI всегда будет содержать% city.Мне не обязательно нужен текст, мне просто нужно подтвердить, что он имеет% city.Я хотел бы, чтобы это было сделано xPath.

Это то, что я пробовал: (где город - Калгари или Аврора в приведенных выше примерах)

List<WebElement> elements = driver.findElements(By.xpath(String.format("//ul[@class='companylist']/td[3 and contains(text(), '%s')]", city)));
        for (WebElement element: elements) {
            System.out.println(element.getText());
        }

Даже если я изменюсьмой xPath к "// ul [@ class = 'companylist'] / td [3]", чтобы просто найти текст из этого TD, чтобы я мог разобрать его вне драйвера, он не возвращает значения поля TD.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Я понимаю, что проблема с моим xPath заключалась в том, что в UL я ищу TD, когда я на самом деле ищу LI.К сожалению.Спасибо всем за помощь!

Слегка измененный ответ, отправленный Кириллом С., решает проблему

List<WebElement> elements = driver.findElements(By.xpath("//ul[@class='companylist']/li[3]"));
for(WebElement element : elements) {
    if(element.text().contains(city)) ...
}
0 голосов
/ 07 декабря 2018

Вы были довольно близко.Есть несколько способов сделать это, я бы сделал это следующим образом

//ul[@class='companylist']/li[3][contains(.,'Calgary')]

Затем вы можете заменить 'Калгари' на любой желаемый город и т. Д.

Примечание ..Ваш XPath содержит TD, который является ячейкой TABLE вместо использования LI, который является элементом списка в неупорядоченном списке (UL).Вот почему на самом деле ваш не работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...