def _full_page_screenshot(self, scale_provider): # type: (ScaleProvider) -> EyesWebDriverScreenshot logger.info("Full page screenshot requested") original_fc = self.driver.frame_chain.clone() if original_fc.size > 0: original_frame_position = original_fc.default_content_scroll_position else: original_frame_position = Point.zero() with self.driver.switch_to.frames_and_back(self._original_frame_chain): location = self.scroll_root_element.location size_and_borders = self.scroll_root_element.size_and_borders region = Region( location["x"] + size_and_borders.borders["left"], location["y"] + size_and_borders.borders["top"], size_and_borders.size["width"], size_and_borders.size["height"], ) algo = self._create_full_page_capture_algorithm(scale_provider) image = algo.get_stitched_region(region, None, self.position_provider) return EyesWebDriverScreenshot.create_full_page( self._driver, image, original_frame_position)
def __init__(self, image, location=None): super(EyesImagesScreenshot, self).__init__(image) if location is None: location = Point.zero() argument_guard.is_a(location, Point) self._location = location self._bounds = Region.from_( location, dict(width=self._image.width, height=self._image.height) )
def _ensure_frame_visible(self): logger.debug("scroll_root_element_: []".format( self._scroll_root_element)) original_fc = self.driver.frame_chain.clone() fc = self.driver.frame_chain.clone() self.driver.execute_script("window.scrollTo(0,0);") origin_driver = eyes_selenium_utils.get_underlying_driver(self.driver) while len(fc) > 0: logger.debug("fc count: {}".format(fc.size)) self.driver.switch_to.parent_frame_static(origin_driver.switch_to, fc) self.driver.execute_script("window.scrollTo(0,0);") prev_frame = fc.pop() frame = fc.peek scroll_root_element = None if fc.size == original_fc.size: logger.debug("PositionProvider: {}".format( self.position_provider)) self.position_provider.push_state() scroll_root_element = self._scroll_root_element else: if frame: scroll_root_element = frame.scroll_root_element if not scroll_root_element: scroll_root_element = self.driver.find_element_by_tag_name( "html") logger.debug("scroll_root_element {}".format(scroll_root_element)) position_provider = self._element_position_provider_from( scroll_root_element) position_provider.set_position(prev_frame.location) reg = Region.from_location_size(Point.zero(), prev_frame.inner_size) self._effective_viewport.intersect(reg) self.driver.switch_to.frames(original_fc) return original_fc