gpt4 book ai didi

javascript - 在 Selenium IDE 中执行 HTTP POST

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:49:24 24 4
gpt4 key购买 nike

我想使用带有 XML 负载的 Selenium IDE 对服务器执行单个 HTTPS POST。我正在与之交互的服务不支持 HTTPS GET,否则我会那样做。 (执行 HTTPS GET 非常简单,因为整个 URL 进入 Selenium open 命令。)我知道还有其他方法可以执行 HTTP POST,例如使用 curl,但我的 Web 测试目前是在Selenium IDE,我不想担心使用两三种不同的工具来进行测试。

我调查了 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();

当我运行示例代码的稍微修改后的版本时,我在 Selenium IDE 日志中收到一条消息,指出“document.body 未定义”。我尝试删除所有对 document.body 的引用,希望一个简单的表单对象本身就足够了。事实并非如此。我得到“form.submit 不是函数”。也许有一些 Javascript mojo 可以工作。

我没有在 Google 或 StackOverflow 上找到任何关于有人试图在 Selenium IDE 中执行 HTTP POST 的引用资料。如果可以进行 POST,我愿意为 Selenium 编写一个扩展。

最佳答案

这是一个旧线程,但这可能会帮助其他人(比如上周的我!)寻找一种从 Selenium IDE 发送 POST 的方法。

我已经设法找到了一个可行的解决方案 - 我只发送参数和一个空主体,因为我不需要发送数据有效负载,但这也许会对这里的人有所帮助。

在 IDE 中,我将基本 url 保存为 Selenium 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 扩展函数,将基本 url 作为参数传递:

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

对于 IDE 中的函数调用(命令),我无法在 Target 字段中使用多个参数,因此该函数显式访问“params”storedVars 变量。

这是我添加到 user_extentions.js 文件的函数,然后我在 Selenium 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

关于javascript - 在 Selenium IDE 中执行 HTTP POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11995383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com