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}")
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}")
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]
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}")
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)
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()