在一个数据驱动的JSF应用程序中,是否有一个软件工具来警告404页?

在一个数据驱动的JSF应用程序中,是否有一个软件工具来警告404页?,jsf,selenium-webdriver,xenu,linkchecker,Jsf,Selenium Webdriver,Xenu,Linkchecker,有一个使用JSF开发的数据驱动web应用程序。是否有任何工具可以帮助查找指向404页面的链接?目前,我们只知道当有人手动点击并得到404,这可能是由于一个查询不起作用或任何其他原因。链接是带有隐藏参数的动态链接,因此我认为静态链接检查器将无法工作。硒可能是一种可能性,但我们必须编写代码来覆盖所有可能的路径 有什么建议吗?您可以使用以下代码获取网页中的所有链接,并使用HttpURLConnection检查每个链接以检查链接的状态 WebDriver driver = new FirefoxDriv

有一个使用JSF开发的数据驱动web应用程序。是否有任何工具可以帮助查找指向404页面的链接?目前,我们只知道当有人手动点击并得到404,这可能是由于一个查询不起作用或任何其他原因。链接是带有隐藏参数的动态链接,因此我认为静态链接检查器将无法工作。硒可能是一种可能性,但我们必须编写代码来覆盖所有可能的路径


有什么建议吗?

您可以使用以下代码获取网页中的所有链接,并使用
HttpURLConnection
检查每个链接以检查链接的状态

WebDriver driver = new FirefoxDriver();
driver.get("urlOfWebsite");

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

ArrayList<String> linksInvalid = new ArrayList<>();
ArrayList<String> linksResulting404 = new ArrayList<>();
for (WebElement link : links) {
    URL u;
    try {
        u = new URL(link.getAttribute("href"));

        HttpURLConnection huc = (HttpURLConnection) u.openConnection();
            huc.setRequestMethod("GET");

        huc.connect();
        int code = huc.getResponseCode();
        if (code == 404 || code == 400) {
            //Add link text and href to linksResulting404 list
            linksResulting404.add(link.getText() + " - "
                    + link.getAttribute("href"));
        }
    } catch (MalformedURLException e) {
            //Add link text and href to linksResulting404 list
        linksInvalid.add(link.getText() + " - "
                + link.getAttribute("href"));

    } catch (IOException e) {
        e.printStackTrace();
    }
}

System.out.println("Invalid links : ");
for (String linkInvalid : linksInvalid) {
    System.out.println(linkInvalid);
}

System.out.println("\nLinks resulting in 404/400");
for (String linkResulting404 : linksResulting404) {
    System.out.println(linkResulting404);
}
WebDriver=newfirefoxdriver();
获取(“urlOfWebsite”);
列表链接=driver.findElements(按.tagName(“a”));
ArrayList linksInvalid=新的ArrayList();
ArrayList linksResulting404=新建ArrayList();
用于(WebElement链接:链接){
URL u;
试一试{
u=新URL(link.getAttribute(“href”);
HttpURLConnection huc=(HttpURLConnection)u.openConnection();
huc.setRequestMethod(“GET”);
huc.connect();
int code=huc.getResponseCode();
如果(代码==404 | |代码==400){
//将链接文本和href添加到linksResulting404列表
linksResulting404.add(link.getText()+“-”
+link.getAttribute(“href”);
}
}捕获(格式错误){
//将链接文本和href添加到linksResulting404列表
linksInvalid.add(link.getText()+“-”
+link.getAttribute(“href”);
}捕获(IOE异常){
e、 printStackTrace();
}
}
System.out.println(“无效链接:”);
for(字符串linkInvalid:linksInvalid){
System.out.println(linkInvalid);
}
System.out.println(“\n导致404/400的链接”);
对于(字符串链接结果404:linksResulting404){
System.out.println(linkResulting404);
}

如果这对您有帮助,请告诉我。

您做得很好,但当您说“网页中的链接”时,这意味着这些链接是硬编码的静态URL。但是这个应用程序有一些链接,这些链接只有在导航到动态生成的页面时才会出现。所以我想我需要像Selenium测试这样的东西来模拟手动用户。那么你想验证你网站每个页面上的链接吗?如果是,请参考我给出的答案。我相信你会明白的。让我知道这是否有效。