我的测试需要与在画布中加载的图像进行交互。如何等待在画布中加载图像
但我不知道如何实现加载图像的等待。 如果我希望只有画布测试开始与它交互,而图像仍然加载。
我必须使用driver.sleep(),但这是一个糟糕而不可靠的解决方案。 还有的网页代码与帆布的一部分:
<canvas class='ol-unselectable' width='816' height='400' style='width: 100%; height: 100%;'></canvas>
此外,应用程序是用角。
浏览器中开发人员控制台中的网络选项卡显示在加载图像时是Img请求。
我想,可以编写一些代码来检查加载到浏览器中的图像并通过js执行程序使用它。
但我不知道它是如何做到的。请帮帮我。
UPD。我尝试建立自定义待机中:
exports.isAllImageLoad = function isAllImageLoad(driver) {
return new Condition('image loading', function(driver) {
return driver.executeScript(
'var img = new Image();' +
'img.onload = function() { return true; };' +
'img.onload()'
).then(function(result) {
console.log('image loading: ' + result);
return result;
});
});
};
,并使用它:
return driver.wait(isAllImageLoad(driver), waitTimeOut);
但是控制台显示我的img.onload()
thah结果是null
。
UPD.i尝试使用此代码:
exports.isAllImageLoad = function isAllImageLoad(driver) {
return new Condition('image loading', function(driver) {
return driver.executeScript(
'var image = new Image();' +
'function mainLoop(){' +
'if(image.complete){' +
'return true;' +
'}else{' +
'return false;' +
'}' +
'}' +
'mainLoop();'
).then(function(result) {
console.log('image loading: ' + result);
return result;
});
});
};
但是,同样的回报null
。
感谢您的回复。所有解决方案都建议使用图像url,但事实是图像加载是不同的,具体取决于用户以前的操作。 – Valentina
我尝试建立自定义待机中: 'exports.isAllImageLoad =功能isAllImageLoad(驾驶员){ \t回新的条件( '图像加载',函数(驾驶员){ \t \t回driver.executeScript( \t \t \t“变种IMG =新的图像();” + \t \t \t 'img.onload =函数(){返回true;};' + \t \t \t 'img.onload()' \t \t)。然后(函数(结果){ \t \t \t console.log('image loading:'+ result); \t \t \t返回结果; \t \t}); \t}); };' 并与它一起使用: 'return driver.wait(isAllImageLoad(driver),waitTimeOut);' 但是控制台显示我的结果是'null'。 – Valentina