如何在Selenium WebDriver中获取"ul"类的所有"li"元素

Tar*_*run 5 html java selenium selenium-webdriver

我是Selenium webdriver的新手.我遇到了一个要求,我必须运行我的测试,点击一个部分中的所有链接.有人可以帮我解决这个问题.附上一张图片,显示该特定部分的萤火虫属性.我尝试了下面的代码,但它返回一个空列表.

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();          
    }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Jef*_*ffC 7

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

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());
}
Run Code Online (Sandbox Code Playgroud)

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


小智 0

你可以使用像这样的例子:

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

使用附加到 html 根目录的 XPath(即绝对 xpath)通常是个坏主意,您应该始终尝试使用尽可能短的选择器(即相对 xpath)。

另请记住,如果链接被隐藏,您需要触发启用它们的操作 - 例如打开菜单。