Пример #1
0
    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_fc):
            scroll_root_element = eyes_selenium_utils.curr_frame_scroll_root_element(
                self.driver)
            origin_provider = ScrollPositionProvider(self.driver,
                                                     scroll_root_element)
            origin_provider.set_position(Point.ZERO())
            logger.debug("resetting origin_provider location")

            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, Region.EMPTY(),
                                             self.position_provider)

            return EyesWebDriverScreenshot.create_full_page(
                self._driver, image, original_frame_position)
Пример #2
0
    def compensate_region_position(self, region, pixel_ratio):
        logger.info(str(self._useragent))
        logger.info(pixel_ratio)

        if (
            self._useragent.os == OSNames.Windows
            and self._useragent.os_major_version <= 7
        ):
            logger.info("compensating by {} pixels".format(pixel_ratio))
            return region.offset(0, pixel_ratio)

        if pixel_ratio == 1.0:
            return region

        if self._useragent.browser_major_version > 60:
            return region

        driver = self._eyes.driver  # type: EyesWebDriver
        fc = driver.frame_chain
        logger.info("frame_chain size: {}".format(fc.size))
        if fc.size > 0:
            return region

        region = region.offset(0, -math.ceil(pixel_ratio / 2))
        if region.width <= 0 or region.height <= 0:
            return Region.EMPTY()

        return region
Пример #3
0
        def full_frame_or_element_region(check_settings):
            logger.debug("check_frame_or_element: {}".format(
                self._check_frame_or_element))
            if self._check_frame_or_element:
                fc = self._ensure_frame_visible()
                # FIXME - Scaling should be handled in a single place instead
                scale_factory = self._update_scaling_params()
                screenshot_image = self._image_provider.get_image()
                scale_factory.update_scale_ratio(screenshot_image.width)
                self.driver.switch_to.frames(fc)
                screenshot = EyesWebDriverScreenshot.create_viewport(
                    self.driver, screenshot_image)
                # TODO HERE
                logger.debug("replacing region_to_check")
                self._region_to_check = screenshot.frame_window
                self._full_region_to_check = Region.EMPTY()

            target_region = check_settings.values.target_region
            if target_region is None:
                target_region = Region.EMPTY()
            return target_region
Пример #4
0
def test_config_cloning():
    conf = SeleniumConfiguration()
    conf.set_viewport_size({"width": 200, "height": 400})
    conf.add_property("hello", "world")
    conf.default_match_settings.content_regions.append(Region.EMPTY())
    conf.add_browser(200, 400, BrowserType.EDGE_CHROMIUM)
    conf.set_visual_grid_options(VisualGridOption("option1", "val"))

    cloned_conf = conf.clone()

    assert id(conf.properties[0]) != id(cloned_conf.properties[0])
    assert id(conf.default_match_settings.content_regions) != id(
        cloned_conf.default_match_settings.content_regions
    )
    assert id(conf._browsers_info[0]) != id(cloned_conf._browsers_info[0])
    assert id(conf.viewport_size) != id(cloned_conf.viewport_size)
    assert id(conf.visual_grid_options[0]) != id(cloned_conf.visual_grid_options[0])
Пример #5
0
    def _check_element(self, name, check_settings):
        element = self._target_element  # type: EyesWebElement

        scroll_root_element = eyes_selenium_utils.curr_frame_scroll_root_element(
            self.driver, self._scroll_root_element)
        pos_provider = self._create_position_provider(scroll_root_element)

        self._region_to_check = Region.EMPTY()
        self._full_region_to_check = Region.EMPTY()

        result = None
        with eyes_selenium_utils.get_and_restore_state(pos_provider):
            with self._ensure_element_visible(element):
                pl = element.location
                try:
                    self._check_frame_or_element = True
                    display_style = element.get_computed_style("display")

                    if self.configure.hide_scrollbars:
                        element.hide_scrollbars()

                    size_and_borders = element.size_and_borders
                    border_widths = size_and_borders.borders
                    element_size = size_and_borders.size

                    use_entire_size = False
                    if display_style != "inline" and (
                            element_size["height"] <=
                            self._effective_viewport["height"]
                            and element_size["width"] <=
                            self._effective_viewport["width"]):
                        self._element_position_provider = ElementPositionProvider(
                            self.driver, element)
                        use_entire_size = True
                    else:
                        self._element_position_provider = None

                    element_region = Region(
                        pl["x"] + border_widths["left"],
                        pl["y"] + border_widths["top"],
                        element_size["width"],
                        element_size["height"],
                        coordinates_type=CoordinatesType.SCREENSHOT_AS_IS,
                    )
                    self._region_to_check = element_region

                    if use_entire_size:
                        self._full_region_to_check = Region.from_(
                            element_region.location,
                            self._element_position_provider.get_entire_size(),
                        )
                    else:
                        self._full_region_to_check = Region(
                            left=element_region.left,
                            top=element_region.top,
                            width=element_region.width,
                            height=element_region.height,
                        )

                    if not self._effective_viewport.is_size_empty:
                        self._region_to_check = self._region_to_check.intersect(
                            self._effective_viewport)

                    result = self._check_window_base(NULL_REGION_PROVIDER,
                                                     name, False,
                                                     check_settings)
                except Exception as e:
                    logger.exception(e)
                    raise e
                finally:
                    if self.configure.hide_scrollbars:
                        element.return_to_original_overflow()
                    self._check_frame_or_element = False
                    self._region_to_check = None
                    self._element_position_provider = None
        return result
Пример #6
0
 def compensate_region_position(self, region, pixel_ratio):
     if pixel_ratio == 1.0:
         return region
     if region.width <= 0 and region.height <= 0:
         return Region.EMPTY()
     return region.offset(0, math.ceil(pixel_ratio))