Как проверить, является ли ссылка ссылкой для скачивания с использованием Java? - PullRequest
0 голосов
/ 11 мая 2018

Я использую селен, чтобы получить ссылку от a, и я хотел проверить, была ли это ссылка для скачивания.

Для этого я использовал этот код, который я сделал с URL и URLConnection:

final WebElement element = driver.findElement(By.xpath(pathToFile));
        URL url = null;
        final String urlFileToDownload = element.getAttribute("href");
        URLConnection myCon = null;
        String contentDisposition = "";
        try {
            url = new URL(urlFileToDownload);
            myCon = url.openConnection();
            contentDisposition = myCon.getHeaderField("Content-Disposition");
            if (!contentDisposition.contains("attachment;filename=")) {
                assertTrue(false, "The link isn't a download link.");
            }
        } catch (final MalformedURLException e) {
            throw new TestIntegrationException("Error while creating URL : " + e.getMessage());
        } catch (final IOException e) {
            throw new TestIntegrationException("Error while connecting to the URL : " + e.getMessage());
        }
        assertTrue(true, "Link is a download link.");

Проблема в том, что моя ссылка является ссылкой для скачивания, как вы можете видеть на этой картинке: Image-link-download . (картинка - принт-экран консоли) И когда я открываю соединение url.openConnection();

myCon.getHeaderField("Content-Disposition") равно нулю.

Я искал способ сделать это, но каждый раз, когда мое поле заголовка пусто, и я не могу найти проблему, потому что, когда я проверяю консоль, мое поле заголовка не пусто ...

РЕДАКТИРОВАТЬ: я запускаю свой тест селена на докер-сервере, я думаю, это важный момент, чтобы знать.

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Вместо того, чтобы искать вложения, почему бы вам не посмотреть MIME-тип?

String contentType = myCon.getContentType();

if(contentType.startsWith("text/")) {
    assertTrue("The link isn't a download link.", false);
}
0 голосов
/ 14 мая 2018

Моя проблема была вызвана моим сеансом, который отличался от url.openConnection().

. Чтобы исправить проблему, я собрал свой файл cookie JSESSION, используя селен, например:

String cookieTarget = null;
    for (final Cookie cookie : this.kSupTestCase.getDriver().manage().getCookies()) {
        if (StringUtils.equalsIgnoreCase(cookie.getName(), "JSESSIONID")) {
            cookieTarget = cookie.getName() + "=" + cookie.getValue();
            break;
        }
    }

Затем я поместил файл cookie в открытое соединение:

try {
        url = new URL(urlFichierATelecharger);
        myCon = url.openConnection();
        myCon.setRequestProperty("Cookie", cookieCible);
        contentDisposition = myCon.getHeaderField("Content-Disposition");
        if (!contentDisposition.contains("attachment;filename=")) {
            assertTrue(false, "The link isn't a download link.");
        }
    } catch [...]

Вот так у меня получился хороший сеанс, и мой URL был распознан как ссылка для скачивания.

0 голосов
/ 11 мая 2018

попробуйте это:

driver.get("https://i.stack.imgur.com/64qFG.png");

WebElement img = wait5s.until(ExpectedConditions.elementToBeClickable(By.xpath("/html/body/img")));
Dimension h = img.getSize();
Assert.assertNotEquals(0, h);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...