[英]How to get all the <li> of <ul> with Selenium WebDriver using Java?
[英]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.