-5
<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 提取总收入和应缴税款,硒中没有 id 的应税收入

4

4 回答 4

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
于 2017-08-21T20:27:19.047 回答
1

您还可以使用 Pure xpath 语句。例如,您将需要三个一个。“总收入”

/div/[@class"tax_details"]/ul[@class="clearfix"]/li[p/text()="Total Income"]/span/text()

解释声明

[p/text()="Total Income"] 

导致 xpath 根据兄弟元素的文本限制返回的 li 元素,从而只返回一个 span 节点。

于 2017-08-22T02:05:15.617 回答
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();
  1. 第一行检索对整个块的引用,假设属性class="tax_details"在页面上只出现一次。
  2. 第二行检索li包含感兴趣文本的行。在这种情况下,XPath 表达式中的前导点非常重要;见官方文档
  3. 最后一行检索金额,该金额位于span感兴趣行的元素中。

在实际生产中,您可能希望将其提取为更有用的东西,也许是一种将“感兴趣的文本”作为输入的方法。

于 2017-08-21T22:13:47.840 回答
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 语句或任何您的要求。

于 2017-08-21T22:00:07.453 回答