環境搭建
注意:適用於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.csdn.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