Python3+Sikuli环境搭建与项目实战
环境搭建
注意:适用于62位windows7系统,32位只能作参考
1.下载sikuli的jar包
下载地址:https://launchpad.net/sikuli
我使用的版本为:sikulixsetup-1.1.2.jar
2.安装sikuli环境
在D盘新建一个目录sikuli,将sikulixsetup-1.1.2.jar复制到该目录中,双击sikulixsetup-1.1.2.jar文件,
运行该jar包如下图所示,点击 是
勾选 Pack2 即安装 sikulix 的 api 包,点击 Setup Now
点击 确认窗口的 是
安装完成后,sikuli 目录中会自动生成一个 sikulixapi.jar 包,这是以后我们 Python 脚本要使
用的包,后续需要引用此包
3.下载 JPype1(调用 Java 程序的 Python 第三方库)
官方下载地址:https://pypi.org/project/JPype1/
4.安装 JPype1 第三方库
离线安装方式(推荐):
将 JPype1-0.6.3-py3.5-win-amd64.egg.rar 压缩包下载到本地
下载地址:链接:https://pan.baidu.com/s/1Jy1hfcLITZsjvnZDtMsRfw 提取码:1p3g
1)先将 JPype1-0.6.3-py3.5-win-amd64.egg.rar 包解压到 Python35\Lib\site-packages 目录中(即
Python 安装目录)
2)再用记事本修改 easy-install.pth 文件,末尾换行加入:./jpype1-0.6.3-py3.5-win-amd64.egg
3)重新进入 Python 命令行模式,输入 import jpype 没报错即表示成功
在线安装方式:
Python使用jpype:
a) 导入jpype
import jpype
b) 下面是一些操作(这个是调用java基本应用)
from jpype import *
import os
def pjava():
print getDefaultJVMPath() #这个是java的默认路径
#启动虚拟机
if not isJVMStarted(): #判断java虚拟机是否启动
startJVM(getDefaultJVMPath()) #启动java
pp = 'hello world'
#调用java的类代码
keystore = JClass('java.lang.System') #调用java.System这个类
keystore.out.println(pp) #执行输出
ShutdownJVM() #关闭虚拟机
if __name__ == "__main__":
pjava()
c、启动 jvm
JPype 提供的 startJVM() 函数的作用是启动 JAVA 虚拟机,所以在后续的任何 JAVA 代码被调用前,必须先调用此方法启动 JAVA 虚拟机。
jpype.startJVM() 的定义
startJVM(jvm, *args)
·
jpype.startJVM() 的参数
参数 1: jvm, 描述你系统中 jvm.dll 文件所在的路径,如“ C:\ProgramFiles\IBM\Java50\jre\bin\j9vm\jvm.dll ”。可以通过调用 jpype.getDefaultJVMPath() 得到默认的 JVM 路径。
参数 2: args, 为可选参数,会被 JPype 直接传递给 JVM 作为 Java 虚拟机的启动参数。此处适合所有合法的 JVM 启动参数,
————————————————
原文链接:https://blog.****.net/liuxingyu_21/article/details/23848053
5.JRE 环境配置
由于利用 Python 加载使用 Jar 包,所以需要开启 JVM(Java 虚拟机)环境,需要配置 Java
开发环境,环境配置请参见另外一份名为 Python+Eclipse+Selenium 环境搭建的说明文章
确认如:C:\Program Files\Java\jdk1.8.0_151\jre\bin\server 目录下有 jvm.dll 文件即可
----------------项目实战----------------
背景:
项目需要在微信端小程序覆盖UI自动化测试,使用appium成本太高,故考虑可否使用sikuli来做。
调研:
问题:Sikuli使用的是java编写,python无法直接调用其api
解决方法:JPype。
JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足。
安装方法:pip install JPype
实例
'''
coding:utf-8
from jpype import *
import os
from selenium import webdriver
from utils.base import Base
DIR = os.path.dirname(os.path.abspath('.'))
IMG_PATH = DIR + '/sikuli/'
"""
启动浏览器,打开被测页面
"""
driver = webdriver.Chrome(executable_path=CHROME_DRIVER_PATH)
driver.maximize_window()
driver.get(Base.get_config_value('config', 'testEnv', 'url_3.0'))
"""
由于Sikuli使用的是java编写,python无法直接调用其api,必须使用JPype来调用
"""
"""
JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足。
"""
startJVM(r'C:\Program Files\Java\jre1.8.0_101\bin\server\jvm.dll', '-ea', r'-Djava.class.path=D:\sikuli\sikulixapi.jar') # 启动 JAVA 虚拟机
Screen = JClass('org.sikuli.script.Screen') # 返回一个Java类给Python
screen = Screen() # 实例化这个类
screen.click(IMG_PATH + '跳过.PNG') # 点击事件
screen.click(IMG_PATH + '地址簿.PNG')
driver.quit()
'''
链接:https://www.jianshu.com/p/fd53a0aacb25