如何检查来自UL的LI是否具有字符串(其中有任意数量的UL)

时间:2018-12-06 21:29:03

标签: java selenium parsing xpath

示例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>

问题:如何检查div class =“ listresults”中的任意多个UL,第三个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 :(得分:0)

我意识到xPath的问题是在UL中,当我实际上在寻找LI时,我正在寻找TD。哎呀。谢谢大家的帮助!

Kiril S.发布的稍作修改的答案即可解决问题

List<WebElement> elements = driver.findElements(By.xpath("//ul[@class='companylist']/li[3]"));
for(WebElement element : elements) {
    if(element.text().contains(city)) ...
}

答案 1 :(得分:-1)

您非常接近。有很多方法可以做到这一点,我会这样做

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

然后,您可以用所需的城市等代替“卡尔加里”。

请注意...您的XPath包含TD,它是一个TABLE单元,而不是使用LI,它是无序列表(UL)中的列表项。这实际上就是您的笔记本无法正常工作的原因。