Python Appium操作

Posted moying-wq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(fnetstat  -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(ftaskkill /F /PID {p1})  # 结束进程
            print(appium server已结束)
    elif pc.upper() == MAC:
        p = os.popen(flsof -i tcp:{post_num})
        p0 = p.read()
        if p0.strip() != ‘‘:
            p1 = int(p0.split(\\n)[1].split()[1])  # 获取进程号
            os.popen(fkill {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:fappium -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()        括号里填入的是键盘按键的数字代号

技术图片
手机物理键数字代码
技术图片
键盘按键数字代号


 

以上是关于Python Appium操作的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫编程思想(128):使用Appium抓取移动数据--启动Appium服务

Python爬虫编程思想(128):使用Appium抓取移动数据--启动Appium服务

APPIUM API整理(python)---操作类

Python Appium 滑动点击等操作

Appium+Python之PO模型(Page object Model)

Python Appium操作