当前位置: 首页 > 工具软件 > Sikuli > 使用案例 >

python+sikuli 图形操作脚本编写

梁马鲁
2023-12-01

1、环境准备

安装 jpype 包,安装方式 pip install jpype1

安装jdk包并配置环境变量,最少安装jdk1.8

2、代码块解析及使用

sikulix.jar 文件:
通过图形操作主要是启动这个jar包来操作,此文件为必须文件
下载sikuli jar包
链接:https://pan.baidu.com/s/1jpHyeq5ume5GWrJwYqRi2Q
提取码:bsii

sikuli_script.py 文件:
主要为封装调用sikuli jar包通过图形操作的方法,需要进行初始化后再使用

import os
import jpype
from jpype import *
from selenium import webdriver


class SikuliOperate(object):
    def __init__(self):
        try:
            # 获取环境变量中jdk路径
            jvmPath = jpype.getDefaultJVMPath() 
            # 启动sikuli jar包
            jpype.startJVM(jvmPath, "-ea", "-Djava.class.path=%s" % 'sikulix.jar')
            Screen = JClass("org.sikuli.script.Screen")  # 调用sikuli
            self.screen = Screen()
        except Exception as e:
            print(str(e))

    def sikuli_click(self, image_path):
        """
        通过图片点击
        :param image_path:  图片路径
        :return:
        """
        try:
            self.screen.click(image_path)
        except Exception as e:
            print(str(e))

    def sikuli_send_keys(self, image_path, text):
        """
        获取指定组件并输入内容
        :param image_path: 图片路径
        :param text: 内容
        :return:
        """
        try:
            self.screen.type(image_path, text)
        except Exception as e:
            print(str(e))

    def sikuli_double_click(self, image_path):
        """
        双击组件
        :param image_path: 图片路径
        :return:
        """
        try:
            self.screen.doubleClick(image_path)
        except Exception as e:
            print(str(e))

    def sikuli_right_click(self, image_path):
        """
        右击
        :param image_path: 图片路径
        :return:
        """
        try:
            self.screen.rightClick(image_path)
        except Exception as e:
            print(str(e))

    def sikuli_drag_drop(self, image_path1, image_path2):
        """
        拖拽组件
        :param image_path1: 拖拽组件图片路径
        :param image_path2: 拖拽后移动位置
        :return:
        """
        try:
            self.screen.dragDrop(image_path1, image_path2)
        except Exception as e:
            print(str(e))

    def sikuli_shutdowm(self):
        """
        关闭sikuli
        :return:
        """
        try:
            jpype.shutdownJVM()
        except Exception as e:
            print(str(e))


if __name__ == "__main__":
    driver = webdriver.Chrome(executable_path="D:\\chromedriver.exe")
    driver.get("https://mars-test.myscrm.cn/")
    driver.maximize_window()
    current_path = os.getcwd()
    so = SikuliOperate()
    so.sikuli_drag_drop(os.path.join(current_path, "image_package", "1638787671424.png"),
                        os.path.join(current_path, "image_package", "1.png"))
    # # so.sikuli_click(r"D:\testgit\yk-ui-baseframe\myweb\tools\sikuli\sikuli.sikuli\1638787711741.png")
    # so.sikuli_send_keys(r"D:\testgit\yk-ui-baseframe\myweb\tools\sikuli\sikuli.sikuli\1638787711741.png","f-20211122-optimization")
    # so.sikuli_click(r"D:\testgit\yk-ui-baseframe\myweb\tools\sikuli\sikuli.sikuli\1638787812618.png")
    so.sikuli_shutdowm()
    driver.quit()

3、使用注意事项

  • 执行脚本时页面不能有遮挡,不然会点不到对应元素
  • 执行UI脚本不能使用非页面模式来执行
  • 不能多线程同时执行
  • 建议在web难定位或元素无法定位时使用
 类似资料: