2012-08-16 134 views
3

我想使用Selenium IDE和XML有效負載對服務器執行單個HTTPS POST。我與之交互的服務不支持HTTPS GET,或者我會這樣做。 (做一個HTTPS GET真的很容易,因爲整個URL進入Selenium 打開命令。)我知道還有其他方法可以執行HTTP POST,比如使用curl,但是我的Web測試目前在Selenium IDE中完成,我不想擔心兩三種不同的工具來做我的測試。在Selenium IDE中執行HTTP POST

我看着POST submission by Javascript並修改了我在那裏找到的代碼。我把它作爲Selenium IDE中的storeEval命令。代碼的最終版本如下:

var method = method || "post"; 
var path = "https://service.url.srv/"; 
var post = "<xml>payload</xml>";  
var form = document.createElement("form");  
form.setAttribute("method", method);  
form.setAttribute("action", path); 
var hiddenField = document.createElement("input"); 
hiddenField.setAttribute("type", "hidden"); 
hiddenField.setAttribute("name", ""); 
hiddenField.setAttribute("value", post); 
form.appendChild(hiddenField); form.submit(); 

當我跑的示例代碼稍加修改的版本,我在硒IDE日誌得到了一個消息,說「document.body的是不確定的」。我嘗試刪除對document.body的所有引用,希望一個簡單的表單對象本身就足夠了。事實並非如此。我得到了「form.submit不是函數」。也許有一些Javascript mojo會起作用。

我還沒有在Google或StackOverflow上找到任何有人試圖在Selenium IDE中執行HTTP POST的參考。如果做POST甚至可能,我願意寫Selenium的擴展。

回答

0

所以據我所知,沒有辦法通過Selenium IDE進行HTTP POST,我想我試圖強迫它做一些它從來沒有打算的東西。我將使用JUnit和WebDriver來代替我的POST。

4

這是一箇舊線程,但這可能會幫助其他人(比如我上週!)尋找一種從Selenium IDE發送POST的方式。

我已經設法得到一個工作解決方案 - 我只發送參數和一個空體,因爲我沒有要求發送數據有效載荷,但也許這會幫助某人在這裏。

在IDE中,我在我的基本URL保存爲硒storedVars項目 「testPageBaseUrl」:

<td>store</td> 
<td>${TargetEnvironment}/testpage.html</td> 
<td>testPageBaseUrl</td> 

和我的參數字符串也爲storedVars項目 「PARAMS」:

<td>store</td> 
<td>com=update&amp;some-param=false&amp;some-id=1</td> 
<td>params</td> 

然後我打電話給我的Selenium IDE擴展功能,傳遞基址作爲參數:

<td>postByXMLHttpRequest</td> 
<td>testPageBaseUrl</td> 
<td></td> 

我不是可以使用IDE中的多個參數在目標字段中進行函數調用(命令),因此該函數顯式訪問「params」storedVars變量。

這是我加入user_extentions.js文件中的函數,然後我在硒IDE設置參考:

Selenium.prototype.doPostByXMLHttpRequest = function (baseUrl) { 
var httpReq = new XMLHttpRequest(); 

var params = storedVars ["params"]; 
httpReq.open("POST", storedVars[ baseUrl ]); 

httpReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
httpReq.setRequestHeader("Content-length", params.length); 
httpReq.setRequestHeader("Connection", "close"); 

httpReq.send(params); 
}; 

一些背景資料: https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest http://docs.seleniumhq.org/docs/08_user_extensions.jsp

0

您需要使用seleinum.browserbot.getCurrentWindow()來獲得窗口並使用其文檔成員。

Selenium.prototype.doCustomPost = function (baseUrl) { 
    var win = selenium.browserbot.getCurrentWindow(); 
    var form = win.document.createElement("form"); 
    form.setAttribute("method", "post" ); 
    form.setAttribute("action", baseUrl); 

    //StoredVars is a selenium variable that can be added to by: 
    //<td> store </td> <td> Value </td> <td> Key </td> 
    for(var key in storedVars) { 
     if(storedVars.hasOwnProperty(key)) { 
      var hiddenField = win.document.createElement("input"); 
      hiddenField.setAttribute("type", "hidden"); 
      hiddenField.setAttribute("name", key); 
      hiddenField.setAttribute("value", storedVars[ key ]); 

      form.appendChild(hiddenField); 
     } 
    } 

    win.document.body.appendChild(form); 
    form.submit(); 
};