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()        括号里填入的是键盘按键的数字代号

手机物理键数字代码
键盘按键数字代号


猜你喜欢

转载自www.cnblogs.com/moying-wq/p/10836040.html
今日推荐