我试图通过检查页面上的H1元素来检查网页的所有菜单网址。所以当循环运行并遇到异常循环停止时。我希望循环继续,即使遇到css定位器的不匹配。请帮忙
这是我的代码
List<WebElement> dropdown = Driver.findElementsByXPath("//ul[@class='nav']//ul//li//a");
int dropdown_count = dropdown.size();
System.out.println(dropdown_count);
for (int i=0; i<dropdown_count; i++)
{
String page = dropdown.get(i).getAttribute("href");
System.out.println(page);
Thread.sleep(2000);
Driver1.get(page);
try
{
Driver1.findElement(By.cssSelector("h1")).isDisplayed();
}
catch(NoSuchElementException ne)
{
System.out.println("error page: " + page);
}
{
System.out.println("page heading: " + Driver1.findElement(By.cssSelector("h1")).getText());
}
}
答案 0 :(得分:0)
问题#1 - 未处理的NoSuchElementException
。
代码中唯一可以导致此问题的声明是Driver1.findElement(...)
。
您正在try
子句中执行此语句,但也在try
子句之外。
很明显,由于该异常,循环(可能是整个方法)终止。
因此,您需要将第二个Driver1.findElement(...)
移动到try
子句中。
事实上,在try
子句中,您也可以只搜索h1
元素一次:
try
{
WebElement h1 = Driver1.findElement(By.cssSelector("h1"));
if (h1.isDisplayed())
System.out.println("page heading: " + h1.getText());
}
catch(NoSuchElementException ne)
{
System.out.println("error page: " + page);
}
问题#2 - 未处理的StaleElementException
。
当您使用WebElement
导航到其他页面后,或者在使用{{1切换到不同的帧之后 - 获取某些get(...)
对象时以及稍后执行时,通常会发生此异常你尝试使用它。
调用switchTo().frame(...)
后尝试使用dropdown
时可能会发生这种情况。
以下是此问题的可选解决方法:
Driver1.get(page)
这是两个问题的替代解决方案,可以使您的计划更有效率。首先,迭代所有链接并构建URL列表。然后,导航到每个URL并在每个页面上执行您想要执行的操作:
for (int i=0; true; i++)
{
List<WebElement> dropdown = Driver.findElementsByXPath(...);
int dropdown_count = dropdown.size();
if (dropdown_count >= i)
break;
String page = dropdown.get(i).getAttribute("href");
Driver1.get(page);
...
Driver1.navigate().back();
}