Существует ли программный инструмент для оповещения 404 страниц в приложении JSF, управляемом данными?

Существует веб-приложение, управляемое данными, разработанное с использованием JSF. Существуют ли какие-либо инструменты, которые могут помочь найти ссылки, которые ведут на страницу 404? В настоящее время мы узнаем только, когда кто-то нажимает вручную и получает 404, что может быть связано с неработающим запросом или другими причинами. Ссылки являются динамическими со скрытыми параметрами, поэтому я предполагаю, что проверка статических ссылок не будет работать. Selenium может быть одной из возможностей, но нам придется написать код, чтобы охватить все возможные пути.

Какие-либо предложения?

1 ответ

Решение

Вы можете использовать следующий код, чтобы получить все ссылки на веб-странице и проверить каждую ссылку, используя 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);
}

Дайте мне знать, если это поможет вам.

Другие вопросы по тегам