Вопрос по post, request – Делаете POST-запрос в Selenium без заполнения формы?

10

У меня есть приложение A, которое должно обрабатывать форму отправки, сделанную методом POST. Фактическая форма, которая инициирует запрос, находится в совершенно отдельном приложении B. Я тестирую приложение A с использованием Selenium, и мне нравится писать тестовый пример для обработки отправки формы.

Как это сделать? Можно ли это сделать в Selenium вообще? Приложение A не имеет формы, которая может инициировать этот запрос.

Обратите внимание, что запрос должен использовать POST, в противном случае я мог бы просто использовать метод WebDriver.get (url).

Дубликатstackoverflow.com/questions/5660956/… ? rwitzel
Я думаю, что насмешка над формой - лучший путь. Вы даже можете создать эту форму динамически с помощью JavaScript neoascetic
кажется, что единственный способ сделать это - смоделировать форму внутри приложения, к которому у вас есть доступ, в противном случае селен в этом контексте не имеет смысла. Scott
Почему вы не заполняете форму с селеном, отправляете форму и гарантируете, что вам предоставят правильные данные после завершения выполнения. Однако, если приложение B не работает, этот тест всегда будет неудачным - иными словами, я думаю, что вам нужно высмеивать это взаимодействие. Scott
@ Скотт: У меня не будет доступа к приложению Б, где будет форма. Juha Syrjälä

Ваш Ответ

2   ответа
5

программно отправить форму.

Простейшее выполнение JS с Selenium Java:

if (driver instanceof JavascriptExecutor) {
    ((JavascriptExecutor) driver).executeScript("alert('hello world');");
}

а с помощью Javascript вы можете создать запрос POST, установить необходимые параметры и заголовки HTTP и отправить его.

var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://httpbin.org/post', true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.onload = function () {
    alert(this.responseText);
};

xhr.send('login=test&password=test');

Если вам нужно передать селену текст ответа, то вместоalert(this.responseText) использованиеreturn this.responseText и назначить результатexecuteScript () в переменную Java.

Вот полный пример для Python:

from selenium import webdriver

driver = webdriver.Chrome()

js = '''var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://httpbin.org/post', true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.onload = function () {
    alert(this.responseText);
};

xhr.send('login=test&password=test');'''

driver.execute_script(js)

NOTE: If you need to pass string arguments to the javascript make sure you always escape them using json.dumps(myString) or otherwise your js will break when the string contains single or double quotes or other tricky characters.

4

что это возможно при использовании Selenium. Невозможно создать POST-запрос из ничего, используя веб-браузер, а Selenium работает, манипулируя веб-браузерами. Я предлагаю вам использовать HTTP-библиотеку вместо отправки запроса POST и выполнять его вместе с вашими тестами Selenium. (Какой язык / рамки тестирования вы используете?)

Error: User Rate Limit Exceeded Juha Syrjälä

Похожие вопросы