Ниже приведено техническое решение, но сначала я хочу объяснить, что я считаю лучшим решением.
Добавление к комментарию @dwelle, кажется, что то, что вы пытаетесь сделать, не самое лучшее. Практика с точки зрения дизайна теста. Тесты должны быть детерминированными и контролировать все соответствующие входные данные, которые могут повлиять на ожидаемый результат.
Более конкретно, является ли этот текст тем, что должен видеть и использовать реальный пользователь, или только тем, для чего разработчики ставятцели отладки или тестирования? Если это для реального пользователя, то что определяет, должен ли он появиться или нет? (Является ли это чисто случайным ?, Если это так, см. Ниже), если это для целей тестирования или отладки, поговорите с разработчиками и придумайте лучшее решение, в котором вы можете контролировать, появляется ли этот текст напрямую или нет. Если это что-то, что пользователь должен видеть, и это не случайно, то подумайте, какие условия должны быть выполнены для того, чтобы текст появился, и спроектируйте тест таким образом, чтобы это условие выполнялось, контролируя фактические необходимые предварительные условия илииспользуя насмешки для имитации этого условия. Опять же, я рекомендую вам проконсультироваться с разработчиками, чтобы помочь вам найти лучший подход.
В случае, если это «чисто» случайный случай, попросите разработчиков предоставить способ указать seed генератора случайных чисел, и тогда вы тоже сможете им управлять.
Как и обещали, если вам все еще нужно техническое решение для конкретной проблемы, без изменения дизайна теста, тогда есть хитростьэто использовать рекурсию. Как то так:
function getEnvironment() {
function getEnvironmentInternal(retires) {
if (retires == 0)
throw "text didn't appear after the specified retires";
return ele.text().then(text => {
if(text)
return cy.wrap(text);
cy.wait(10000);
cy.reload();
return getEnvironmentInternal(retires-1);
});
)};
return getEnvironmentInternal(10);
}
// usage:
getEnvironment().then(text => {
// do something with text...
}