【问题标题】:Force cypress to type on aria-hidden input强制赛普拉斯在 aria-hidden 输入上键入
【发布时间】:2021-04-25 12:10:25
【问题描述】:

我是 cypress 的新手,但它似乎是一见钟情,尽管我在更新浏览器后已经遇到了一些问题。我正在尝试创建一个测试来编写谷歌文档,显然用户需要登录才能这样做。所以我一直在寻找通过 API 登录,这似乎是不可能的,因为你需要有一个谷歌工作区登录,我没有也无法登录,因为我不在大学,也没有使用我的工作电子邮件。所以我决定“手动”登录谷歌,虽然看起来他们的安全系统非常好,密码输入元素是隐藏的,特别是我可以看到 aria-hidden = true。我尝试了任何方式,例如类型({force:true}),也尝试访问其顶部的div,但没有。有没有人在使用谷歌登录之前遇到过同样的问题?

【问题讨论】:

    标签: cypress hidden


    【解决方案1】:

    我似乎有问题。你能解决吗?

    也许你可以使用 cy.get('element').should('exist') 然后 cy.get('element').should('contain', 'email')

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:

    我认为@Werokk 试图说的是一些网站/框架等从头开始创建组件,如选择、单选按钮组,甚至按钮等,而不是使用或设置 DOM 等效项。然而,出于各种原因,他们仍然在后台使用各自的标准 DOM 输入元素。然而,通过给它们一个 0x0 的尺寸,将自定义组件绝对定位在它们之上,或者简单地使用 CSS 隐藏它们,这些都被隐藏了。 Ant-Design 就是这样一种框架,您可以参考它们的选择或单选按钮组组件来查看上述模式的实例。

    问题在于相关的 aria 属性(角色、aria-label 等)设置在那些隐藏/覆盖的元素上,而不是自定义组件上。尝试在 Ant-Design 组件上手动设置角色,甚至会导致打字稿错误,因为角色属性既不是由 Antd Props 定义的,也不是被传递的。

    因此,将 Cypress 与 testing-library 之类的库结合使用,promotes using aria roles 来查询此类元素(以免我们最终得到一堆脆弱的白盒测试,这些测试会随着底层 DOM 结构的每次更改而中断)惨遭失败因为找到了这些元素,但无法与之交互。

    我正在努力解决同样的问题,但解决方案不是强制赛普拉斯模拟对元素的点击,而是解决上游问题,例如通过让库设置赛普拉斯将查询的元素的 aria 角色和属性并与之互动。这是因为实际用户也不可能与这些元素进行交互,赛普拉斯试图模拟用户手动执行的操作。

    关于上面的 Google 应用程序示例,我怀疑其中涉及到类似的模式 i。 e.登录输入字段是一个自定义组件,但在后台使用实际的标准输入元素。在这种情况下,我会修改赛普拉斯查询以与自定义组件进行交互。如果您可以手动与这些元素进行交互,那么几乎所有这些元素都可以使用 Cypress API 进行交互(显然您可以,否则您将无法登录)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多