Помогите пожалуйста разобраться с json-запросами

rest
webdriver
json
Теги: #<Tag:0x00007f7b64343988> #<Tag:0x00007f7b643437f8> #<Tag:0x00007f7b64343640>

(Алик Гилиздинов) #1

Всех с наступающим Новым Годом! Помогите пожалуйста разобраться, как отправить через webdriver json-запрос на загрузку файла.


(rmerkushin) #2

Selenium такими вещами не занимается. Загружать файл в форму можно через send_keys. Все что касается post\get запросов, это к любой библиотеке работающей с REST.


(Алик Гилиздинов) #3

а толковую библиотечку не посоветуете? и каким образом можно залить файл через send_keys?


(rmerkushin) #4

Ну вы бы хоть сказали какой ЯП используете :smile: По поводу загрузки файла через send_keys:

element = self.driver.find_element_by_xpath(xpath)
element.send_keys(file_path) 

Тут все очень просто, пример на Python (для Java, C# и etc. думаю не сильно будет отличаться), вам нужно получить элемент input который используется в форме для загрузки, и через send_keys передать ему путь к загружаемому файлу. Потом просто отправляете форму любым способом. Естественно такой способ канает только если есть input элемент для загрузки.

P.S.: по поводу библиотеки для REST, могу только подсказать либу под Python - requests очень простая и гибкая.


(Сергей Блохин) #5

unirest — кроссязыковая библиотека для работы с HTTP(S).


(Алик Гилиздинов) #6

я использую связку java+junit+selenium


#7

Rest assured библиотечка для json
Решение вашей задачи выглядит как то так
given(). multiPart(new File("/path/to/file")). when(). post("/upload");

почитать тут


(Алик Гилиздинов) #8

Продолжение вопроса: а как выдернуть из ответа сервера cookie?


(Stan) #9

с помощью чего?


(Алик Гилиздинов) #10

selenium+java. Если есть возможность, то через Rest accured


(Stan) #11

https://github.com/jayway/rest-assured/blob/master/examples/rest-assured-itest-java/src/test/java/com/jayway/restassured/itest/java/CookieITest.java


(Алик Гилиздинов) #12

а можно немного поподробнее?


(Stan) #13

Там куча примеров.

final Map<String,String> cookies = get("/multiCookie").cookies();

(Алик Гилиздинов) #14

я понять только не могу : /multiCookie это что?


(Stan) #15

запрос на какой-то бэкенд?


(Алик Гилиздинов) #16

да. у меня задача - через автотесты залить файлы. автотесты на java+junit+selenium.


(Stan) #17

это был ответ, get("/multiCookie") это обычный гет запрос куда-либо, по сути

GET /something
...

данный пример урла взят из теста с их гитхаба


(Алик Гилиздинов) #18

понятно, спасибо большое


(Алик Гилиздинов) #19

в продолжение вопроса:

public void cookiesReturn() throws Exception {
   final Map<String,String> cookies = get("/login").cookies();
   System.out.print(cookies.get("rememberme"); 
}

Не работает. При попытке вызвать из теста cookiesReturn(); - выдается ошибка

Теперь у меня еще начала вылезать непонятная ошибка при запуске самого браузера. В коде ничего не менял, добавил только вот это выдергивание куков.


(Stan) #20

какая ошибка?

экстрасенсы в отпуске (с) @ArtOfLife