Ejemplo n.º 1
0
    def _find(self, locator: str) -> List[Geometry]:
        """Internal method for resolving and searching locators."""
        if isinstance(locator, (Region, Point)):
            return [locator]

        locator: Locator = parse_locator(locator)
        self.logger.info("Using locator: %s", locator)

        if isinstance(locator, PointLocator):
            position = Point(locator.x, locator.y)
            return [position]
        elif isinstance(locator, OffsetLocator):
            position = self.ctx.get_mouse_position()
            position = position.move(locator.x, locator.y)
            return [position]
        elif isinstance(locator, RegionLocator):
            region = Region(locator.left, locator.top, locator.right,
                            locator.bottom)
            return [region]
        elif isinstance(locator, ImageLocator):
            ensure_recognition()
            return self._find_templates(locator)
        elif isinstance(locator, OcrLocator):
            ensure_recognition()
            return self._find_ocr(locator)
        else:
            raise NotImplementedError(f"Unsupported locator: {locator}")
Ejemplo n.º 2
0
    def find(self, locator: str) -> List[Union[Point, Region]]:
        """Internal method for resolving and searching locators."""
        if isinstance(locator, (Region, Point)):
            return [locator]

        locator = parse_locator(locator)
        self.logger.info("Using locator: %s", locator)

        if isinstance(locator, Coordinates):
            position = Point(locator.x, locator.y)
            return [position]
        elif isinstance(locator, Offset):
            position = self.ctx.get_mouse_position()
            position.offset(locator.x, locator.y)
            return [position]
        elif isinstance(locator, ImageTemplate):
            if not HAS_RECOGNITION:
                raise ValueError(
                    "Image templates not supported, please install "
                    "rpaframework-recognition package")
            # TODO: Add built-in offset support
            return self._find_templates(locator)

        else:
            raise NotImplementedError(f"Unsupported locator: {locator}")
Ejemplo n.º 3
0
    def _find_point(self, base: Geometry, point: PointLocator):
        """Find absolute point on screen. CAn not be based on existing value."""
        if not isinstance(base, Undefined):
            self.logger.warning("Using absolute point coordinates")

        result = Point(point.x, point.y)
        return [result]
Ejemplo n.º 4
0
    def find(self, locator: str) -> List[Union[Point, Region]]:
        """Internal method for resolving and searching locators."""
        if isinstance(locator, (Region, Point)):
            return [locator]

        locator = parse_locator(locator)
        self.logger.info("Using locator: %s", locator)

        if isinstance(locator, Coordinates):
            position = Point(locator.x, locator.y)
            return [position]
        elif isinstance(locator, Offset):
            position = self.ctx.get_mouse_position()
            position.offset(locator.x, locator.y)
            return [position]
        elif isinstance(locator, ImageTemplate):
            if not HAS_RECOGNITION:
                raise ValueError(
                    "Image templates not supported, please install "
                    "rpaframework-recognition module")
            # TODO: Add built-in offset support
            confidence = locator.confidence or self.confidence
            self.logger.info("Matching with confidence of %.1f", confidence)

            try:
                regions = templates.find(
                    image=self.ctx.take_screenshot(),
                    template=locator.path,
                    confidence=confidence,
                )

                # Virtual screen top-left might not be (0,0)
                left, top, _, _ = self.ctx.get_display_dimensions()
                for region in regions:
                    region.move(left, top)
            except templates.ImageNotFoundError:
                return []

            return regions
        else:
            raise NotImplementedError(f"Unsupported locator: {locator}")
Ejemplo n.º 5
0
    def get_mouse_position(self) -> Point:
        """Get current mouse position in pixel coordinates.

        .. code-block:: robotframework

            ${position}=    Get mouse position
            Log    Current mouse position is ${position.x}, ${position.y}
        """
        if self._error:
            raise self._error
        x, y = self._mouse.position
        return Point(x, y)
Ejemplo n.º 6
0
 def _move(self, point: Point) -> None:
     """Move mouse to given point."""
     # TODO: Clamp to screen dimensions?
     self.logger.info("Moving mouse to (%d, %d)", *point)
     self._mouse.position = point.as_tuple()