如何在 Selenium WebDriver 中获取“ul”类的所有“li”元素
Posted
技术标签:
【中文标题】如何在 Selenium WebDriver 中获取“ul”类的所有“li”元素【英文标题】:How to get all "li" elements of "ul" class in Selenium WebDriver 【发布时间】:2015-12-06 12:16:38 【问题描述】:我是 Selenium 网络驱动程序的新手。我遇到了一个要求,我必须运行我的测试,该测试点击一个部分中的所有链接。有人可以帮我编写 Java 代码吗?附上一张图片,显示该特定部分的萤火虫属性。 我已经尝试了下面的代码,但它返回了一个空列表。
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();
提前致谢。
【问题讨论】:
附件丢失,请详细说明您要执行的操作。 【参考方案1】:你可以像这样使用:
driver.findElements(By.xpath("//li[contains(@class,'managed-services')]/ul/li/a"));
使用附加到 html 根目录的 XPath(即绝对 xpath)通常是个坏主意,您应该始终尝试使用尽可能短的选择器,即相对 xpath。
还请记住,如果链接被隐藏,您需要触发操作,以启用它们 - 例如打开菜单。
【讨论】:
【参考方案2】:你可以试试下面的代码。
只需根据您的应用程序更改 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());
【讨论】:
因为int i初始化为1,所以条件应该是 【参考方案3】:详细信息尚不清楚,但您似乎正在尝试在页脚的 INDUSTRIES 部分打印链接。如果这是真的,这应该可行。
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 进行比较,而根本不需要导航。选择权在你...
【讨论】:
【参考方案4】: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 开始
【讨论】:
以上是关于如何在 Selenium WebDriver 中获取“ul”类的所有“li”元素的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C# 在 Selenium WebDriver (Selenium 2) 中最大化浏览器窗口?
如何使用selenium webdriver来判断一个网页加载完毕
如何在 ruby 中使用 Selenium WebDriver (selenium 2.0) 客户端设置选项
如何在python selenium chrome webdriver中设置标头