How to check image requests for 404 using Selenium WebDriver? How to check image requests for 404 using Selenium WebDriver? selenium selenium

How to check image requests for 404 using Selenium WebDriver?


Try this:

List<WebElement> allImages = driver.findElements(By.tagName("img"));for (WebElement image : allImages) {  boolean loaded = ((JavaScriptExecutor) driver).executeScript(      "return arguments[0].complete", image);  if (!loaded) {    // Your error handling here.  }}


You could use the getEval command to verify the value returned from the following JavaScript for each image on the page.

@Testpublic void checkForBrokenImages() {    selenium.open("http://www.example.com/");    int imageCount = selenium.getXpathCount("//img").intValue();    for (int i = 0; i < imageCount; i++) {        String currentImage = "this.browserbot.getUserWindow().document.images[" + i + "]";        assertEquals(selenium.getEval("(!" + currentImage + ".complete) ? false : !(typeof " + currentImage + ".naturalWidth != \"undefined\" && " + currentImage + ".naturalWidth == 0);"), "true", "Broken image: " + selenium.getEval(currentImage + ".src"));    }}

Updated:

Added tested TestNG/Java example.


I don't think that first response will work. When I src a misnamed image, it throws a 404 error as expected. However, when I check the javascript in firebug, that (broken) image has .complete set to true. So, it was a completed 404, but still a broken image.

The second response seems to be more accurate in that it checks that it's complete and then checks that there is some width to the image.

I made a python version of the second response that works for me. Could be cleaned up a bit, but hopefully it will help.

def checkForBrokenImages(self):    sel = self.selenium    imgCount = int(sel.get_xpath_count("//img"))    for i in range(0,imgCount):        isComplete = sel.get_eval("selenium.browserbot.getCurrentWindow().document.images[" + str(i) + "].complete")        self.assertTrue(isComplete, "Bad Img (!complete): "+sel.get_eval("selenium.browserbot.getCurrentWindow().document.images[" + str(i) + "].src"))        typeOf = sel.get_eval("typeof selenium.browserbot.getCurrentWindow().document.images[" + str(i) + "].naturalWidth")        self.assertTrue(typeOf != 'undefined', "Bad Img (w=undef): "+sel.get_eval("selenium.browserbot.getCurrentWindow().document.images[" + str(i) + "].src"))        natWidth = int(sel.get_eval("selenium.browserbot.getCurrentWindow().document.images[" + str(i) + "].naturalWidth"))        self.assertTrue(natWidth > 0, "Bad Img (w=0): "+sel.get_eval("selenium.browserbot.getCurrentWindow().document.images[" + str(i) + "].src"))