【问题标题】:Cypress find() keeping state?赛普拉斯 find() 保持状态?
【发布时间】:2020-08-06 16:30:41
【问题描述】:

我使用的是最新版本的赛普拉斯 (4.12.0)。我在连续使用两个find() 命令时遇到问题。在我看来,赛普拉斯以某种方式保持状态,通过find() 进行更改。

这是我的 Cypress JS 代码,用于查找处于同一级别的三个字段的内容:

1. const shipmentContainer: any = cy.get(`div .shipment-container:contains("${SHIPMENT_LABEL} ${shipmentIndex + 1}")`);
2. shipmentContainer.find('div div').contains(`${TRACKING_NUMBER_LABEL} ${shipment[TRACKING_NUMBER_FIELD]}`);
3. shipmentContainer.find('div div').contains(`${SHIPPING_STATUS_LABEL} ${shipment[SHIPPING_STATUS_FIELD]}`);
4. shipmentContainer.find('div div').contains(`${SHIP_METHOD_LABEL} ${shipment[SHIP_METHOD_FIELD]}`);

我不包括 HTML,因为我认为数据的细节并不重要。

这就是正在发生的事情。第 1 行正确设置容器。第 2 行得到了正确的数据,我可以在赛普拉斯 UI 中看到这些数据。但是第 3 行失败了,因为它似乎是从与容器设置的位置完全不同的位置开始的。如果我注释掉第 2 行,则第 3 行有效,但第 4 行无效。所以只有第一个 find() 有效。

这让我相信容器必须保持状态。所以我尝试了以下方法,但它根本没有任何区别,这揭穿了我的假设。

const shipmentContainer: any = cy.get(`div .shipment-container:contains("${SHIPMENT_LABEL} ${shipmentIndex + 1}")`);
_.cloneDeep(shipmentContainer).find('div div').contains(`${TRACKING_NUMBER_LABEL} ${shipment[TRACKING_NUMBER_FIELD]}`);
_.cloneDeep(shipmentContainer).find('div div').contains(`${SHIPPING_STATUS_LABEL} ${shipment[SHIPPING_STATUS_FIELD]}`);
_.cloneDeep(shipmentContainer).find('div div').contains(`${SHIP_METHOD_LABEL} ${shipment[SHIP_METHOD_FIELD]}`);

赛普拉斯本身是否在find() 上保持状态?如果是这样,我该如何重新设置它,以便容器上的每个发现都从同一位置开始?

【问题讨论】:

  • 我能够使用 Cypress 的 within() 函数来完成这项工作,但我仍然很好奇为什么我会看到上述行为。

标签: cypress


【解决方案1】:

那是因为 cypress 命令正在运行asynchronously

返回值

您不能分配或使用任何赛普拉斯命令的返回值。命令被排队并异步运行。

对我来说,我经常使用alias 来重用命令:

cy.get('div .some-class').as('fancyDiv');
cy.get('@fancyDiv').find('something').contains('bar');
cy.get('@fancyDiv').find('something').contains('foo');

【讨论】:

  • 谢谢@sam-cho,现在一切都说得通了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 2021-12-21
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多