例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 & 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。我不一定需要文本,我只需要验证它有%城市。我希望这是由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条答案
按热度按时间pdsfdshx1#
我意识到xpath的问题是,在ul中,我在寻找td,而实际上我在寻找li。哎呀。谢谢大家的帮助!
略作修改的答案发布的基里尔s。解决问题
aiqt4smr2#
你很接近。有很多方法可以做到这一点,我会这样做
你可以用任何你想要的城市来代替卡尔加里。
注意。。。xpath包含
TD
这是一个TABLE
单元格而不是使用LI
是无序列表中的列表项(UL
). 这就是为什么你的不起作用。