python - 如何在 Selenium python 中提交表单后检测 POST?

标签 python django forms selenium

我正在使用 Selenium(python 绑定(bind),与 Django)进行自动化 Web 应用程序测试。我的页面有一个带有按钮的表单,该按钮有一个 .click() 处理程序来捕获点击(即表单不会立即提交)。处理程序运行 function2(),当 function2() 完成时,它会提交表单。

在我对 Selenium 的测试中,我填写了表格,然后单击“提交”按钮。我想验证表单最终是否已提交(产生 POST 请求)。表单 POST,然后使用 GET 重定向到相同的 url,因此我无法检查新的 url。我想我需要检查 POST 请求是否发生。如何检查表单提交是否成功?

或者,我可以在数据库级别进行检查以查看是否创建了一些新对象,但这会导致糟糕的“单元”测试。

最佳答案

好的,所以您的测试套件需要检查用户不可见的内容。以下是我想到的一些方法。

让你的服务器记录数据

使用一个服务器来记录向其发出的 POST 请求,并记录此类 POST,以便测试代码可以检查 POST 是否已执行。

这是我在我的一个应用程序中使用的方法。我基于 Node.js 的 Express 框架创建了一个非常小且愚蠢的服务器。它只记录 POST 请求。

小而愚蠢的服务器可能无法在所有情况下工作。如果我必须用我实际的 Django 代码库来做这件事,我会这样做。我已经在我的全局项目设置中使用了一个名为 TESTING 的变量,当代码由测试套件运行时,这是真的。当 TESTING 为真时,我会这样做,以便应该接收 POST 的 View 记录它们在我的测试框架可以检查的地方收到的内容。 (它可以是一个文件。)

让您的客户记录数据

修改您的 JavaScript 代码以记录它发出的 POST。然后,您可以使用 driver.execute_script 检索此信息,并检查如果您的代码运行正确,您希望找到什么。通常,我会这样做,以便仅在测试代码时才进行这种记录。生产中不会发生此类记录。

代理记录数据

使由 Selenium 启动的浏览器通过代理连接,该代理可以记录交互并将它们保存到文件中。然后测试套件可以检查记录的内容。这样做的好处是不需要对应用程序的代码库进行任何更改。如果您决定采用这种方式,我可以推荐的唯一工具是 mitmproxy .我已经成功地使用它来记录与 Zotero 服务器的交互,以避免每次运行我的测试套件时都碰到它。

关于python - 如何在 Selenium python 中提交表单后检测 POST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23397090/

相关文章:

python - 通过沿对角线复制给定数组在 numpy 中创建矩阵的有效方法

python - 修补 Python 子类中的所有方法

python - 如何在 django-cms 模板中使用调试变量?

android - Android 应用程序可以从解析网页中获取 CSRF token 吗?

Python 继承和关键字参数

Python 打印不适用于编解码器

Django Crispy Forms - 布局 Div

javascript - 如何检测整个表单是否失焦?

jquery - 自动将一个表单字段复制到另一个表单字段,但最多复制到某个字符

python - "Lambda function for the route not found"使用SAM在本地运行Golang函数出错?