MAC 上只支持Py4j来调用sikulix图像对比工具

MAC上不能使用Jpype,需要Py4j,以及专门的skulix库 robotframework-sikulixlibrary

安装方法:

robotframework-sikulixlibrary · PyPI

pip install robotframework-sikulixlibrary

原文翻译:

项目描述

机器人框架-sikulix 库

基于 JPype 或 Py4J Python 模块的全新现代 SikuliX 机器人框架库,适用于 Python 3.x。

它可以与例如机器人框架项目(https://robotframework.org)、Robocorp 项目(https://robocorp.com)一起使用——对于初学者或纯 Python 项目来说是最简单的方法。无论是测试自动化类型的项目,还是开源 RPA(机器人流程自动化)项目。

JPype是一个 Python 模块,用于提供从 Python 内部对 Java 的完全访问。

Py4J使在 Python 解释器中运行的 Python 程序能够动态访问 JVM 中的 Java 对象。

该库是 SikuliX 的包装器,它将 Java 函数公开为 Robot Framework 关键字,并且可以选择使用任何 JPype 或 Py4J 模块。这是通过创建 SIKULI_PY4J 环境变量并将其设置为 1 来完成的。当未定义或设置为 0 时,将使用 JPype。请注意,在 MacOS 上,只能使用 Py4J,而在 Windows 或 Ubuntu 上,它们中的任何一个都可以使用。

虽然过去在 Robot Framework 中使用 Sikuli 功能的唯一方法是通过带有 XML RPC 接口的远程服务器,但这个库的目的是替换这种方法,并通过一个简单的库在 Robot Framework 项目中使用 SikuliX 变得更加容易声明(即无需启动远程服务器等)。

此外,使用此实现很容易使用新的自定义关键字扩展库,例如创建迁移类以帮助从当前的 Sikuli 库或其他图像识别替代方案迁移。有关实际示例,请检查迁移文件夹。

请参阅关键字文档

安装说明 (Windows)

  1. JPype 或 Py4J 支持的 Python 3.5 或更新版本
  2. JPype 1.2 或更新版本以及 JPype 项目依赖项,如项目页面所述:https ://github.com/jpype-project/jpype
    • 安装 Java 8 或更新版本
    • 虽然 JPype 页面上没有提到,但在新的 Windows 10 机器上还需要 Visual C++ Redistributable 2015 和更高版本(例如 vc_redist.x64.exe)
  3. 或 Py4J 0.10.9.2 或更新版本
  4. SikuliX 作为项目页面中的独立 jar:https ://raiman.github.io/SikuliX1/downloads.html
    • 将 jar 文件放在任何本地目录中(例如 C:\sikulix\sikulix.jar)
    • Py4J 服务器从 SikuliX 2.0.5 开始启用,目前宣传为实验性的。但是,这个库在 Py4J 中按预期工作。
    • 建议使用指向 sikulix 本地目录的环境变量 SIKULI_HOME
  5. pip install robotframework-sikulixlibrary
  6. 如果在您的环境(RF IDE 工具)中未生成 libspec 并因此无法识别库关键字,请检查下面的已知问题部分

虽然 JPype JVM 总是自动启动,但 Py4J JVM 可以手动或自动启动。要手动启动,请使用以下命令:

java -jar sikulix.jar -p(启动 Py4J 服务器)或 java -jar -DsikuliDebug=3 sikulixide.jar -p(例如用于检查 sikulix 调试信息)

例子

使用机器人框架进行测试

*** Settings ***
Library   SikuliXLibrary  sikuli_path=sikulixide-2.0.5.jar

*** Test Cases ***
Example Test
    imagePath add   ${my_path}
    settings set    MinSimilarity  ${0.9}
    app open        C:/Windows/System32/notepad.exe
    region wait     iNotepad.PNG
    region paste    Welcome!

使用Python进行测试。

from SikuliXLibrary import SikuliXLibrary
sikuli_path = 'sikulixide-2.0.5.jar'
lib = SikuliXLibrary(sikuli_path)
lib.imagePath_add('my_path')
lib.settings_set('MinSimilarity', float(0.9))
lib.app_open("C:\\Windows\\System32\\notepad.exe")
lib.region_wait('iNotepad')
lib.region_paste('Welcome!)

测试

Git 克隆,如果不为此库使用 pip install,则只需将 PYTHONPATH 指向本地 robotsframework-sikulixlibrary 文件夹并执行:

python testlibrary_win.py(或测试目录下的任何 .py 文件和选择的操作系统

robot --outputdir results/default test_defaultlibrary_win.robot(或测试目录下的任何 .robot 文件和选择的操作系统)

显然,来自 test/img/MacOS、Ubuntu 或 Windows 的图像文件可能无法在特定环境下运行,需要重新生成。同样对于这些测试,定义了 SIKULI_PATH,SikuliX 的名称是sikulixide-2.0.5.jar

此外,还可以使用此库对 Robot Framework 和 Pyton 代码使用一些支持 RF 的工具进行调试。Python 库调试使用 Visual Studio Code 和 Robocorp 的 Robot Framework Language Server 进行了测试,使用debug test.py文件。此外,通过在 launch.json 文件(VSCode 特定文件)中创建特定配置,使用相同的工具对测试目录中的 Robot Framework 测试代码进行了调试测试。

支持的操作系统

  1. 视窗 10

    • 支持,使用 JPype 和 Py4J 测试
  2. 操作系统

    • SikuliX 在 OSX 下工作,但目前 JPype 通常在 OSX 下工作存在问题:https ://github.com/jpype-project/jpype/issues/911
    • Py4J 在 MacOS 下经过测试和工作,并且总是在不定义 SIKULI_PY4J 环境变量的情况下启用。但是,使用环境变量 SIKULI_PY4J=0 可以强制 JPype 用于实验目的。
  3. Linux

    • 支持,使用 Ubuntu 20.04 和 Leafpad 应用程序测试。使用 JPype 和 Py4J 测试。
    • 由于openApp() stucks on Linux after 2.0.5 upgrade · Issue #438 · RaiMan/SikuliX1 · GitHub,openApp 目前无法与 SikuliX 2.0.5 一起使用,因此它在 Ubuntu 的测试 .py 和 .robot 代码中被禁用。这意味着您必须开始测试并手动打开 Leafpad 应用程序才能使测试成功。
    • 测试:python3.8、default-jre (openjdk-11-jre)、libopencv4.2-java,如 SikuliX 支持页面、gnome-panel 中所述,pip install robotframework-sikulixlibrary
    • 用例如python -m robot --outputdir results/ubuntu test_defaultlibrary_ubuntu.robot或开始测试python testlibrary_ubuntu.py

已知的问题

  • 使用 Py4J 时,libdoc 不会在 IDE 中生成库文档,例如 RED - Robot Editor 或带有 RED 的 Eclipse,也可能不会在带有 Robocorp 插件的 Visual Studio Code 中生成。解决方法是手动启动 SikuliX Py4J 服务器(见上文),然后重新加载库以生成关键字文档。

  • 在 IDE 中生成库文档时,该库在没有参数的情况下进行实例化,它将在 SIKULI_HOME 环境变量定义的目录中查找 sikulix.jar 文件,因此即使该文件与例如 sikulixide-2.0.5 重复,也要确保该文件存在。罐。否则,也可以使用以下命令手动生成 libspec,并将其复制到项目文件夹或 PYTHONPATH 下:

python -m robot.libdoc SikuliXLibrary::sikuli_path=path\to\sikulixide-2.0.5.jar SikuliXLibrary.libspec

请参阅此文档以供参考: https ://github.com/robocorp/robotframework-lsp/blob/master/robotframework-ls/docs/faq.md

更详细的介绍:


GitHub - adrian-evo/robotframework-sikulixlibrary

要在 Python 中使用 Py4J 调用 Java 的 JAR 包,你需要进行以下几个步骤: 1. 首先,确保已经安装了 Py4J 库。可以通过运行 `pip install py4j` 命令来安装。 2. 在 Python 代码中,导入 `py4j` 模块,并创建一个 `Gateway` 对象来连接到 Java 虚拟机。例如: ```python from py4j.java_gateway import JavaGateway gateway = JavaGateway() ``` 3. 使用 `gateway.jvm` 属性来访问 Java 虚拟机中的类和对象。例如,假设你有一个名为 `MyClass` 的类,位于 `myjar.jar` JAR 文件中的 `com.example` 包下: ```python my_class = gateway.jvm.com.example.MyClass() ``` 在这个例子中,我们通过 `gateway.jvm` 属性访问了 Java 虚拟机中的 `com.example.MyClass` 类,并创建了一个 `MyClass` 对象。 4. 调用 Java 对象的方法,以及获取和设置对象的属性。例如: ```python result = my_class.myMethod("argument") my_class.myProperty = "new value" ``` 在这个例子中,我们调用了 `MyClass` 对象的 `myMethod` 方法,并传入了一个字符串参数。还可以通过设置属性来修改对象的状态。 请注意,在使用 Py4J 调用 Java JAR 包时,确保你已经将 JAR 文件的路径添加到 Java 虚拟机的类路径中。你可以使用 `gateway.jvm.classpath.append("path/to/myjar.jar")` 来添加 JAR 文件的路径。 此外,还可以使用 `gateway.jvm` 的其他属性和方法来访问 Java 类和对象,例如 `gateway.jvm.MyClass.staticMethod()` 来调用静态方法,或者 `gateway.jvm.MyClass.FIELD_NAME` 来获取静态字段的值。 以上是使用 Py4J 调用 Java JAR 包的基本步骤,你可以根据具体的场景和需求进行适当的调整和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值