iOS自動化探索(三)WebDriverAgent Python Client
阿新 • • 發佈:2019-01-06
之前我們在終端試著呼叫過WDA API, 今天我們在看一個Python封裝的api庫
https://github.com/openatx/facebook-wda
安裝方式(一):
pip install --pre facebook-wda
安裝方式(二):
git clone https://github.com/openatx/facebook-wda.git cd facebook-wda/ python setup.py install
用Xcode開啟WDA 會話, 然後再編寫和執行指令碼
import wda # Enable debug will see http Request and Response # wda.DEBUG= True # get env from $DEVICE_URL if no arguments pass to wda.Client # http://localhost:8100 is the default value if $DEVICE_URL is empty c = wda.Client() # Show Status print c.status()
輸出:
/usr/bin/python2.7 /Users/jackey/Documents/iOS/code/iOS-Auto/Python_Client/Python_Client.py {u'ios': {u'ip': u'192.168.1.101', u'simulatorVersion': u'11.2.1'}, u'state': u'success', u'os': {u'version': u'11.2.1', u'name': u'iOS'}, u'build': {u'time': u'Dec 25 2018 11:48:43'}, u'sessionId': u'24AFBCFD-8CA0-4E4F-BEC3-21AD1170D880'} Process finished with exit code 0
返回Home Screen
# Press home button
c.home()
截圖
# Take a screenshot c.screenshot('screen.png')
開啟和關閉app
# Open app s = c.session('NOVA.ProductDemo') # print app oritation print s.orientation # Close app s.close()
還可用一下方式代替上面的程式碼:
with c.session('NOVA.ProductDemo') as s: print s.orientation
使用瀏覽器開啟指定網站, 然後關閉
# 使用safari瀏覽器開啟百度 s = c.session('com.apple.mobilesafari',['-u', 'http://www.baidu.com']) print s.orientation # 關閉瀏覽器 s.close()
列印app的bundle_id和sessionid
# open app s = c.session('NOVA.ProductDemo') # Current bundleId and session Id print s.bundle_id, s.id
輸出:
/usr/bin/python2.7 /Users/jackey/Documents/iOS/code/iOS-Auto/Python_Client/Python_Client.py NOVA.ProductDemo E56C8902-DDB6-485A-8B0B-AA907CF55C59 Process finished with exit code 0
截圖儲存為png
# Screenshot return PIL.Image
# Requires pillow, installed by "pip install pillow"
s.screenshot().save("s.png")
截圖並旋轉90度
from PIL import Image
s.screenshot().transpose(Image.ROTATE_90).save("correct.png")
調整顯示方向
# Open url with safari s = c.session('com.apple.mobilesafari',['-u','http://www.baidu.com']) print s.orientation # Wait 5s time.sleep(5) # Print orientation print s.orientation # Change orientation s.orientation = wda.LANDSCAPE
獲取螢幕尺寸
# Get width and height
print s.window_size()
模擬touch
# Simulate touch s.tap(200, 200)
Click, 類似tap, 但支援小數
s.click(200, 200) s.click(0.5, 0.5) # click center of screen s.click(0.5, 200) # click center of x, and y(200)
滑動
# Simulate swipe, utilizing drag api
# 從(x1,y1)划向(x2,y2) s.swipe(x1, y1, x2, y2, 0.5) # 0.5s
# 從螢幕右邊往左劃 s.swipe_left()
# 從螢幕左邊往右劃 s.swipe_right()
# 從螢幕底部往上劃 s.swipe_up()
# 從螢幕頂部往上劃 s.swipe_down()
長按
# tap hold s.tap_hold(x, y, 1.0)
關閉鍵盤
# Hide keyboard (not working in simulator), did not success using latest WDA s.keyboard_dismiss()
查詢元素
# For example, expect: True or False # using id to find element and check if exists s(id="URL").exists # return True or False # using id or other query conditions s(id='URL') s(name='URL') s(text="URL") # text is alias of name s(nameContains='UR') s(label='Address') s(labelContains='Addr') s(name='URL', index=1) # find the second element. index starts from 0 # combines search conditions # attributes bellow can combines # :"className", "name", "label", "visible", "enabled" s(className='Button', name='URL', visible=True, labelContains="Addr")
高階查詢
s(xpath='//Button[@name="URL"]') s(classChain='**/Button[`name == "URL"`]') s(predicate='name LIKE "UR*"') s('name LIKE "U*L"') # predicate is the first argument, without predicate= is ok
例如:
# Open app s = c.session('NOVA.ProductDemo') print s.window_size() s.click(100,640) e = s(text='京東超市').get(timeout=10)
如果提示:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
需要在程式碼中新增:
import sys reload(sys) sys.setdefaultencoding('utf8')
元素操作: (點選、滑動、設定文字...)
舉例:
# Open app s = c.session('NOVA.ProductDemo') print s.window_size() s.click(100,640) e = s(text='京東超市').get(timeout=10) e.tap() # tap element