我有一个应用程序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.responseText
或return 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请求中的多个对象。