Python Appium操作


啟動appium:appium -a 127.0.0.1 -p 4723 --log xxx.log --local-timezone

 

Appium 服務命令行參數

  • 啟動appium
  • -p 4723 指定端口
  • --log xxx.log指定日志保存到指定文件內(可以是絕對路徑)
  • --local-timezone指定時間為本地時間
  • --log-level error設置日志級別,默認是debug
  • win平台在命令的開始添加start /b,mac平台在命令的末尾添加&:表示后台啟動,不加時,后續的程序無法運行(終端單獨啟動時可以不加)
# win
start /b appium -a 127.0.0.1 -p 4723  --log xxx.log --local-timezone
# mac
appium -a 127.0.0.1 -p 4723  --log xxx.log --local-timezone  &

 

關閉appium
  • 關閉相應端口對應的進程即可

根據端口號查看進程&關閉相應的進程

win系統

根據端口號查找進程號netstat -o -n -a | findstr :端口號

# 命令
netstat -aon|findstr 4723
# 結果
  TCP    127.0.0.1:4723         0.0.0.0:0              LISTENING       3352

 

終止進程taskkill /F /PID 進程號(PID號)

# 命令
taskkill /f /pid 3352
# 結果
成功: 已終止 PID 為 3352 的進程。

 

 

  • 終止所有appium進程taskkill /f /t /im node.exe
mac系統
  • 根據端口號查找進程號:lsof -i tcp: 4723

  • 終止進程:kill 進程號(PID號)

實例代碼

pc = input('請輸入系統 win or mac:')
def stop_appium(post_num=4723):
    '''關閉appium服務'''
    if pc.upper() =='WIN':
        p = os.popen(f'netstat  -aon|findstr {post_num}')
        p0 = p.read().strip()
        if p0 != '' and 'LISTENING' in p0:
            p1 = int(p0.split('LISTENING')[1].strip()[0:4])  # 獲取進程號
            os.popen(f'taskkill /F /PID {p1}')  # 結束進程
            print('appium server已結束')
    elif pc.upper() == 'MAC':
        p = os.popen(f'lsof -i tcp:{post_num}')
        p0 = p.read()
        if p0.strip() != '':
            p1 = int(p0.split('\n')[1].split()[1])  # 獲取進程號
            os.popen(f'kill {p1}')  # 結束進程
            print('appium server已結束')

def start_appium(post_num=4723):
    '''開啟appium服務'''
    stop_appium(post_num)    # 先判斷端口是否被占用,如果被占用則關閉該端口號
    # 根據系統,啟動對應的服務
    cmd_dict = {
        'WIN':f' start /b appium -a 127.0.0.1 -p {post_num} --log xxx.log --local-timezone ',
        'MAC':f'appium -a 127.0.0.1 -p {post_num} --log xxx.log --local-timezone  & '
    }
    os.system(cmd_dict[pc.upper()])
    time.sleep(3)  # 等待啟動完成
    print('appium啟動成功')

 

 

 

 

先記錄自己辛苦百度之后寫出來的東西:

記錄一、長按某個元素的方法

首先導入 TouchAction 包:from appium.webdriver.common.touch_action import TouchAction

然后編寫長按函數:

wait里的時間單位是毫秒,長按N毫秒釋放

 

 

 

以下是總結的只是碎片:


                               手機操作方法.API應用


收起鍵盤:driver.hide_keyboard()

啟動Activity參數(包名,activity名字):driver.start_activity('com.example.android.apis', '.Foo')

獲取當前Activity:driver.current_activity

截取當前屏幕:driver.get_screenshot_as_file("文件名")

打開通知欄(打開下拉通知欄):driver.open_notifications()

檢查應用是否已經安裝(包名):driver.is_app_installed('com.example.android.apis')

安裝應用(路徑):driver.install_app('path/to/my.apk')

刪除應用(包名):driver.remove_app('com.example.android.apis')

模擬設備搖晃:driver.shake()

關閉應用:driver.close_app()

啟動應用:driver.launch_app()

將app置於后台A秒:driver.background_app(A)

重置(相當於卸載后重裝):driver.reset()

獲取應用的字符串:driver.app_strings

滑動屏幕(開始x,y坐標,滑動到的X,y坐標,持續時間ms):driver.swipe(startx=75, starty=500, endx=75, endy=0, duration=800)

雙指向內移動縮小屏幕:driver.pinch(element=el)

雙指往外移動來放大屏幕:driver.zoom(element=el)

從設備中拉出文件:driver.pull_file('Library/AddressBook/AddressBook.sqlitedb')

把文件放到設備中:

data = "some data for the file"

path = "/data/local/tmp/file.txt"

driver.push_file(path, data.encode('base64'))

長按並將A拖拽到B:driver.drag_and_drop(A,B)

將A滾動到B:driver.scroll(A,B)

滑動:driver.swipe()      driver.flick()(這個方法速度較快)      

 

 

 


                                          使用手機物理鍵


一句代碼:driver.keyevent()        括號里填入的是手機物理按鍵的數字代號

       driver.press_keycode()        括號里填入的是鍵盤按鍵的數字代號

手機物理鍵數字代碼
鍵盤按鍵數字代號


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM