在 Cypress 中提交 POST 表单并导航到结果页面

AMe*_*ead 7 response xmlhttprequest request cypress

当我使用 cy.request() 命令时,Cypress 加载响应正文时遇到问题。

在我们的应用程序中,当填写并提交表单时,它会发布,并且响应正文是新页面。

当我尝试在赛普拉斯中执行时,是以编程方式填写表格。因此,我设置了一个 cy.request() 命令,其正文填充了表单字段,这与手动填写时发生的情况相同。当我运行该命令时,我可以查看控制台并看到返回了正确的正文,但新文档页面未加载。所以我只能坐在旧的空表单页面上。

cy.request({
        url: "company-webpage-form-url.com",
        method: "POST",
        form: true,
        body: {
            first_name: "first_name",
            last_name: "last_name",
            company_name: "company_name",
            address1: "address1",
            address2: "address2",
            city: "city",
            state: "NY",
            zip: "13903",
            country: "US",
            phone_number: "607-555-5555",
            phone_ext: "555",
            fax_number: "fax_number",
            fax_ext: "fax_ext",
            email: "developer@company.com",
            email_2: "developer@company.com",
            user_data: "Continue"
        }
    });
Run Code Online (Sandbox Code Playgroud)

所有数据都是正确的,我得到了正确的响应正文,但我只能在控制台中看到它。我不知道如何加载它,就像我提交表单时一样。我现在得到的只是 200 响应,测试结束。

我尝试立即访问下一个 URL,但收到一条错误消息,指出该 URL 的页面不存在。我尝试在 POST 之后单击提交按钮,但这只会导致提交空表单,从而导致验证错误。

我不知道如何让 cypress 加载响应正文,该正文采用文档的形式(新页面)。有人有什么建议吗?

编辑:我应该补充一点 - 我希望通过 POST 填写表格的原因是因为我需要填写该表格来测试某些选项是否有效。我有一个测试可以确保表单字段和提交按要求工作,但对于需要在此表单另一侧检查的 30 多个选项,我想遵循赛普拉斯的最佳实践,即不要每次都手动填写表单单次(他们展示了在网站上登录的示例)。

Zac*_*ist 8

如果您想模拟表单 POST 导航到新页面,您可以使用cy.visit()它来执行此操作!只需将您的更改request为即可visit,它应该可以工作:

cy.visit({
        url: "company-webpage-form-url.com",
        method: "POST",
        body: {
            first_name: "first_name",
            last_name: "last_name",
            company_name: "company_name",
            address1: "address1",
            address2: "address2",
            city: "city",
            state: "NY",
            zip: "13903",
            country: "US",
            phone_number: "607-555-5555",
            phone_ext: "555",
            fax_number: "fax_number",
            fax_ext: "fax_ext",
            email: "developer@company.com",
            email_2: "developer@company.com",
            user_data: "Continue"
        }
    });
Run Code Online (Sandbox Code Playgroud)

  • 我没有意识到您可以像这样构造 cy.visit() 命令,但这正是我想要做的。谢谢你!我对开发还是有点陌生​​,所以阐明我正在寻找的东西有点困难,所以感谢您提供这个解决方案。说到点上了。 (4认同)
  • 这很酷,我不知道您可以做到这一点,但请注意,这将您的 E2E 测试与底层数据结构结合起来。这可能不是一个好主意,但是 YMMV。 (2认同)