2012-05-08 115 views
8

POSTメソッドで作成されたフォームを処理するアプリケーションAがあります。要求を開始する実際のフォームは完全に別個のアプリケーションBです。私はアプリケーションAをSeleniumでテストしています。フォーム送信処理のテストケースを記述したいと思います。フォームに記入せずにSeleniumでPOSTリクエストをしていますか?

これを行う方法?これはセレンではまったくできますか?アプリケーションAには、この要求を開始できるフォームはありません。

リクエストはPOSTを使用する必要があります。そうでないと、WebDriver.get(url)メソッドを使用できます。

+1

セレンでフォームに記入してフォームを送信し、実行完了時に適切なデータが表示されるようにしてください。しかし、アプリケーションBがダウンしている場合、このテストは常に失敗します。つまり、この相互作用を模擬する必要があると思います。 – Scott

+0

@Scott:私は、フォームがどこにあるアプリケーションBにアクセスすることもありません。 –

+1

あなたがアクセス権を持っているアプリケーションの内部でフォームを偽装することが唯一の方法だと思われます。そうでなければ、セレンはこの文脈で最も意味をなさない。 – Scott

答えて

3

セレンでは、programmatically submit a formを含む任意のJavascriptを実行できます。

セレンJavaの最も単純なJSの実行:

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するのではなく、その後、セレンに応答テキスト上を通過し、Javaの変数にexecuteScript()の結果を割り当てる必要がある場合。

4

セレンを使用することはできません。 Webブラウザを使用せずにPOSTリクエストを作成する方法はなく、SeleniumはWebブラウザを操作して動作します。代わりにPOSTリクエストを送信するためにHTTPライブラリを使用して、あなたのSeleniumテストと一緒に実行することをお勧めします。 (どの言語/テストフレームワークを使用していますか?)

+4

Java + JUnit。私は他のツールを使ってPOST要求を行うことができますが、どうすればSeleniumがレスポンスを処理できますか? –

関連する問題