- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我是一名优秀的程序员,十分优秀!