Как сделать screenshot элемента?

Привет!

Надо сделать shot of visible element, не все старицы, а именно элемента

Может сталикивался кто или есть идеи?

 

интересный вопрос, раньше не задумывался об этом

оригинально в вебдрайвере реализованно снятие всего экрана

я думаю, один из варинатов, как можно сделать - надо посмотреть как реализованно снятие экрана, дальше надо будет определить координаты вебэлемента (можно сделать с помощью веб-дрейвера) и потом снять скриншот по координатам

и еще раз, это все надо будет самому писать, так как такой реализации я еще нигде не видел

Разве можно снимать скриншот по координатам ?

 

Ещё как вариант можно предложить:

1) Запоминаем координаты и размер объекта.

2) Снимаем скриншот всего экрана.

3) Обрезаем скриншот до нужных размеров.

можно, чуточку подпилив

 

я уже в принц реализовал:

 

int x = driver.findElement.getLocation().x

int y = driver.findElement.getLocation().y

String path = "D:/tst.jpg";

 

 try {  
                 Robot robot = new Robot();                   
                 int width = xx;  
                 int height = yy;  
                 Rectangle area = new Rectangle(x, y, width, height);  
                 BufferedImage bufferedImage = robot.createScreenCapture(area);                  
                 File file = new File(path);  
                 ImageIO.write(bufferedImage,"jpg",file);            
                
                } catch (Exception e) {
                    
                }

 

но подумалось что есть нативный метод какой, как в примеру у QTP

 

ну лады, будет время надо будет поковыряться в TakesScreenshot

если посмотреть в реализацию снятия скриншота CaptureScreenshotCommand.javа, то там такая же реализация

 

  public String captureAndEncodeSystemScreenshot() throws InterruptedException, ExecutionException,
      TimeoutException, IOException {
    final ByteArrayOutputStream outStream;
    final BufferedImage bufferedImage;
    final Rectangle captureSize;
    final byte[] encodedData;
    final Robot robot;
 
    robot = RobotRetriever.getRobot();
    captureSize = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
    bufferedImage = robot.createScreenCapture(captureSize);
    outStream = new ByteArrayOutputStream();
    ImageIO.write(bufferedImage, "png", outStream);
 
    return new Base64Encoder().encode(outStream.toByteArray());
  }

надо просто реализовать снятие экрана по нужным координатам

ясно, жаль что ребята не обучили дравейр определять область видимости элемента по диагонали(

 

ну хорошо, заскриншотить область по цифрам это легко, но раз уж на то пошло, кто знает как найти помимо верхнего левого, ещё и правый нижний угол элемента?:)

Как-то так:

elem_xpath = 'bla-bla-bla'

elem_bottom_right_corner_x = driver.find_element_by_xpath(elem_xpath).location['x'] + driver.find_element_by_xpath(elem_xpath).size['height']

elem_bottom_right_corner_y = driver.find_element_by_xpath(elem_xpath).location['y'] + driver.find_element_by_xpath(elem_xpath).size['widht']

ненене, наврал я тут:)

 

int x = driver.findElement.getLocation().x

int y = driver.findElement.getLocation().y

 

ет не правильно

Я тут для java для себя сделал небольшую утилитку как раз для снятия скриншотов элементов, может кому пригодится: Automated testing blog: Selenium: снятие скриншота элемента

1 лайк

Как вариант, а что если делать не скриншоты, а формировать html файл содержащий только этот элемент на каждый нужный элемент, ну и сохранять каскадную таблицу стилей в этой папке, для поддержания форматирования? Сложнее (на некоторые элементы типа таблицы, придется свои парсеры писать, таких элементов не много придется запилить), но в итоге вроде как функциональнее.

Думал в сторону вырезания куска html. Но кажется это уж очень замысловато получается. И по времени, и по сложности. и не факт, что это будет полезно.