У меня есть тест TestCafe, который проверяет, существует ли родитель Selector, и почему-то он терпит неудачу каждый раз. Вот соответствующий код:
logWithTimestamp("Starts..."); // Prints "[2020-12-23T12:02:04.476Z] Starts..."
let state = await Selector('#indberetningsflow-knap-trin-stamdata', {timeout: 30000}).parent().exists;
logWithTimestamp(`State: ${state}`); // Prints "[2020-12-23T12:02:04.618Z] State: false"
await t.expect(state).ok() // Sometimes fails
Как видите, он завершается с ошибкой менее чем через 200 мс, несмотря на то, что тайм-аут явно установлен на 30000. Теперь у меня есть идея, что, возможно, произойдет сбой, когда селектор найден, но родитель еще не загружен. Если это так, то почему TestCafe не ждет появления родителя и что с этим делать?
РЕДАКТИРОВАТЬ
Я провел еще один эксперимент, и либо с TestCafe что-то не так, либо я не понял чего-то фундаментального, но как это может выйти из строя всего через 30 мс?
logMedTidsstempel("Starts..."); // Prints "[2020-12-23T12:42:15.041Z] Starts..."
let state = await Selector('#indberetningsflow-knap-trin-stamdata', {timeout: 30000}).exists;
logMedTidsstempel("Found child."); // Prints "[2020-12-23T12:42:15.072Z] Found child."
await t.expect(state).ok(); // <- fails :(
Чтобы ваш пример кода заработал, сделайте следующее:
await
из Selector
timeout
из Selector
и передайте его методу утверждения....
let state = Selector('#indberetningsflow-knap-trin-stamdata').exists;
await t.expect(state).ok({timeout: 30000});
...
Вы также можете обратиться к следующему разделу справки: https://devexpress.github.io/testcafe/documentation/guides/basic-guides/select-page-elements.html#selector-timeout
Свойство exists , а метод hasClass возвращает Promise. Когда вы используете их с оператором &&
, возвращаемое обещание будет приведено к логическому значению — true
, поэтому утверждение await t.expect(s.exists && s.hasClass("active")).ok();
всегда будет проходить.
Следующий код должен работать: let s = Selector("abc"); await t.expect(s.exists).ok().expect(s.hasClass("active")).ok();
Вау я этого не знал! Спасибо :)
Спасибо, пропустил эту часть! Могу ли я сделать что-то подобное
let s = Selector("abc");
, а потомawait t.expect(s.exists && s.hasClass("active")).ok();
? Будет ли он ждать, пока иexists
, иhasClass()
станут правдой?