Cypress find () сохраняет состояние? - PullRequest
0 голосов
/ 05 августа 2020

Я использую последнюю версию Cypress (4.12.0). У меня проблемы с использованием двух команд find() подряд. Мне кажется, что Cypress каким-то образом сохраняет состояние, которое изменяется путем выполнения 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 получает правильные данные, которые я вижу в пользовательском интерфейсе Cypress. Но строка 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]}`);

Сохраняет ли сам Cypress состояние на find()? И если да, как я могу вернуть его обратно, чтобы каждая из моих находок в контейнере начиналась в одном месте?

1 Ответ

1 голос
/ 06 августа 2020

Это потому, что команды cypress выполняются асинхронно :

Возвращаемые значения

Вы не можете назначать или работать с возвращаемыми значениями любой команды Cypress. Команды ставятся в очередь и выполняются асинхронно.

Для меня я часто использую псевдоним для повторного использования команд:

cy.get('div .some-class').as('fancyDiv');
cy.get('@fancyDiv').find('something').contains('bar');
cy.get('@fancyDiv').find('something').contains('foo');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...