如何使用Selenium Java在另一个ul标签内打印文本[关闭]

问题描述 投票:0回答:4

伙计们,我正在学习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>标签。

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

谢谢

java html css selenium selenium-webdriver
4个回答
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"));
    }
}

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

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());
             }
        }
    }
}

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

© www.soinside.com 2019 - 2024. All rights reserved.