Pregunta sobre selenium, post, request, forms, testing – ¿Hacer una solicitud POST en Selenium sin llenar un formulario?

10

Tengo una aplicación A que debe manejar un envío de formulario realizado con el método POST. La forma real, que inicia la solicitud, está en la aplicación B totalmente independiente. Estoy probando la aplicación A utilizando Selenium, y me gusta escribir un caso de prueba para el manejo de envío de formularios.

¿Como hacer esto? ¿Se puede hacer esto en el selenio en absoluto? La aplicación A no tiene un formulario que pueda iniciar esta solicitud.

Tenga en cuenta que la solicitud debe usar POST, de lo contrario, podría usar el método WebDriver.get (url).

Creo que la burla de forma es la mejor manera de ir. Incluso puedes crear este formulario dinámicamente con JavaScript neoascetic
@Scott: no tendré acceso a la aplicación B donde estará el formulario. Juha Syrjälä
Parece que la única forma de hacerlo es simular el formulario dentro de la aplicación a la que tiene acceso, de lo contrario, el selenio no tiene más sentido en este contexto. Scott
¿Por qué no completa el formulario con selenio y envía el formulario y se asegura de que se le presenten los datos adecuados al completar la ejecución? Sin embargo, si la aplicación B está desactivada, esta prueba siempre fallará; en otras palabras, creo que debe burlarse de esta interacción. Scott
Duplicado destackoverflow.com/questions/5660956/… ? rwitzel

Tu respuesta

2   la respuesta
4

No creo que sea posible usar el selenio. No hay una manera de crear una solicitud POST de la nada utilizando un navegador web, y Selenium funciona manipulando los navegadores web. Le sugiero que use una biblioteca HTTP para enviar la solicitud POST en su lugar, y ejecute eso junto con sus pruebas de Selenium. (¿Qué lenguaje / framework de pruebas estás usando?)

Java + JUnit. Puedo hacer la solicitud POST utilizando otras herramientas, pero ¿cómo puedo hacer que Selenium procese la respuesta? Juha Syrjälä
5

Con selenio puedes ejecutar Javascript arbitrario incluidoenviar un formulario programáticamente.

La ejecución JS más sencilla con Selenium Java:

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

y con Javascript puede crear una solicitud POST, establecer los parámetros requeridos y los encabezados HTTP y enviarlos.

<code>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');
</code>

Si necesita pasar al selenio el texto de respuesta, en lugar dealert(this.responseText) utilizarreturn this.responseText y asignar el resultado deexecuteScript () a una variable java.

Aquí hay un ejemplo completo para python:

<code>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)
</code>

NOTA: Si necesita pasar argumentos de cadena al javascript, asegúrese de que siempre los escape usandojson.dumps(myString) o de lo contrario su js se romperá cuando la cadena contenga comillas simples o dobles u otros caracteres complicados.

Preguntas relacionadas