任何人都可以帮我解释使用selenium webdriver进行图像验证的JavaScript代码吗?

时间:2014-05-29 11:36:00

标签: javascript selenium selenium-webdriver webdriver webpage

我打算使用以下代码来测试网页上的图片是否正确加载。任何人都可以解释一下这个 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"))
 }

}

1 个答案:

答案 0 :(得分:2)

好吧,据我所知,arguments[0]引用HTMLImageElement。该对象具有complete属性,指示图像是否加载。它还具有naturalHeightnaturalWidth属性,这些属性一起指定加载后图像的内在大小。如果这些属性不可用,则返回0。

使用我们刚刚学到的东西,我们可以很容易地看到以下代码将如何确定图像是否已加载:

return arguments[0].complete 
    && typeof arguments[0].naturalWidth != 'undefined' 
    && arguments[0].naturalWidth > 0; 

但是,只有第二个条件涉及检查undefined,这似乎与MDN所说的不一致,因为naturalWidth在不可用时应该是0,而不是undefined {1}}。