问题标签 [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 投票
13 回答
13396 浏览

javascript - 有没有办法断言在赛普拉斯中没有调用路由?

我试图断言赛普拉斯中没有调用路由。我彻底查看了文档,但一无所获。

我正在尝试做这样的事情:

我目前正在通过断言未显示成功的请求 toast 消息来解决此问题,但这是一个脆弱的解决方案。

有任何想法吗?

0 投票
4 回答
15504 浏览

javascript - 设置 Cypress.io 以通过代理访问页面

是否可以设置 cypress.io 通过代理访问页面?

我有一个代理,我需要通过它来测试我的应用程序。无论如何配置 cypress.io 以遵守标准 HTTP_PROXY 环境变量..还是需要其他一些设置?

0 投票
2 回答
226 浏览

node.js - 应该使用哪个工具来记录用户操作/输入,以便稍后与 cypress 一起使用

我应该使用哪个工具来记录用户操作/输入,以便以后在 cypress 上使用它们,或者 cypress 有这种工具吗?

0 投票
6 回答
11670 浏览

javascript - 通过请求使用 Cypress.io 上传文件

鉴于这种简单的形式

由于 cypress.io 不支持本机事件(无法选择文件),我必须使用后请求。

cypress.io 中的请求结构看起来像

我想知道如何发送一个简单的 *.txt

任何建议表示赞赏!

0 投票
1 回答
5479 浏览

testing - Cypress XHR 存根忽略使用 fetch 执行的 ajax 请求

重要信息

这里最初的问题并不是直接关于 Cypress 中缺乏对fetch api的支持,但这就是我最初在此处发布的问题的原因。我已经编辑了问题的标题并在此处添加了此序言。本段下方是问题的原始内容:

原始问题

Cypress 文档中充满了示例,您可以在其中为特定 Web 请求设置别名,然后您可以指示 cypress 等待它。例如,这个

问题是我试图在我的应用程序测试中使用这种精确的技术,但我需要等待一个不是针对托管应用程序的同一服务器发出的请求。因此,我假设我可以输入后端端点的完整 URL,这样cy.route就不会在前面添加baseUrl,这是托管前端应用程序的主机。

但是,当我运行测试时,我得到了超时,因为 cypress 从未意识到请求已被执行,它会继续等待它直到它超时。结果是,当我在运行 cypress 的浏览器的左侧边栏中检查测试脚本时,路由具有我设置的显式主机,不仅是路径,而且测试仍然在等待这个请求发生,它说永远不会发生。当我检查浏览器开发工具的网络选项卡时,我可以看到请求发生了。而且我可以在我的后端应用程序运行的终端中看到,它确实被登录请求击中。此外,我可以在赛普拉斯浏览器会话中运行的前端应用程序中看到,用户成功登录,并且应用程序在请求后被重定向到预期页面。

问题是:我可以让赛普拉斯知道跨域请求,以便它可以等待它们吗?如果是这样,怎么做?

更新:

赛普拉斯也没有捕获存根路由,我不能等待它们,也不能阻止它们发生,因为它是存根请求所期望的。

0 投票
6 回答
27853 浏览

javascript - 访问其父级隐藏的元素 - cypress.io

问题如标题所示,即访问其父级隐藏的元素。问题在于,根据cypress.io 文档

在以下情况下,元素被视为隐藏

  • 它的宽度或高度为 0。
  • 它的 CSS 属性(或祖先)是可见性:隐藏。
  • 它的 CSS 属性(或祖先)是 display: none。
  • 它的 CSS 属性是 position:fixed 并且它在屏幕外或被掩盖。

但是我正在使用的代码要求我单击其父级隐藏的元素,而元素本身是可见的

因此,每次我尝试单击该元素时,都会引发错误读数:

CypressError:重试超时:预期“< mdc-select-item#mdc-select-item-4.mdc-list-item>”为“可见”

此元素“< mdc-select-item#mdc-select-item-4.mdc-list-item>”不可见,因为它的父元素“< mdc-select-menu.mdc-simple-menu.mdc-select__menu>”有 CSS 属性:'display: none'

在此处输入图像描述

我正在使用的元素是 a dropdown item,它是用pug. 该元素是在angular-mdc-web中定义的组件,它使用mdc-select下拉菜单mdc-select-item及其元素(项目),这是我必须访问的。

类似结构的示例代码:

在上面,ITEM1是我必须访问的元素。我这样做cypress.io如下:

已尝试{force:true}强制单击该项目,但没有运气。已尝试使用{enter}父项上的按键选择项目mdc-select,但再次失败,因为它抛出:

CypressError:cy.type() 只能在 textarea 或 :text 上调用。您的主题是:< mdc-select-label class="mdc-select__selected-text">选择 ...</mdc-select-label>

也尝试使用selectcommand,但它不可能,因为 Cypress 引擎无法将元素识别为select元素(因为它不是,内部工作方式不同)。它抛出:

CypressError:cy.select() 只能在 . 您的主题是:< mdc-select-label class="mdc-select__selected-text">选择 ...</mdc-select-label>

问题在于,在打开下拉项目时,作为父级的 具有一些内部计算的mdc-select-menu属性mdc-select-itemdisplay:none

在此处输入图像描述

此属性被覆盖为display:flex,但这无济于事。

在此处输入图像描述

都没有想法。这适用于Selenium,但不适用于cypress.io。除了转移到其他框架或更改 UI 代码之外,任何线索可能是针对这种情况的黑客攻击?

0 投票
2 回答
4184 浏览

node.js - 使用 cypress.io 模拟 SSR 反应应用程序 e2e 测试的服务器

我正在使用服务器端渲染 (SSR) 构建单页 Web 应用程序 (SPA)。

我们有一个节点后端 API,它在 SSR 期间从节点服务器调用,在初始渲染后从浏览器调用。

我想编写配置 API 响应的 e2e 测试(例如 with nock)并同时使用浏览器调用和 SSR 服务器调用。一些伪代码:

目前赛普拉斯允许我在浏览器上模拟获取,但不能在服务器上模拟。

有什么可以实现的吗?最好使用节点库。

0 投票
5 回答
17770 浏览

javascript - 调用时无法识别赛普拉斯自定义命令

我在我的cypress/support/commands.js文件中创建了以下自定义命令。

在将登录功能移至此自定义命令之前,我已通过测试并登录工作。我在我的规范中使用 调用它cy.login(testuser, testpwd),但我收到以下错误消息TypeError: cy.login is not a function文档说/cypress/support/commands.js在评估任何测试文件之前已加载,因此我假设只需在其中放置自定义命令即可使该命令可用。我正在通过本地(GUI)测试运行程序运行测试。

0 投票
7 回答
63515 浏览

javascript - 访问新窗口 - cypress.io

问题就这么简单。在赛普拉斯中,我如何访问运行测试时打开的新窗口。

重建步骤:

  1. 运行测试。一些操作后,会弹出新窗口(网址本质上是动态的)。
  2. 填写新窗口中的字段,然后单击几个按钮。
  3. 在新窗口中完成所需操作后,关闭新窗口并返回主窗口。
  4. 使用主窗口继续执行。

兴趣点:重点应该是

我读过一些与使用iframe和有关的东西confirmation box,但这里没有。涉及访问一个全新的窗口。类似于Window HandlersSelenium 中的东西。不幸的是找不到任何与之相关的东西。

0 投票
6 回答
49497 浏览

automated-tests - 如何使用赛普拉斯检查可能不存在的元素

我正在编写赛普拉斯测试以登录网站。有usernamepassword字段和一个Submit按钮。大多数登录都很简单,但有时会首先出现一个警告对话框,必须将其关闭。

我试过这个:

哪个工作正常,除了如果没有出现警告则测试失败:

然后我尝试了这个,它失败了,因为警告出现的速度不够快,所以Cypress.$没有找到任何东西:

检查元素是否存在的正确方法是什么?如果找不到元素,我需要类似的东西cy.get()不会抱怨。