【问题标题】:Cypress: Accessing the last item in the list赛普拉斯:访问列表中的最后一项
【发布时间】:2021-10-10 15:46:52
【问题描述】:

我在一个简单的 html 文件中有一个列表,其中只有收到的电子邮件,我想从特定的电子邮件地址访问列表中的最后一封电子邮件。我尝试使用 last(),但它没有用,它只是没有引导我到最后一项,而是到列表中的第一个项目之一

cy.contains('test@test5.com').last().click() 

列表中的一项具有以下代码:

<br>
<a href="/Emails/2020-12-03%2016_40_54%20-%20test@test5.com.html">2020-12-03 16_40_54 - test@test5.com.html</a>

【问题讨论】:

  • 电子邮件test@test5.com 在列表中是唯一的吗?
  • "我用 last() 试过了,但是没用""没用"是什么意思?分享错误信息。很难猜。
  • 不,它不是唯一的。它在页面上多次出现。
  • 我没有错误,它只是没有引导我到最后一项,而是到列表中的第一项

标签: javascript automation cypress


【解决方案1】:

这是 Cypress 的一个问题,有些命令“产生”许多元素,而有些命令只“产生”一个元素。

您可以查看命令的contains() - Yields 部分,该部分只给您一个元素,即列表中的.first()

.contains() 产生它找到的 新 DOM 元素

IMO 文档应该更加明确。您可以通过经验学习掌握它,但可能会浪费大量时间尝试使用看似合法的命令进行破解。

尝试.get().filter(),使用jQuery 伪选择器:contains() 返回所有匹配的元素

cy.get('a')
  .filter(':contains(test@test5.com)')  
  .last()

或者在.get()内添加伪选择器:contains()

cy.get('a:contains(test@test5.com)')
  .last()

【讨论】:

  • 我有这个错误:“语法错误,无法识别的表达式”
  • 您可能缺少选择器':contains(test@test5.com)' 的一部分。实际上我一开始就知道了,但遗漏了最后一个括号)
【解决方案2】:

假设test@test5.com 是唯一的并且在您的网页中出现一次,您可以这样写:

cy.contains('a', 'test@test5.com.html').click()

【讨论】:

  • 不,它不是唯一的。它在页面上出现了好几次,我必须从底部列出的最后一个中选择一个
  • 能否将整个列表 html 添加到问题中。
猜你喜欢
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
相关资源
最近更新 更多