当前位置: 首页 > 面试题库 >

在Selenium中发出POST请求而不填写表格?

唐照
2023-03-14
问题内容

我有一个应用程序A,应该处理用POST方法提交的表单。发起请求的实际表单位于完全独立的应用程序B中。我正在使用Selenium测试应用程序A,并且我想编写一个测试用例以进行表单提交处理。

这该怎么做?可以完全在Selenium中完成吗?应用程序A没有可以启动此请求的表单。

请注意,该请求必须使用POST,否则我可以只使用WebDriver.get(url)方法。


问题答案:

使用selenium,您可以执行任意Javascript,包括以编程方式提交表单。

使用Selenium Java最简单的JS执行:

if (driver instanceof JavascriptExecutor) {
    System.out.println(((JavascriptExecutor) driver).executeScript("prompt('enter text...');"));
}

使用Javascript,您可以创建POST请求,设置所需的参数和HTTP标头,然后提交。

var xhr = new XMLHttpRequest();
// false as 3rd argument will forces synchronous processing
xhr.open('POST', 'http://httpbin.org/post', false);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send('login=test&password=test');
alert(xhr.response);

如果您需要传递给硒响应文本,则可以代替alert(this.responseText)使用return this.responseTextreturn this.response将execute_script(python)(针对Java的executeScript())的结果分配给变量。

这是python的完整示例:

from selenium import webdriver

driver = webdriver.Chrome()

js = '''var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://httpbin.org/post', false);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

xhr.send('login=test&password=test');
return xhr.response;'''

result = driver.execute_script(js);

result如果js代码是同步的,它将包含JavaScript的html" target="_blank">返回值。设置false为第三个参数以xhr.open(..)强制请求同步。将第3个arg设置为true或忽略它会使请求异步,这将需要xhr.onload = function({alert(this.responseText);};处理结果。

注意:如果需要将字符串参数传递给javascript,请确保始终使用来转义它们json.dumps(myString),否则当字符串包含单引号或双引号或其他棘手的字符时,js将会中断。



 类似资料:
  • 问题内容: 我正在尝试发出POST请求以检索有关一本书的信息。这是返回HTTP代码的代码:302,已移动 当我从浏览器尝试时,可以从以下页面进行操作:http : //www.bkstr.com/webapp/wcs/stores/servlet/BuybackMaterialsView?langId=-1&catalogId=10001&storeId=10051&schoolStoreId=1

  • 问题内容: 如何在node.js中使用数据发出出站HTTP POST请求? 问题答案: 这是一个使用node.js向Google Compiler API发出POST请求的示例: 我已经更新了代码,以显示如何从文件而不是硬编码的字符串发布数据。它使用async 命令来实现此目的,并在成功读取后发布实际代码。如果有错误,则抛出该错误,如果没有数据,则该过程以负值退出以指示失败。

  • 问题内容: 我正在使用HttpClient发出发布请求。我回到405方法不被允许。在提琴手中捕获轨迹时,它作为GET而不是POST发出! 我知道异步/等待问题。这是显示问题的简化示例。 是否存在某种可能会影响此的web.config或machine.config设置?其他请求(通过RestSharp发送)正确发送了帖子 这是提琴手捕获的东西。在提琴手中运行跟踪也会返回405(如预期)。手动将其切换

  • 问题内容: 在Flask中,需要从服务器端发出POST请求。 假设我们有: 我没有在Flask文档中找到任何特定的东西。有人说是问题所在,但我未能将Flask和。真的有可能吗? 提前致谢! 问题答案: 是的,要发出POST请求,您可以使用,请参阅文档。 但是,我建议改用requests模块。 编辑 : 我建议您重构代码以提取常用功能:

  • 我正在学习春靴和反应现在。 book.js bookresourceimp.java

  • 我试图使用回调API中的数据,该API以以下格式发送POST请求: 然而,我的API目前只在这样发送时工作: views.py: post数据中只会有一个对象,所以我正在寻找一个简单的工作,而不必重写我的序列化程序来解释一个post请求中的多个对象。