繁体   English   中英

如何在Selenium WebDriver中获取“ul”class的所有“li”元素

[英]How to get all "li" elements of "ul" class in Selenium WebDriver

我是 Selenium 网络驱动程序的新手。 我遇到了一个要求,我必须运行我的测试,点击一个部分中的所有链接。 有人可以帮我 Java 代码吗? 附上一张图片,显示该特定部分的萤火虫属性。 我已经尝试了下面的代码,但它返回了一个 null 列表。

public static void main(String[] args) {

    WebDriver driver = new FirefoxDriver();

    driver.get("https://dev.www.tycois.com/");
    driver.manage().window().maximize();

    List<WebElement> allElements = driver.findElements(By.xpath("html/body/div[10]/div/div[1]/div[3]/ul[1]/li[5]"));
    System.out.println(allElements);

    for (WebElement element: allElements) {
        System.out.println(element.getText());
        element.click();          
    }
}

提前致谢。

细节不明确,但看起来您正在尝试打印页脚的“行业”部分中的链接。 如果这是真的,这应该有效。

driver.get("https://dev.www.tycois.com/");
WebElement industries = driver.findElement(By.cssSelector("div.columns.three.alpha > ul"));
List<WebElement> links = industries.findElements(By.tagName("li"));
for (int i = 1; i < links.size(); i++)
{
    System.out.println(links.get(i).getText());
}

您无法单击此循环中的链接,因为一旦您单击第一个链接,您将不再在该页面上。 我建议您将每个链接的URL存储在一个数组中,然后将driver.get(url)存储到每个链接中。 或者,您可以将预期的URL存储在一个数组中,并将链接中的URL与预期的URL进行比较,而不必进行导航。 这个选择由你...

JeffC的解决方案适用于下面详述的调整 -

driver.get("https://dev.www.tycois.com/");
WebElement industries = 
driver.findElement(By.cssSelector("div.columns.three.alpha > ul"));
List<WebElement> links = industries.findElements(By.tagName("li"));
for (int i = 0; i < links.size(); i++)
{
    System.out.println(links.get(i).getText());
}

上面的替代答案,我无法评论,因为我是网站的新手

for(int i=1; i < links.size(); i++)

然而,这错过了列表中的第一个元素。 建议修复使用 -

for(int i=1; i <= links.size(); i++)

将导致IndexOutOfBoundsException。

要修复,只需将迭代器设置为从0开始,而不是1

您可以使用例如:

driver.findElements(By.xpath("//li[contains(@class,'managed-services')]/ul/li/a"));

使用附加到html根的XPath(即绝对xpath)通常是个坏主意,你应该总是尝试使用最短的选择器,即相对xpath。

还要记住,如果链接被隐藏,您需要触发操作,这样就可以启用它们 - 例如打开菜单。

您可以尝试使用以下代码。

只需根据您的应用程序更改xpath。

List<WebElement> liElements = driver.findElements(By.xpath(".//*[@id='fk-mainhead-id']/div[2]/div/div/ul/li"));
        System.out.println(liElements);

        for(int i=1; i <= liElements.size(); i++)
        {
            WebElement linkElement = driver.findElement(By.xpath(".//*[@id='fk-mainhead-id']/div[2]/div/div/ul/li[" + i + "]/a"));
            System.out.println(linkElement.getText());      

        }
WebElement industries = driver.findElement(obj.getElement("history_list"));
        List<WebElement> links = industries.findElements(By.tagName("li"));
        boolean a = false;
        Thread.sleep(10000);
        for (WebElement option : links) {
            System.out.println("value =" + option.getText());
            String s = option.getText();
            if (s.equals(new_site_name)) {
                a = true;
                break;
            } else {
                continue;
            }
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM