2012-05-08 52 views
8

我有一個應用程序A,它應該處理使用POST方法提交的表單。發起請求的實際表單是完全獨立的應用程序B.我使用Selenium測試應用程序A,並且我喜歡爲表單提交處理編寫測試用例。在沒有填寫表格的情況下在Selenium中發出POST請求?

如何做到這一點?這可以在硒中完成嗎?應用程序A沒有可以啓動此請求的表單。

請注意,請求必須使用POST,否則我可以使用WebDriver.get(url)方法。

+1

你爲什麼不用硒填寫表格並提交表格,並確保在執行完成時提供正確的數據。但是,如果應用程序B停機,則此測試總是失敗 - 換句話說,我認爲您需要嘲笑這種交互。 – Scott

+0

@Scott:我不會有任何訪問應用程序B的地方。 –

+1

似乎唯一的方法就是模擬你有權訪問的應用程序中的表單,否則硒在這種情況下並不是最有意義的。 – Scott

回答

3

用硒你可以執行任意的Javascript,包括programmatically submit a form

最簡單的JS執行與硒的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.responseTextexecuteScript()結果分配給Java變量。

4

我不認爲這是可能的使用硒。沒有辦法使用Web瀏覽器從無到有創建POST請求,Selenium通過操作Web瀏覽器來工作。我建議您使用HTTP庫來發送POST請求,並將其與Selenium測試一起運行。 (你使用什麼語言/測試框架?)

+4

Java + JUnit。我可以使用其他工具進行POST請求,但是如何讓Selenium處理響應? –

相關問題