赛普拉斯的find()保持状态?

时间:2020-08-05 16:47:42

标签: cypress

我正在使用赛普拉斯(4.12.0)的最新版本。我在连续使用两个find()命令时遇到问题。在我看来,赛普拉斯正在某种程度上保持状态,通过执行find()可以改变状态。

这是我的赛普拉斯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行获取了正确的数据,我可以在Cypress 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()上保持状态?如果是这样,如何将其重置,以便在容器上找到的每个内容都在同一位置开始?

1 个答案:

答案 0 :(得分: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');