2016-01-07 3 views
2

Некоторые запросы к моему веб-приложению возвращают данные не в формате HTML (JSON).Как проверить ответы NON-html с помощью Geb?

Как с этим обращаться?

Я написал следующее определение страницы:

import com.fasterxml.jackson.databind.ObjectMapper 
import geb.Page 

class JsonResponse extends Page { 

    static url = null; 

    static at = { 
     true; 
    } 

    static ObjectMapper mapper = new ObjectMapper(); 

    static content = { 

     readTree { 
      def jsonString = $("pre").text(); 
      mapper.readTree(jsonString) 
     } 

    } 

} 

и он, очевидно, работает. Но вопрос в том, насколько он прав?

Данные принимаются изнутри pre тег. Это потому, что я видел это содержимое внутри driver.pageSource. Это верно? Может быть, это зависит от водителя?

Я положил null в url, так как страница имеет разные URL-адреса в зависимости от запроса. Это верно?

ответ

3

Geb не предназначен для взаимодействия с конечными точками API HTTP, поскольку он построен поверх WebDriver и, следовательно, предполагается использовать его через браузер и HTML-страницы.

Если вы хотите проверить конечные точки HTTP API, я бы предложил использовать http-клиент для поддержки ваших тестов. Есть многие из них в дикой природе, просто назвать несколько, в частности, нет порядка:

1

Я способный загружать содержимое PDF в тестовом модуле geb с использованием Direct Download API. Это удобно, потому что он принимает все файлы cookie из сеанса, но делает загрузку отдельно от браузера.

Пример из этой документации:

Browser.drive { 
    go "http://myapp.com/login" 
  
    // login 
    username = "me" 
    password = "secret" 
    login().click() 
  
    // now find the pdf download link 
    def downloadLink = $("a.pdf-download-link") 
  
    // now get the pdf bytes 
    def bytes = downloadBytes([email protected]) 
} 

Существуют различные методы для загрузки различных видов данных. См. DownloadSupport API docs.

Поскольку geb использует HttpsURLConnection для подключения к конечной точке https вместо использования браузера, у вас могут возникнуть проблемы с самозаверяющими сертификатами. Я решил это, используя this Stack Overflow answer.

 Смежные вопросы

  • Нет связанных вопросов^_^