Я пытаюсь выполнить тестирование с использованием веб-драйвера селеном, и часть этого ждет, пока мой объект будет определен на странице. ПРИМЕЧАНИЕ : в DOM нет ничего, что появилось бы, когда мой объект доступен, и это не вариант, чтобы изменить это, поэтому, пожалуйста, не предлагайте это. Мне нужно проверить с помощью консоли.
Обычно после завершения загрузки страницы приходится ждать от 0 до 5 секунд, чтобы мой объект существовал, поэтому идея состоит в том, чтобы l oop window.myObject !== undefined
пока он не пройдет, в этот момент я уверен, что мой объект существует, и я могу вызвать myObject.myFunctionCall()
. Если я не выполню это ожидание и просто позвоню myObject.myFunctionCall()
после завершения загрузки страницы, есть большая вероятность, что я получу ошибку myObject is not defined
.
Когда я выполню эти шаги из Консоль в моем браузере получается отлично:
let ret = false;
while (ret === false) {
ret = window.myObject !== undefined;
console.log(ret);
}
//now here ret has the value true. myObject is defined and I can continue with the test
myObject.myFunctionCall()
...
Но затем я пытаюсь сделать это с драйвером селена (this.driver
) со следующим кодом:
let ret = null;
while (ret === null) {
let val = this.driver.executeScript("window.myObject !== undefined;"); //returns promise
console.log(val);
ret = await val; //await promise resolution and assign value to ret
console.log(val);
console.log(ret);
//for some reason, ret is always null
}
, который предоставляет мне следующую распечатку, которая бесконечно повторяется до тех пор, пока не произойдет сбой теста Error: function timed out, ensure the promise resolves within 30000 milliseconds
:
Promise { <pending> }
Promise { null }
null
Promise { <pending> }
Promise { null }
null
Promise { <pending> }
Promise { null }
null
...
Чего мне здесь не хватает? Есть ли лучший способ определить, определен ли мой объект с помощью веб-драйвера selenium?