我正在尝试使用 selenium Web 驱动程序执行测试,其中一部分是等待在页面上定义我的对象。 注意:当我的对象可用时,DOM 中不会出现任何内容,并且无法更改它,因此请不要建议这样做。我需要使用控制台进行检查。
通常在页面加载完成后,我必须等待 0-5 秒之间的任何时间让我的对象存在,所以想法是循环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()
...
但后来我尝试使用 selenium 驱动程序 ( 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 web 驱动程序定义的?