如何使用Selenium Java在另一个ul标记内打印文本

时间:2017-12-17 11:40:28

标签: java html css selenium selenium-webdriver

伙计们我正在学习Selenium Automation。

我设计了一个网站,如下所示。

我的Html代码:

<!DOCTYPE html>
<html>
<head><title>Shop</title></head>
<body>
<ul>
    <li><a href="www.rendertofruitsection.com">Fruits</a>
       <ul>
           <li><a href="www.addbananatocart.com">» Banana</a></li>
           <li><a href="www.addappletocart.com">» Apple</a></li>
           <!--List goes on-->
       </ul>
    </li>
    <li><a href="www.redertovegsection">Vegetable</a>
         <ul>
              <li><a href="www.addcapcicumtocart">» Capsicum</a></li>
              <li><a href="www.addtomatotocart.com">» Tomato</a></li>
              <li><a href="www.addoniontocart">» Onion</a></li>
              <!--List goes on-->
         </ul>
    </li>
    <li><a herf="www.nonveglink.com">Non Veg Section</a></li>
    <!--List goes on-->
</ul> 
</body>
</html> 

最初,我计划使用java selenium列出<a>标记内显示的所有文字。

所以我在下面写了这段代码。

我的Java代码:

public class shop
{
    public static void main(String[] args)
    {
        WebDriver driver= new ChromeDriver();
        driver.get("www.myshopping.com");
        List<WebElement> text=  driver.findElements(By.xpath("//a"));
        for(int i=0;i<text.size();i++)
        {
             System.out.println(i+". "+text.get(i).getText());
        }
    }
}

输出我得到和需要的东西:

 Output what I got:                      | Output What I need:
 1. Fruits                               | 1. Fruits
 2.                                      | 2. Banana
 3.                                      | 3. Apple
 4. Vegetable                            | 4. Vegetable
 5.                                      | 5. Capsicum
 6.                                      | 6. Tomato 
 7.                                      | 7. Onion
 8. Non Veg Section                      | 8. Non Veg Section

大家只是告诉我们如何使用Selenium Java在内部<ul> <li>标签中获取文字。

我尝试了一些,但我把它困在这里。请帮助。

谢谢

4 个答案:

答案 0 :(得分:0)

WebElement x = driver.findElement(By.xpath("xpathOfTheElement"));
String text = x.getAttribute("innerText");
System.out.println(text);

答案 1 :(得分:0)

尝试为项类型应用外部循环,并为似乎动态生成的项添加内部循环:

public class shop
{
    public static void main(String[] args)
    {
        WebDriver driver= new ChromeDriver();
        driver.get("www.myshopping.com");
        List<WebElement> text=  driver.findElements(By.xpath("//li[ul]/a"));
        for(int i=0;i<text.size();i++)
        {
             System.out.println(i+". "+text.get(i).getText());
             WebDriverWait wait = new WebDriverWait(i, 10);
             List<WebElement> innerText =  wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath(".//following-sibling::ul//a[text()]")));
             for(int j=0; j<text.size(); j++)
             {
                 System.out.println(i+". "+j+". "+text.get(j).getText());
             }
        }
    }
}

答案 2 :(得分:0)

要列出<a>标记内显示的所有文字,您可以尝试以下代码块:

public class shop
{
    public static void main(String[] args)
    {
    WebDriver driver= new ChromeDriver();
    driver.get("www.myshopping.com");
    List<WebElement> atags =  driver.findElements(By.tagName("a"));
    for(WebElement atag:atags)
         System.out.println("Text is : " + atag.getAttribute("innerHTML"));
    }
}

答案 3 :(得分:0)

如果您只想表示外部ul内的项目,请按以下方式更改代码。这只是一个定位器改变:

public static void main(String[] args) {
       WebDriver driver= new FirefoxDriver();
       driver.get("file:///C:/Users/abdul%20awal/Desktop/test.html");
       List<WebElement> text=  driver.findElements(By.cssSelector("ul ul a"));
       for(int i=0;i<text.size();i++)
       {
            System.out.println(i+". "+text.get(i).getText());
       }
   }   

对于CSS选择器参考,请点击以下链接:

https://www.w3schools.com/cssref/css_selectors.asp