问题标签 [cypress]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
30932 浏览

javascript - Cypress:设置属性值

我刚刚开始探索赛普拉斯并遇到了这样一个问题:是否可以在 Selenium 的帮助下选择一个具体的属性并改变它的值JavascriptExecutor?例如,让我们来看看这段简单的代码

是否可以获取测试属性并分配我自己的值?

0 投票
1 回答
2799 浏览

javascript - 赛普拉斯存根似乎会产生来自实际服务器的响应

在现有项目中尝试赛普拉斯时,我遇到了路由响应的问题。此文档文章中解释了该概念:https ://docs.cypress.io/api/commands/route.html#Without-Stubbing 。

这是一个最小的非工作示例。我正在尝试获取一个空对象作为响应主体:

存根路由清楚地显示在 GUI 中:

显示在赛普拉斯 GUI 中注册的路由的图片

但响应是 404:

服务器以 404 响应

...具有以下主体:

我认为 404 响应是由我的实际服务器而不是 cy.server() 发送的。实际的服务器正在运行,我在 my: -filelocalhost:3000中指定了它。baseUrlcypress.json

有没有人见过类似的东西?我是否忽略了代码中的任何明显错误?

PS: 当我将端口号更改为其他未使用的端口时,错误会变为网络错误(这可能是意料之中的)。

0 投票
1 回答
3456 浏览

javascript - 递增和递减一个值在赛普拉斯

我想测试type="number"在赛普拉斯中增加和减少 HTML 输入字段 () 的值。更准确地说,我更喜欢使用箭头键来增加和减少值,但我似乎无法使用最明显的方法让它工作。

作为一个最小的工作示例,我设置了一个 React 组件,其渲染方法如下所示:

在赛普拉斯之外,在此字段中输入内容没有任何问题。使用箭头键和鼠标递增和递减值也是如此。

根据赛普拉斯关于 .type-method 的 API 文档,可以使用所谓的特殊字符序列 {uparrow}{downarrow}作为参数cy.type()来模拟用户的向上和向下按键。我已经尝试在输入标签和文档正文上使用这种方法(以防增量/减量侦听器以某种方式全局定义),如下所示,但它似乎不起作用:

查看 Cypress 的控制台输出(下图),向上箭头键事件(键代码 38)显然是由 Cypress 发送的。不过,与常规按键相比,此按键触发的生命周期事件更少。

记录第一个 .type-call 的关键事件: 记录第一个 .type-call 的关键事件

记录第二个 .type-call 的关键事件: 记录第二个 .type-call 的关键事件

有谁知道我可能做错了什么?或者我还能尝试什么?我对完全避免模拟按键的方法持开放态度,只要它们涉及手动提取、递增和将值插入输入字段。

0 投票
2 回答
5256 浏览

javascript - 覆盖来自 cypress.env.json 的配置变量

TL;博士:

我试图通过使用我的文件来覆盖该baseUrl值,但我似乎无法弄清楚如何。有没有办法做到这一点?cypress.jsoncypress.env.json

背景

在文件中设置环境变量cypress.json,然后在其中覆盖它们就像 piecypress.env.json一样简单。在:cypress.json

...并在cypress.env.json

关于配置变量文档指出

如果您的环境变量与标准配置键匹配,那么environment variable它们不会设置一个,而是覆盖配置值。

但是,如果我尝试baseUrlcypress.json...设置

cypress.env.json...并在...中覆盖它

...然后someVariable被覆盖,但现有baseUrl保持不变(并且 abaseUrl出现在放置在env键处的对象内):

从 cypress.json 和 cypress.env.json 设置 baseUrl 时的 Cypress 配置图片

baseUrl设置并稍后在cypress.json命令行中使用以下命令覆盖它时我没有问题CYPRESS_BASE_URL

然后,原始baseUrl文件被覆盖:

从 cypress.json、cypress.env.json 和命令行设置 baseUrl 时 Cypress 配置的图片

总结一下:我是在文档中遗漏了什么,还是在文档中遗漏了什么?

0 投票
1 回答
2177 浏览

javascript - 是否可以使用谷歌身份验证器为应用程序编写自动化测试

我们正在为我们的应用程序实现 mfa(multi factor auth),我正在尝试编写自动化测试来测试它。我没有看到任何直接的方法来获取用户登录的谷歌身份验证器代码。

有没有人尝试过这样做?

0 投票
3 回答
10216 浏览

cucumber - cypress 和 Cucumber 之类的 BDD 框架之间的区别

有人可以解释一下 cypress.io 作为测试框架和像 Cucumber 这样的 BDD 框架之间的区别吗?据我所知,cypress.io 是一个用于 javascript 的 ui 测试框架。测试是用 javascript 编写的。您可以使用场景将通过应用程序的流程描述为 e2e-test。这类似于行为测试还是这个框架只关注用户界面?

拐角处有人说:Cucumber 或 JBehave 与 cypress 相同。我担心那不是真的。但是可以回答的论点是什么。我不开发网络应用程序,我很难比较这两种解决方案。

我试图澄清我的问题:想象有一个带有后端服务的应用程序和一个使用这些服务的前端(网络应用程序)。后端代表复杂的工作流程,整个应用程序应由 BDD 框架(例如 cucumber)进行测试。主要好处是一种按功能和场景描述的最新文档。它是像黄瓜这样的框架的核心。另一个好处当然是(也许是 e2e)测试本身。为了有价值,它需要 ui-testing 来测试整个工作流程。例如,您可以将硒与黄瓜一起使用来处理此问题。我认为 cypress 是一种类似于 selenium 的测试框架,对吧?只是在很多方面要好得多。但有人可能会说:“哦……柏树和黄瓜一样,因为你也可以定义场景等等……但我相信,当我们考虑 BDD 时,cypress 必须与 cucumber 结合使用,而不是作为新的独立 BDD 工具。从我的角度来看,cypress 是一个很棒的 ui 测试框架,但是......不是更多吗?!我在这里宣布了我的问题,以找到澄清的答案。

0 投票
3 回答
4146 浏览

cypress - Cypress.io - 断言没有对 URL 的 XHR 请求?

使用 cypress.io 进行测试时,是否有一种好方法可以断言没有对给定 URL 发出 XHR 请求?

我想断言单击“保存”按钮时会添加一个新的 foo,但单击“取消”按钮时不会添加新的 foo。

像这样的东西:

我已经尝试使用执行 assert.fail 的 onRequest 回调设置 cy.route,但是当调用 URL 时,测试并没有失败。

现在,我正在捕捉我的(有意的)“未发生请求”错误,如下所示:

...这似乎有效,但肯定感觉不是很“柏树”。

0 投票
2 回答
1793 浏览

javascript - 赛普拉斯与 SystemJS

我正在尝试创建一些基本测试来试用新的赛普拉斯库。在我的测试中,我cy.visit('http://mywebsite.com');正在加载一个使用 SystemJS 的 AngularJS 应用程序。

如果我正确理解赛普拉斯,我不应该做任何其他事情,它会确保在运行其他任何事情之前加载页面。但是,这似乎不起作用,因为页面已加载,但 SystemJS 仍在加载模块。

如何让赛普拉斯等待所有 SystemJS 模块加载,然后再运行任何测试而不使用cy.wait(5000)

编辑

感谢 Dwelle,这是适合我的解决方案。我将初始 System.import 包装在一个 Promise 中,一旦 AngularJS 应用程序启动,该 Promise 就会得到解决。

然后在测试中

0 投票
2 回答
3404 浏览

automated-tests - 如何在 Cypress.io 中创建类似于 Selenium 扩展元素的可重用元素?

在 Selenium 中,可以扩展元素。这使得拥有一组可重用的自定义元素进行测试成为可能。

例如,我们可以getText添加一个方法。

并按如下方式重新使用它:

myElement.getText();

此示例在此处详细说明:http ://www.vcskicks.com/selenium-extensions.php

有没有办法在 Cypress.io 中复制这种行为?还是我们需要查询和调用相同的方法来获取数据?

0 投票
8 回答
20945 浏览

javascript - 如何使用 cypress 将数据输入到 iframe 中的表单输入中?

我一直在尝试使用 cypress.io 测试条带结帐表单

如果有人设法让它工作,请告诉我。我在这里找到了一个关于此事的帖子https://github.com/cypress-io/cypress/issues/136并基于此我想出了:

但问题是条带形式仍然没有注册输入值。这是http://www.giphy.com/gifs/xT0xeEZ8CmCTVMwOU8发生的事情的一个小 gif 。基本上,表单不会注册更改输入触发器。

有谁知道如何使用柏树将数据输入到 iframe 中的表单中?