使用selenium webdriver检查链接时处理异常

时间:2014-02-12 08:24:08

标签: java selenium-webdriver

我试图通过检查页面上的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());
                  }
}

1 个答案:

答案 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();
}