Reputation: 69
I have problem, here is html pseudocode:
<div class="content" id="ui6" role ="tabpanel">
<p> text </p>
<ul> <li> text2 </li>
<li> text3 </li>
</ul>
</div>
I want to get text, text2 and text3 and print them, but I can only manage to get "text".
Here is the code:
List<WebElement> sectionThreeText = driver.findElements(By.cssSelector("#ui6"));
for(WebElement e : sectionThreeText) {
System.out.println(e.getText());
}
I tried also find it by:
css = "#ui6 > p ul"
xpath = "//*[@id=ui6]"
xpath = "//*[@id=ui6]/*"
xpath = "//*[@id=ui6]/p | //*[@id=ui6]/ul"
I am out of ideas. Where I make mistake?
Upvotes: 1
Views: 886
Reputation: 193058
To print text, text2 and text3 you can use either of the following 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());
As an alternative you can also use the following Locator Strategies:
To print text:
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());
To print 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());
To print 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());
Upvotes: 3
Reputation: 5214
You can get all descendants of the ui6
element with xpath(".//*")
.
Try this:
WebElement sectionThreeText = driver.findElement(By.cssSelector("#ui6"));
List<WebElement> childs = sectionThreeText.findElements(By.xpath(".//*"));
for(WebElement e: childs )
{
System.out.print(e.getText());
}
Upvotes: 0
Reputation: 1779
To get text2
and text3
use xpath //*[@id="ui6"]/ul/li
not xpath = "//*[@id=ui6]/p | //*[@id=ui6]/ul"
as you have mentioned. //*[@id="ui6"]/ul/li
This xpath will help get all li
elements inside ul
Upvotes: 0
Reputation: 161
Using the Jsoup you can retrive the HTML page
Document doc = Jsoup.parse(htmlString);
Elements divs = doc.select("div");
for(Element elem : divs){
System.out.println(elem.html()); //get all elements inside div
}
Upvotes: 0