Насколько я понимаю, вы хотите проверить, что элемент существует и имеет некоторый внутренний текст через некоторый период времени. Если время прошло, но элемент не существует или не имеет некоторого текста, вы хотите, чтобы тест не прошел.
Ваш подход в целом правильный, но я думаю, что вам не нужен параметр visibilityCheck
здесь.
Поскольку я не знаю, как именно работает ваш проект, я создал образец. Позвольте мне показать это и объяснить, как работает таймаут в TestCafe.
Страница:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
setTimeout(() => {
var div = document.createElement('div');
document.body.appendChild(div);
setTimeout(() => {
div.innerHTML = 'test';
}, 6000);
}, 6000);
</script>
</body>
</html>
Код теста:
import { Selector } from 'testcafe';
fixture `fixture`
.page `../pages/index.html`;
const selector = Selector('div', { timeout: 4000 });
test(`Recreate invisible element and click`, async t => {
await t.expect(selector.innerText).eql('test', 'error message', { timeout: 13000 });
});
Здесь у меня есть div
элемент, который появляется только через 6 с. В течение этого периода утверждение проверяет, существует ли элемент. Этот код выполняется: Selector('div', { timeout: 4000 });
. Так как 4 с меньше 6 с, тест не пройден, поскольку он не может найти элемент в течение тайм-аута.
Однако, если я изменю тайм-аут на 7 с, Selector('div', { timeout: 7000});
TestCafe найдет div и начнет ждать, пока div не получитправильный внутренний текст.
Время ожидания подтверждения составляет 13 с. 13s больше, чем 6s (время, необходимое для появления элемента) + 6s (время, необходимое для того, чтобы элемент имел правильный текст), поэтому утверждение будет успешным. Однако, если я изменю тайм-аут подтверждения с 13 на 11, он потерпит неудачу.