gpt4 book ai didi

forms - 在不填写表格的情况下在 Selenium 中发出 POST 请求?

转载 作者:行者123 更新时间:2023-11-28 19:41:25 25 4
gpt4 key购买 nike

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

如何做到这一点?这完全可以在 Selenium 中完成吗?应用程序 A 没有可以发起此请求的表单。

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

最佳答案

使用 selenium,您可以执行任意 Javascript,包括 programmatically submit a form .

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

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

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

// Javascript example of a POST request
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);

In modern bleeding edge browsers you can also use fetch().

如果您需要将响应文本传递给 selenium,请使用 return this.responseTextreturn this.response 而不是 alert(this.responseText) 并将 execute_script 的结果赋给一个变量(或 execute_async_script )(如果使用 python)。对于将是 executeScript() 的 java或 executeAsyncScript()相应地。

这是 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 将包含您的 JavaScript 的返回值,前提是 js 代码是同步的。将 false 设置为 xhr.open(..) 的第三个参数会强制请求同步。将第三个参数设置为 true 或省略它将使请求异步。

❗️ If you are calling asynchronous js code then make sure that instead of execute_script you use execute_async_script or otherwise the call won't return anything!

NOTE: If you need to pass string arguments to the javascript make sure you always escape them using json.dumps(myString) or otherwise your js will break when the string contains single or double quotes or other tricky characters.

关于forms - 在不填写表格的情况下在 Selenium 中发出 POST 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10494417/

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