<div class="tax_details">
<ul class="clearfix">
<li>
<p>Total Income</p>
<span>£33,254.00</span>
</li>
<li class="text-center">
<p>Taxable Income</p>
<span>£21,054.00</span>
</li>
<li class="text-right">
<p>Tax Due</p>
<span>£4,210.80</span>
</li>
</ul>
</div>
如何使用findby
提取硒中的总收入和应纳税,无可识别的应税收入答案 0 :(得分:2)
使用css,你可以这样做,因为总收入没有一种独特的方式来获取元素:
List<WebElement> listItems = driver.findElements(By.cssSelector("li > span"));
listItems.get(0).getText(); //Total Income
listItems.get(1).getText(); //Taxable Income
listItems.get(2).getText(); //Tax Due
答案 1 :(得分:1)
您可以使用FindElements()来获取所有元素,然后在本地循环访问它们,这样您就不必继续访问该网站。虽然只有2个元素可能不是什么大问题但是如果将来列表增长你就会拥有它。
以下是未经测试的伪代码,但应该让你很清楚我的意思:
List<WebElement> elements = driver.findElements(By.Xpath("//div[@class = 'tax_details']/ul");
for(WebElement element : elements) {
WebElement item = element.findBy(By.Xpath("'./li');
...
...
...
}
我们的想法是,您将列出所有元素,然后您可以访问元素属性或构建switch语句或任何您的要求。
答案 2 :(得分:1)
假设您要求使用可视文本线索来定位元素,您可以使用XPath,例如:
WebElement taxDetails = driver.findElement(By.className("tax_details"));
WebElement totalIncome = taxDetails.findElement(By.xpath(".//li[contains(., 'Total Income')]"));
String totalIncomeAmount = totalIncome.findElement(By.tagName("span")).getText();
class="tax_details"
在页面上只出现一次,则第一行检索整个块的拒绝。li
。在这种情况下,XPath表达式中的前导点非常重要;请参阅official documentation。span
元素中。在实际制作中,您可能希望将其提取为更有用的东西,也许是将“感兴趣的文本”作为输入的方法。
答案 3 :(得分:1)
您还可以使用Pure xpath语句。你需要三个一个 例如。 “总收入”
/div/[@class"tax_details"]/ul[@class="clearfix"]/li[p/text()="Total Income"]/span/text()
解释声明
[p/text()="Total Income"]
使xpath根据兄弟元素的文本限制返回的li元素,导致只返回一个span节点。