代码之家  ›  专栏  ›  技术社区  ›  joe

如何在selenium中提取没有id的文本[关闭]

  •  -5
  • joe  · 技术社区  · 9 年前
    <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>
    

    4 回复  |  直到 9 年前
        1
  •  2
  •   smit9234    9 年前

    使用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
    
        2
  •  1
  •   so cal cheesehead    9 年前

    您可以使用FindElements()获取所有元素,然后在本地对其进行循环,这样您就不必一直访问站点。虽然只有2个元素,但这可能不是什么大问题,但如果未来列表中的元素越来越多,你可能已经拥有了它。

    以下是未经测试的psuedo代码,但应该可以让您很好地理解我的意思:

    List<WebElement> elements = driver.findElements(By.Xpath("//div[@class = 'tax_details']/ul");
    for(WebElement element : elements) {
        WebElement item = element.findBy(By.Xpath("'./li');
        ... 
        ...
        ...
    }
    

    其思想是将所有元素都放在一个列表中,然后您可以访问元素属性或构建switch语句或任何您的需求。

        3
  •  1
  •   SiKing    9 年前

    假设您要求使用可视文本线索定位元素,您可以使用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 official documentation .
    3. span 兴趣线的元素。

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

        4
  •  1
  •   dank8    9 年前

    还可以使用纯xpath语句。每个人需要三个

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

    解释声明

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

    推荐文章