我打算使用以下代码来测试网页上的图片是否正确加载。任何人都可以解释一下这个 javascript 代码究竟是如何验证图片是否已加载?
ArrayList<WebElement> imgElements = driver.findElements(By.xpath("//*[contains(@src, '.gif')] | //*[contains(@src, '.png')]");
for (WebElement element : imgElements){
boolean imageLoaded = (boolean) ((JavascriptExecutor) driver).executeScript("return arguments[0].complete && "+ "typeof arguments[0].naturalWidth != \"undefined\" && "+"arguments[0].naturalWidth > 0", element);
if (!imageLoaded)
{
System.out.println("Found broken image: "element.getAttribute("src"))
}
}
答案 0 :(得分:2)
好吧,据我所知,arguments[0]
引用HTMLImageElement
。该对象具有complete
属性,指示图像是否加载。它还具有naturalHeight
和naturalWidth
属性,这些属性一起指定加载后图像的内在大小。如果这些属性不可用,则返回0。
使用我们刚刚学到的东西,我们可以很容易地看到以下代码将如何确定图像是否已加载:
return arguments[0].complete
&& typeof arguments[0].naturalWidth != 'undefined'
&& arguments[0].naturalWidth > 0;
但是,只有第二个条件涉及检查undefined
,这似乎与MDN所说的不一致,因为naturalWidth
在不可用时应该是0
,而不是undefined
{1}}。