【问题标题】:Traversing URLs or pages to find 404 links遍历 URL 或页面找到 404 链接
【发布时间】:2014-09-04 17:03:04
【问题描述】:

我有一个遍历一级 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的链接,因为这些标准链接是重复的并且在每个页面上都可以找到,如果可能的话我可以忽略这些...

期待一些意见!!

【问题讨论】:

    标签: java selenium-webdriver http-status-code-404 linkchecker


    【解决方案1】:

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

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

    然后你有一个重复的循环,直到要检查的 URL 列表为空,然后这样做:

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

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

    【讨论】:

    • 如何忽略特定标签之间的链接,例如:忽略所有落在
      标签内的链接?
    • 代替 By.tagName("a") 尝试 By.xpath("body//a") 或 By.cssSelector("body a")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多