【问题标题】:How to get all text from different elements under one div如何从一个div下的不同元素中获取所有文本
【发布时间】:2019-12-09 17:56:56
【问题描述】:

我有问题,这里是html伪代码:

<div class="content" id="ui6" role ="tabpanel">
 <p> text </p>
 <ul> <li> text2 </li>
      <li> text3 </li>
 </ul>
  </div>

我想获取文本、text2 和 text3 并打印它们,但我只能设法获取“文本”。

代码如下:

List<WebElement> sectionThreeText = driver.findElements(By.cssSelector("#ui6"));
    for(WebElement e : sectionThreeText) {
        System.out.println(e.getText());
    }

我也试过通过以下方式找到它:

css = "#ui6 > p ul"
xpath = "//*[@id=ui6]"
xpath = "//*[@id=ui6]/*"
xpath = "//*[@id=ui6]/p | //*[@id=ui6]/ul"

我没有想法。我哪里出错了?

【问题讨论】:

    标签: java selenium selenium-webdriver xpath css-selectors


    【解决方案1】:

    要打印 texttext2text3,您可以使用以下任一Locator Strategies

    • cssSelector

      System.out.println(driver.findElement(By.cssSelector("div.content#ui6")).getText());
      
    • xpath

      System.out.println(driver.findElement(By.xpath("//div[@class='content' and @id='ui6']")).getText());
      

    作为替代方案,您还可以使用以下定位器策略

    • 要打印文本

      • cssSelector

        System.out.println(driver.findElement(By.cssSelector("div.content#ui6>p")).getText());
        
      • xpath

        System.out.println(driver.findElement(By.xpath("//div[@class='content' and @id='ui6']/p")).getText());
        
    • 要打印 text2

      • cssSelector

        System.out.println(driver.findElement(By.cssSelector("div.content#ui6 ul>li")).getText());
        
      • xpath

        System.out.println(driver.findElement(By.xpath("//div[@class='content' and @id='ui6']//ul/li")).getText());
        
    • 打印text3

      • cssSelector

        System.out.println(driver.findElement(By.cssSelector("div.content#ui6 ul li:nth-child(2)")).getText());
        
      • xpath

        System.out.println(driver.findElement(By.xpath("//div[@class='content' and @id='ui6']//ul//following-sibling::li[2]")).getText());
        

    【讨论】:

    • 这应该可以完成这项工作。我的方法是遍历元素以获得更多乐趣。
    • 我试图在一行代码中完成所有工作,但放弃了。这完成了工作。谢谢。
    【解决方案2】:

    使用 Jsoup 可以检索 HTML 页面

        Document doc = Jsoup.parse(htmlString);
        Elements divs = doc.select("div");
        for(Element elem : divs){
          System.out.println(elem.html()); //get all elements inside div
        }
    

    【讨论】:

    • 这将打印页面中所有 div 的文本
    【解决方案3】:

    要获得text2text3,请使用xpath //*[@id="ui6"]/ul/li 而不是xpath = "//*[@id=ui6]/p | //*[@id=ui6]/ul",正如您所提到的。 //*[@id="ui6"]/ul/li 这个 xpath 将帮助在 ul 中获取所有 li 元素

    【讨论】:

      【解决方案4】:

      您可以使用xpath(".//*") 获取ui6 元素的所有后代。

      试试这个:

      WebElement sectionThreeText = driver.findElement(By.cssSelector("#ui6"));
      List<WebElement> childs = sectionThreeText.findElements(By.xpath(".//*"));
      for(WebElement e: childs )
      {
          System.out.print(e.getText());
      }
      

      【讨论】:

        猜你喜欢
        • 2021-09-04
        • 2015-12-30
        • 2019-06-22
        • 2012-08-15
        • 1970-01-01
        • 1970-01-01
        • 2018-07-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多