2012-05-08 69 views
8

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

¿Cómo hacer esto? ¿Se puede hacer esto en Selenium en absoluto? La aplicación A no tiene un formulario que puede iniciar esta solicitud.

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

+1

¿Por qué no completa el formulario con selenio y envía el formulario y se asegura de que se le presenten los datos correctos al completar la ejecución? Sin embargo, si la aplicación B está inactiva, esta prueba siempre fallará; en otras palabras, creo que necesita burlarse de esta interacción. – Scott

+0

@Scott: No tendré acceso a la aplicación B donde estará el formulario. –

+1

parece que la única forma de hacerlo es burlarse del 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

Respuesta

3

Con selenio, puede ejecutar Javascript arbitrario, incluido programmatically submit a form.

ejecución más simple JS con selenio Java:

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

y con Javascript puede crear una solicitud POST, ajustar los parámetros requeridos y las cabeceras HTTP, y enviarlo.

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

Si tiene que pasar por encima de selenio el texto de respuesta a continuación, en lugar de alert(this.responseText) uso return this.responseText y asignar el resultado de executeScript() a una variable de Java.

4

No creo que eso sea posible usando Selenium. No hay una forma de crear una solicitud POST de la nada usando un navegador web, y Selenium funciona manipulando navegadores web. Te sugiero que utilices una biblioteca HTTP para enviar la solicitud POST y la ejecutes junto con tus pruebas de Selenium. (¿Qué marco de lenguaje/prueba está utilizando?)

+4

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

Cuestiones relacionadas