Во время удаленной отладки Webdriver зависает при игнорировании ошибок SSL для httpclient - PullRequest
0 голосов
/ 16 февраля 2019

Привет и спасибо всем за ваше время:

Фон :

Я как бы "унаследовал" эту платформу и вещи, упомянутые здесь в разделе "Фон""заложены в камне и даже хуже, по некоторым причинам я не могу их изменить.

  • с использованием инфраструктуры на основе WebDriver
  • с использованием BrowserMobProxy для обхода базовой аутентификации конкретного сайта
  • необходимо отправлять http-запросы программно,во время или перед выполнением некоторых тестовых случаев

выпуск :

(только во время отладки!) после отправки запроса HTTP Post на(определенный) URL с недействительным сертификатом безопасности, Webdriver инициализируется, но очень медленно на самом деле получить доступ к веб-сайту, любому веб-сайту.Иногда это даже разрывает связь.

Сообщение, отображаемое в левом нижнем углу браузера: Установление безопасного соединения (для Chrome) и Выполнение рукопожатия TLS (для Firefox)

Это происходит только во время удаленной отладки.

Дополнительная информация:

  1. многопоточная (?) Среда веб-драйвера
  2. для запросов http, которые яЯ использую httpcomponents v4.4, реализованный с помощью apache / google / stackoverflow
  3. , устанавливающий httpClient для игнорирования ошибок SSL
  4. (!) Если не игнорировать ошибки SSL, запрос http очевидно будетне удается, но веб-драйвер будет работать правильно даже во время отладки
  5. Отладка выполняется с помощью отказоустойчивой отладки maven путем подключения моей IDE к порту 5005 удаленной JVM

Реализация связанных с httpclient вещей

Код работает, я только обрезал его часть, чтобы сохранить только соответствующие части:

httpClient SSLContext sslContext= получитьSSLContext ();

private SSLContext getSSLContext() {
    try {
        return SSLContexts.custom()
                .loadTrustMaterial(null, new TrustSelfSignedStrategy())
                .build();
    } catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
        throw new RuntimeException("Could not create custom SSLContext: ", e);
    }
}

SSLConnectionSocketFactory sslConnectionSocketFactory = getSslConnectionSocketFactory(sslContext);

HttpClientBuilder httpClientBuilder = HttpClientBuilder.create()
    .setSSLSocketFactory(sslConnectionSocketFactory)
    .setDefaultCredentialsProvider(getConfiguredCredentialsProvider())
    .build();

sendPost

public CustomHttpResponse sendPost(String url, HttpEntity httpEntity) {
    HttpPost httpPost = new HttpPost(url);

    int statusCode;
    String responseString;

    if (httpEntity != null) {
        httpPost.setEntity(httpEntity);
    }

    CloseableHttpResponse closeableHttpResponse = null;
    try {
        closeableHttpResponse = httpClient.execute(httpPost);
        HttpEntity responseEntity = closeableHttpResponse.getEntity();
        responseString = EntityUtils.toString(responseEntity);
        statusCode = closeableHttpResponse.getStatusLine().getStatusCode();
    } catch (IOException exception) {
        throw new RuntimeException("Unable to close or execute a POST connection: ", exception);
    } finally {
        try {
            closeableHttpResponse.close();
        } catch (IOException e) {
          //exceptionHandling
        }
    }

    if (statusCode == 0 && responseString == null) {
        throw new RuntimeException("StatusCode or responseString is null!");
    }

    return new CustomHttpResponse(statusCode, responseString);
}
...