如何在selenium中提取没有id的文本

时间:2017-08-21 19:47:45

标签: java selenium selenium-webdriver webdriver findby

<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

提取硒中的总收入和应纳税,无可识别的应税收入

4 个答案:

答案 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();
  1. 假设属性class="tax_details"在页面上只出现一次,则第一行检索整个块的拒绝。
  2. 第二行检索包含感兴趣文本的行li。在这种情况下,XPath表达式中的前导点非常重要;请参阅official documentation
  3. 最后一行检索金额,该金额位于感兴趣的行的span元素中。
  4. 在实际制作中,您可能希望将其提取为更有用的东西,也许是将“感兴趣的文本”作为输入的方法。

答案 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节点。