@@ -154,14 +154,13 @@ public static PageSnapshot shootPage(WebDriver driver, Capture capture,
154154 pageScreenshot .setImage (browser .takeFullPageScreenshot ());
155155 break ;
156156 case VERTICAL_SCROLL :
157- pageScreenshot .setImage (browser .takeFullPageVerticalScreenshot ( false , null ));
157+ pageScreenshot .setImage (browser .takeFullPageVerticalScreenshotScroll ( null ));
158158 break ;
159159 case HORIZONTAL_SCROLL :
160- _SCROLL :
161- pageScreenshot .setImage (browser .takeFullPageHorizontalScreenshot (false , null ));
160+ pageScreenshot .setImage (browser .takeFullPageHorizontalScreenshotScroll (null ));
162161 break ;
163162 case FULL_SCROLL :
164- pageScreenshot .setImage (browser .takeFullPageScreenshotScroll (false , null ));
163+ pageScreenshot .setImage (browser .takeFullPageScreenshotScroll (null ));
165164 break ;
166165 }
167166 return pageScreenshot ;
@@ -197,7 +196,8 @@ public static ElementSnapshot shootElement(WebDriver driver, WebElement element)
197196 * @return ElementSnapshot instance
198197 */
199198 public static ElementSnapshot shootElement (WebDriver driver ,
200- WebElement element , Capture capture ) {
199+ WebElement element ,
200+ CaptureElement capture ) {
201201 return shootElement (driver , element , capture , true );
202202 }
203203
@@ -214,7 +214,7 @@ public static ElementSnapshot shootElement(WebDriver driver, WebElement element,
214214 Browser browser = new Browser (driver , useDevicePixelRatio );
215215 ElementSnapshot elementSnapshot = new ElementSnapshot (driver , browser .getDevicePixelRatio ());
216216 browser .scrollToElement (element );
217- elementSnapshot .setImage (browser .takeScreenshot (), browser .getBoundingClientRect (element ));
217+ elementSnapshot .setImage (browser .takeScreenshot (), browser .getCoordinates (element ));
218218 return elementSnapshot ;
219219 }
220220
@@ -230,23 +230,23 @@ public static ElementSnapshot shootElement(WebDriver driver, WebElement element,
230230 */
231231 public static ElementSnapshot shootElement (WebDriver driver ,
232232 WebElement element ,
233- Capture capture ,
233+ CaptureElement capture ,
234234 boolean useDevicePixelRatio ) {
235235 Browser browser = new Browser (driver , useDevicePixelRatio );
236236 ElementSnapshot elementSnapshot = new ElementSnapshot (driver , browser .getDevicePixelRatio ());
237237 browser .scrollToElement (element );
238238 switch (capture ) {
239- case VIEWPORT :
240- elementSnapshot .setImage (browser .takeElementViewportScreenshot (element ));
241- break ;
242239 case VERTICAL_SCROLL :
243- elementSnapshot .setImage (browser .takeFullElementVerticalScreenshot (element ));
240+ elementSnapshot .setImage (browser .takeFullElementVerticalScreenshotScroll (element ));
244241 break ;
245242 case HORIZONTAL_SCROLL :
246- elementSnapshot .setImage (browser .takeFullElementHorizontalScreenshot (element ));
243+ elementSnapshot .setImage (browser .takeFullElementHorizontalScreenshotScroll (element ));
244+ break ;
245+ case FULL_SCROLL :
246+ elementSnapshot .setImage (browser .takeFullElementScreenshotScroll (element ));
247247 break ;
248248 default :
249- elementSnapshot .setImage (browser .takeFullElementScreenshot (element ));
249+ elementSnapshot .setImage (browser .takeElementViewportScreenshot (element ));
250250 }
251251 return elementSnapshot ;
252252 }
@@ -263,7 +263,7 @@ public static ElementSnapshot shootElementVerticallyCentered(WebDriver driver, W
263263 Browser browser = new Browser (driver , useDevicePixelRatio );
264264 ElementSnapshot elementSnapshot = new ElementSnapshot (driver , browser .getDevicePixelRatio ());
265265 browser .scrollToElementVerticalCentered (element );
266- elementSnapshot .setImage (browser .takeScreenshot (), browser .getBoundingClientRect (element ));
266+ elementSnapshot .setImage (browser .takeScreenshot (), browser .getCoordinates (element ));
267267 return elementSnapshot ;
268268 }
269269
@@ -278,7 +278,7 @@ public static ElementSnapshot shootElementVerticallyCentered(WebDriver driver, W
278278 * @return PageSnapshot instance
279279 */
280280 public static PageSnapshot shootFrame (WebDriver driver , String frameId ,
281- Capture capture ,
281+ CaptureElement capture ,
282282 boolean useDevicePixelRatio ) {
283283 WebElement frame = driver .findElement (By .id (frameId ));
284284 return shootFrame (driver , frame , capture , 0 ,
@@ -296,7 +296,8 @@ public static PageSnapshot shootFrame(WebDriver driver, String frameId,
296296 * @return PageSnapshot instance
297297 */
298298 public static PageSnapshot shootFrame (WebDriver driver , WebElement frame ,
299- Capture capture , boolean useDevicePixelRatio ) {
299+ CaptureElement capture ,
300+ boolean useDevicePixelRatio ) {
300301 return shootFrame (driver , frame , capture , 0 ,
301302 useDevicePixelRatio );
302303 }
@@ -306,12 +307,12 @@ public static PageSnapshot shootFrame(WebDriver driver, WebElement frame,
306307 * and need to scroll while making screenshots, either vertically or
307308 * horizontally or both directions.
308309 *
309- * @param driver WebDriver instance
310- * @param capture Capture type
310+ * @param driver WebDriver instance
311+ * @param capture Capture type
311312 * @return PageSnapshot instance
312313 */
313314 public static PageSnapshot shootFrame (WebDriver driver , WebElement frame ,
314- Capture capture ) {
315+ CaptureElement capture ) {
315316 return shootFrame (driver , frame , capture , 0 ,
316317 true );
317318 }
@@ -329,12 +330,22 @@ public static PageSnapshot shootFrame(WebDriver driver, WebElement frame,
329330 * @return PageSnapshot instance
330331 */
331332 public static PageSnapshot shootFrame (WebDriver driver , WebElement frame ,
332- Capture capture , int betweenScrollTimeout , boolean useDevicePixelRatio ) {
333+ CaptureElement capture ,
334+ int betweenScrollTimeout , boolean useDevicePixelRatio ) {
333335 Browser browser = new Browser (driver , useDevicePixelRatio );
334336 browser .setBetweenScrollTimeout (betweenScrollTimeout );
335-
336337 browser .scrollToElement (frame );
337- Coordinates coordinates = browser .getBoundingClientRect (frame );
338+ Coordinates coordinates = browser .getCoordinates (frame );
339+
340+ Browser browserParent = new Browser (driver , useDevicePixelRatio );
341+ if (capture != CaptureElement .VIEWPORT &&
342+ (coordinates .getWidth () > browserParent .getViewportWidth () || coordinates .getHeight () > browserParent .getViewportHeight ())) {
343+ throw new UnsupportedOperationException ("Full frame screenshot is" +
344+ " " +
345+ "only available if WHOLE frame is fully visible in the " +
346+ "viewport. Use CaptureElement.VIEWPORT in case frame is " +
347+ "outside of visible viewport." );
348+ }
338349 driver .switchTo ().frame (frame );
339350
340351 if (beforeShootCondition != null ) {
@@ -346,17 +357,23 @@ public static PageSnapshot shootFrame(WebDriver driver, WebElement frame,
346357
347358 PageSnapshot pageScreenshot = new PageSnapshot (driver , browser .getDevicePixelRatio ());
348359 switch (capture ) {
349- case VIEWPORT :
350- pageScreenshot .setImage (browser .takeFrameViewportScreenshot ());
351- break ;
352360 case VERTICAL_SCROLL :
353- pageScreenshot .setImage (browser .takeFullPageVerticalScreenshot (true , coordinates ));
361+ pageScreenshot .setImage (browser
362+ .takeFullPageVerticalScreenshotScroll (coordinates ));
354363 break ;
355364 case HORIZONTAL_SCROLL :
356- pageScreenshot .setImage (browser .takeFullPageHorizontalScreenshot (true , coordinates ));
365+ pageScreenshot .setImage (browser
366+ .takeFullPageHorizontalScreenshotScroll (coordinates ));
367+ break ;
368+ case FULL_SCROLL :
369+ pageScreenshot .setImage (browser
370+ .takeFullPageScreenshotScroll (coordinates ));
357371 break ;
358372 default :
359- pageScreenshot .setImage (browser .takeFullPageScreenshotScroll (true , coordinates ));
373+ pageScreenshot .setImage (browser
374+ .takeFrameViewportScreenshot (coordinates ));
375+ break ;
376+
360377 }
361378 return pageScreenshot ;
362379 }
@@ -372,21 +389,21 @@ public static PageSnapshot shootFrame(WebDriver driver, WebElement frame,
372389 * @return PageSnapshot instance
373390 */
374391 public static PageSnapshot shootFrame (WebDriver driver , String frameId ,
375- Capture capture ) {
392+ CaptureElement capture ) {
376393 WebElement frame = driver .findElement (By .id (frameId ));
377394 return shootFrame (driver , frame , capture , true );
378395 }
379396
380397 /**
381398 * To be used when screenshotting the frame
382- * Takes full frame screenshot be default
399+ * Takes viewport of the frame screenshot be default
383400 *
384401 * @param driver WebDriver instance
385402 * @param frameId Id of the frame element
386403 * @return PageSnapshot instance
387404 */
388405 public static PageSnapshot shootFrame (WebDriver driver , String frameId ) {
389406 WebElement frame = driver .findElement (By .id (frameId ));
390- return shootFrame (driver , frame , Capture . FULL_SCROLL , true );
407+ return shootFrame (driver , frame , CaptureElement . VIEWPORT , true );
391408 }
392409}
0 commit comments