2017-04-13 71 views

回答

0

我爲你編了下面的代碼;但是這有以下依賴性/限制:

1)它可以運行在鉻(我可以修改與其他瀏覽器兼容)

2)這段代碼運行時(因爲它使用的Java機器人的瀏覽器應該是開放的類),所以打到RUN後,讓瀏覽器打開:

3)Thread.sleep(5000)的目的不會改變這一點。

 driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS); 

     List <WebElement> allImages = driver.findElements(By.tagName("img")); 

     for(WebElement img :allImages){ 

      String imgSrc = img.getAttribute("src"); 

      String baseHandle = driver.getWindowHandle(); 

      Actions action = new Actions(driver); 
      action.contextClick(img).build().perform(); 

      Thread.sleep(5000); 

      Robot robot = new Robot(); 

      robot.keyPress(KeyEvent.VK_DOWN); 
      robot.keyRelease(KeyEvent.VK_DOWN); 

      robot.keyPress(KeyEvent.VK_ENTER); 
      robot.keyRelease(KeyEvent.VK_ENTER); 

      Thread.sleep(5000); 

      Set<String> allHandles = driver.getWindowHandles(); 

      allHandles.remove(baseHandle); 

      String newHandle = null; 
      for(String str : allHandles){ 

       newHandle = str; 
      } 

      driver.switchTo().window(newHandle);  

      driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS); 

      if(driver.findElement(By.tagName("body")).getText().contains("not found")){ 

       System.out.println(imgSrc + "Image is broken!"); 


      } 

      driver.close(); 

      driver.switchTo().window(baseHandle); 
      driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS); 




     } 
+0

大部分代碼與問題無關,這不是檢測破損圖像的好方法。這將需要永久導航到頁面上的每個圖像。 – JeffC

+0

是的..你的回答比較好。 – kushal

2

要檢查的圖像壞了,你可以簡單地檢查元素的naturalWidth爲0。將通過頁面上的圖片循環,這樣做檢查對於每個。至於在整個網站上這樣做,你將不得不建立一個爬蟲或理想地找到一個現有的爬蟲,並且這是超出了對SO的問題的範圍。

演示代碼

driver.get("http://the-internet.herokuapp.com/broken_images"); 
for (WebElement image : driver.findElements(By.cssSelector("img"))) 
{ 
    isImageBroken(image); 
} 

以測試中斷的圖像

public void isImageBroken(WebElement image) 
{ 
    if (image.getAttribute("naturalWidth").equals("0")) 
    { 
     System.out.println(image.getAttribute("outerHTML") + " is broken."); 
    } 
} 

運行時功能,該輸出

<img src="asdf.jpg"> is broken. 
<img src="hjkl.jpg"> is broken. 

注:上面的功能是爲這個問題有點兒做作。如果返回boolean並且在測試腳本中完成了驗證,則會更好。

public boolean imageExists(WebElement image) 
{ 
    return !image.getAttribute("naturalWidth").equals("0"); 
} 
0

我希望這會幫助你。

List<WebElement> links = driver.findElements(By.tagName("img")); 
      int brokenImagesCount=0; 
      for (int i = 0; i < links.size(); i++) { 
       System.out.println(links.get(i)); 
       String linkURL=links.get(i).getAttribute("src"); 
       System.out.println(links.get(i).getText()); 
       URL url = new URL(linkURL); 
       HttpURLConnection http = (HttpURLConnection) url.openConnection(); 
       http.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11"); 
       http.setConnectTimeout(10000); 
       http.setReadTimeout(20000); 
       int statusCode=http.getResponseCode(); 
       if(statusCode==404||statusCode==500){ 
        brokenImagesCount=brokenImagesCount+1; 
        System.out.println(linkURL+"and its Status codes is:"+statusCode); 
       } 
      } 
      System.out.println("total number of broken images are: "+brokenImagesCount); 

請更新我,如果它可以幫助你。

0
  1. 獲取xpath,然後使用標籤名稱;獲取頁面中的所有鏈接
  2. 單擊頁面中的每個鏈接
  3. 在目標頁面標題中,查找404/500錯誤。

    public static void verifyimgActive(WebElement img) 
        { 
        try 
        { 
        HttpResponse response = new 
        DefaultHttpClient().execute(new HttpGet(img.getAttribute(「src」))); 
        if (response.getStatusLine().getStatusCode() != 200) 
        { 
         invalidimg++; 
        } 
        catch (Exception e) 
        { 
        e.printStackTrace(); 
         } 
        } } 
    
相關問題