0

我有一个遍历一级 URL 的工作代码,我需要一些帮助来实现两级或三级链接遍历以检测 404。

    driver().navigate().to(URL);
    driver().manage().window().maximize();
    String orgWindow = driver().getWindowHandle();

    List<WebElement> linksList = driver().findElements(By.tagName("a"));

    for (WebElement linkElement : linksList) {

        System.out.println("================ At First Level =================");

        String link = linkElement.getAttribute("href");
        if (link != null && link.contains("test")) {

            verifyLinkActive(link); //This method has HTTP URL connection to detect for 404's

            // Second Level Traversing.....
            driver().navigate().to(link);
            driver().manage().window().maximize();

            List<WebElement> SecondLinkList = driver().findElements(By.tagName("a"));

            for (WebElement linkSecondElement : SecondLinkList) {

                System.out.println("================ At Second Level =================");

                String Secondlink = linkSecondElement.getAttribute("href");
                if (Secondlink != null && Secondlink.contains("test")) {

                    verifyLinkActive(Secondlink);

                }// SecondIF

            }//Second for


        }//if

        driver().switchTo().window(orgWindow);  //Switching back to Original window


    } //for

我的问题 - 1)我为第二或第三级迭代实现找到 404 的方法是否正确。2)还有一种方法可以忽略某些带有特定标签或ID的链接,因为这些标准链接是重复的并且在每个页面上都可以找到,如果可能的话我可以忽略这些...

期待一些输入!

4

1 回答 1

0

如果您的意思是如何构建程序本身,也许最简单的方法是保留要检查的 URL 列表 (to-check-urls) 和一组已检查的 URL (checked-urls)。

当你的程序启动时,to-check-urls 只包含要访问的第一页,而checked-urls 显然是空的。

然后你有一个重复的循环,直到要检查的 URL 列表为空,然后执行以下操作:

  1. 如果列表为空,退出,你完成了
  2. 从 to-check-urls 中取出一个 url 并将其删除
  3. 如果 URL 已经存在于 check-urls 中,则返回 1
  4. 将 url 添加到 check-urls
  5. 像你已经做的那样打开网址
  6. 如果是404,随意报错,返回1
  7. 像你已经做的那样解析 HTML
  8. 将所有找到的 url 放入 to-check-urls
  9. 返回 1

代码大部分都在那里,只需要使用两个列表将其排列在一个循环中。这样,您就不会检查 url 两次,也不在乎它们是第二层还是第三层或第四层,也因为站点是图形而不是树,所以无论您添加多少层仍然可以更多。

于 2014-09-04T17:16:58.713 回答