2016-09-21 2 views
1

Я пытаюсь захватить снимок экрана всех элементов, присутствующих на веб-странице, и хочу сохранить их на своем диске, для которого я написал код ниже.Снимок экрана всех элементов, присутствующих на странице

Единственная проблема заключается в том, что этот фрагмент кода работает только для первой итерации, после чего происходит какая-то неожиданная вещь.

List<WebElement> eleId = driver.findElements(By.xpath("//*[@id]")); //fetch all the elements with ID attribute 
    System.out.println(eleId.size()); 

    for (int i = 0;i < eleId.size();i++) { 

//   Get entire page screenshot 
      File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); 
      BufferedImage fullImg = ImageIO.read(screenshot); 

//   Get the location of element on the page 
      Point point = eleId.get(i).getLocation(); 

//   Get width and height of the element 
      int eleWidth = eleId.get(i).getSize().getWidth(); 
      int eleHeight = eleId.get(i).getSize().getHeight(); 

//   Crop the entire page screenshot to get only element screenshot 
      BufferedImage eleScreenshot = fullImg.getSubimage(point.getX(), point.getY(), eleWidth, eleHeight); 
      ImageIO.write(eleScreenshot, "png", screenshot); 

//   Creating variables name for image to be stores in the disk 
      String fileName = eleId.get(i).getAttribute("id"); 
      String imageLocation = "D:\\" + fileName + ".png"; 
//   System.out.println(imageLocation); 

//   Copy the element screenshot to disk 
      File screenshotLocation = new File(imageLocation); 
      FileUtils.copyFile(screenshot, screenshotLocation); 

      System.out.println("Screenshot has been stored."); 
} 
+0

Что вы подразумеваете под неожиданными вещами? Вы скрипт выдает какую-либо ошибку? –

+0

Это не ошибка, а запуск только для одной итерации. –

ответ

1

Hi Sandeep попробуйте под кодом. Он работает для меня. Я просто добавил одно условие «если», чтобы проверить высоту и ширину изображения.

@Test(enabled=true) 
public void getIndividualElementScreenShot() throws IOException{ 
    WebDriver driver = new FirefoxDriver(); 
    driver.get("http://www.google.com/"); 
    driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS); 
    driver.manage().window().maximize(); 
    List<WebElement> eles = driver.findElements(By.xpath("//*[@id]")); 
    System.out.println(eles.size()); 
    for(WebElement ele : eles){ 
     //Get Entire page screen shot 
     File screenShot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
     BufferedImage fullImage = ImageIO.read(screenShot); 

     //Get the location on the page 
     Point point = ele.getLocation(); 

     //Get width and height of an element 
     int eleWidth = ele.getSize().getWidth(); 
     int eleHeight = ele.getSize().getHeight(); 

     //Cropping the entire page screen shot to have only element screen shot 
     if(eleWidth != 0 && eleHeight != 0){ 
      BufferedImage eleScreenShot = fullImage.getSubimage(point.getX(), point.getY(), eleWidth, eleHeight); 
      ImageIO.write(eleScreenShot, "png", screenShot); 


      //Creating variable name for image to be store in disk 
      String fileName = ele.getAttribute("id"); 
      String imageLocation = "F:\\ElementImage\\"+fileName+".png"; 
      System.out.println(imageLocation); 

      //Copy the element screenshot to disk 
      File screenShotLocation = new File(imageLocation); 
      org.apache.commons.io.FileUtils.copyFile(screenShot, screenShotLocation); 

      System.out.println("Screen shot has beed stored"); 

     } 
    } 
    driver.close(); 
    driver.quit(); 
} 
+0

Ty @Sandipan Pramanik, я думаю, проблема была в ширине и высоте элемента, к которому я пытался получить доступ ... tysm :) –

0

Ваш код в порядке. Но вы переписываете файл на каждой итерации. Ты понял? Измените имя файла в каждой итерации, назначив новое имя файла в переменной fileName. Используйте приведенный ниже код:

 List<WebElement> eleId = driver.findElements(By.xpath("//*[@id]")); //fetch all the elements with ID attribute 
     System.out.println(eleId.size()); 

     for (int i = 0;i < eleId.size();i++) { 

//   Get entire page screenshot 
       File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
       BufferedImage fullImg = ImageIO.read(screenshot); 

//   Get the location of element on the page 
       Point point = eleId.get(i).getLocation(); 

//   Get width and height of the element 
       int eleWidth = eleId.get(i).getSize().getWidth(); 
       int eleHeight = eleId.get(i).getSize().getHeight(); 

//   Crop the entire page screenshot to get only element screenshot 
       BufferedImage eleScreenshot = fullImg.getSubimage(point.getX(), point.getY(), eleWidth, eleHeight); 
       ImageIO.write(eleScreenshot, "png", screenshot); 

//   Creating variables name for image to be stores in the disk 
       String fileName = eleId.get(i).getAttribute("id"); 
       String imageLocation = "D:/" + fileName + i + ".png"; 
//   System.out.println(imageLocation); 

//   Copy the element screenshot to disk 
       File screenshotLocation = new File(imageLocation); 
       FileUtils.copyFile(screenshot, screenshotLocation); 

       System.out.println("Screenshot has been stored."); 
    } 
+0

Я тоже пробовал это, но все тот же выход, он останавливается после первой итерации. –

+0

Скопируйте и вставьте часть кода из отредактированного ответа. Думаю, это поможет. :) –

+0

Пробовал скопировать пасту, как хорошо..Но только одна итерация. –

Смежные вопросы