我有一個應用程序A,它應該處理使用POST方法提交的表單。發起請求的實際表單是完全獨立的應用程序B.我使用Selenium測試應用程序A,並且我喜歡爲表單提交處理編寫測試用例。在沒有填寫表格的情況下在Selenium中發出POST請求?
如何做到這一點?這可以在硒中完成嗎?應用程序A沒有可以啓動此請求的表單。
請注意,請求必須使用POST,否則我可以使用WebDriver.get(url)方法。
我有一個應用程序A,它應該處理使用POST方法提交的表單。發起請求的實際表單是完全獨立的應用程序B.我使用Selenium測試應用程序A,並且我喜歡爲表單提交處理編寫測試用例。在沒有填寫表格的情況下在Selenium中發出POST請求?
如何做到這一點?這可以在硒中完成嗎?應用程序A沒有可以啓動此請求的表單。
請注意,請求必須使用POST,否則我可以使用WebDriver.get(url)方法。
用硒你可以執行任意的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.responseText
和executeScript()結果分配給Java變量。
我不認爲這是可能的使用硒。沒有辦法使用Web瀏覽器從無到有創建POST請求,Selenium通過操作Web瀏覽器來工作。我建議您使用HTTP庫來發送POST請求,並將其與Selenium測試一起運行。 (你使用什麼語言/測試框架?)
Java + JUnit。我可以使用其他工具進行POST請求,但是如何讓Selenium處理響應? –
你爲什麼不用硒填寫表格並提交表格,並確保在執行完成時提供正確的數據。但是,如果應用程序B停機,則此測試總是失敗 - 換句話說,我認爲您需要嘲笑這種交互。 – Scott
@Scott:我不會有任何訪問應用程序B的地方。 –
似乎唯一的方法就是模擬你有權訪問的應用程序中的表單,否則硒在這種情況下並不是最有意義的。 – Scott