appium入坑必备--万字详解基本操作,为不用手刷抖音打木桩_appium大麦

目录

基本元素属性

API基本函数方法

关闭app

启动app

重置app

后台运行app

安装与删除app

下拉通知栏

截图

分辨率

拖动元素

模拟动作

轻触、点击

滑动坐标

滑动解锁屏幕

缩小地图实例

键盘操作

Activity事件


基本元素属性

先来看看基本元素属性操作。

text属性 ele.text 获取元素的文本值

location属性 ele.location 获取元素的坐标

size属性 ele.size 获取元素的大小

tag_name属性 ele.tag_name 获取元素的标签名(元素class属性值)

from selenium import webdriver

desired_capas = {
  "deviceName": "emulator-5554",
  "platformName": "Android",
  "appPackage": "com.netease.cloudmusic",
  "appActivity": ".activity.MainActivity",
  "platformVersion": "7.1.2",
  "noReset": "True"
}
rt = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_capas)
ele = rt.find_element_by_xpath('//*[@text="每日推荐"]')

a = ele.text
b = ele.location
c = ele.size
d = ele.tag_name
print(f"text文本:{a}",f"ele坐标:{b}",f"ele大小:{c}",f"元素属性:{d}")

基本元素属性还有很多,这里只是列举几个常用的,并告诉用法,切莫误会。

API基本函数方法

接下来看看,常用的API函数方法:

  1. 关闭app:driver.close_app()

  2. 启动app:driver.launch_app()

  3. 重置应用(类似删除应用数据):driver.reset()

  4. 后台运行app:driver.background_app(s) s:后台运行时间,单位秒

  5. 检查app是否有安装:driver.is_app_installed(包名) 返还True/False

  6. 安装app:driver.install_app(app_path)

  7. 删除app:driver.remove_app(包名)

  8. 打系统通知栏:driver.open_notifications()

  9. 截取当前窗口的截图:driver.get_screenshot_as_file(‘d:/1.png’)

  10. 获取屏幕分辨率:driver.get_window_size()

  11. 拖动元素:driver.drag_and_drop(ele1,ele2)

关闭app

from selenium import webdriver

desired_capas = {
  "deviceName": "emulator-5554",
  "platformName": "Android",
  "appPackage": "com.netease.cloudmusic",
  "appActivity": ".activity.MainActivity",
  "platformVersion": "7.1.2",
  "noReset": "True"
}
rt = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_capas)

# 关闭应用
rt.close_app()

关闭应用操作是每一次必须的操作,主要用于释放内存,用模拟器的话不屑close跑完也会自动关闭,只不过比较慢,一套操作不流畅。

启动app

也叫重启APP或者重新打开app,依照上述的初始化操作。后续同上

from selenium import webdriver

desired_capas = {
  "deviceName": "emulator-5554",
  "platformName": "Android",
  "appPackage": "com.netease.cloudmusic",
  "appActivity": ".activity.MainActivity",
  "platformVersion": "7.1.2",
  "noReset": "True"
}
rt = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_capas)

# 关闭应用
rt.close_app()
# 再次开启app
rt.launch_app()

重置app

这步操作初始化操作就可以完成,只需要将False改为True,即可有一样的效果。

# 重置应用
rt.reset()

后台运行app

验证app挂后台有无影响手机其他软件正常运行或者异常占内存情况,亦或者自生能否正常的运行。时间S

from selenium import webdriver

desired_capas = {
  "deviceName": "emulator-5554",
  "platformName": "Android",
  "appPackage": "com.netease.cloudmusic",
  "appActivity": ".activity.MainActivity",
  "platformVersion": "7.1.2",
  "noReset": "True"
}
rt = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_capas)
# 后台运行
rt.background_app(100)

安装与删除app

这一步其实可以不用代码来运行,属实显的有点多余的感觉,不过也仅仅只是显得,还是有一定作用的。有时候会出现不一样的bug,图标在,但是跑不起来,等查包的时候结果发现其实没有这个包。

from time import sleep
from selenium import webdriver

desired_capas = {
  "deviceName": "emulator-5554",
  "platformName": "Android",
  "appPackage": "com.netease.cloudmusic",
  "appActivity": ".activity.MainActivity",
  "platformVersion": "7.1.2",
  "noReset": "True"
}
rt = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_capas)
# 关闭app
rt.close_app()
# 检查桌面其他app是否有安装
if rt.is_app_installed('net.csdn.csdnplus'):
    # 如果有则卸载
    rt.remove_app('net.csdn.csdnplus')
else:
    # 没有则安装
    rt.install_app('安装的路劲加包名')

下拉通知栏

这步操作嘛,了解就好!

# 下拉通知栏
rt.open_notifications()

截图

截图还是有必要的,毕竟有时候出bug了来不及截图,可以写一个逻辑判断进行截图,还是比较方便的。

from time import sleep
from selenium import webdriver

desired_capas = {
  "deviceName": "emulator-5554",
  "platformName": "Android",
  "appPackage": "com.netease.cloudmusic",
  "appActivity": ".activity.MainActivity",
  "platformVersion": "7.1.2",
  "noReset": "True"
}
rt = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_capas)
# 截图+保存路径
rt.get_screenshot_as_file('d:/www.png')

分辨率

别小看分辨率,本章后续会讲到分辨率的使用方法。非常实用的一个方法。

from time import sleep
from selenium import webdriver

desired_capas = {
  "deviceName": "emulator-5554",
  "platformName": "Android",
  "appPackage": "com.netease.cloudmusic",
  "appActivity": ".activity.MainActivity",
  "platformVersion": "7.1.2",
  "noReset": "True"
}
rt = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_capas)
# 获取分辨率
print('分辨率:',rt.get_window_size())

拖动元素

这个还是比较有意思的,其用法这里简单的举例,大家各自发挥脑洞尝试。这里举例就是将两个图标呼唤一下位置。

from selenium import webdriver

desired_capas = {
  "deviceName": "emulator-5554",
  "platformName": "Android",
  "appPackage": "com.netease.cloudmusic",
  "appActivity": ".activity.MainActivity",
  "platformVersion": "7.1.2",
  "noReset": "True"
}
rt = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_capas)
# 关闭app
rt.close_app()
# 拖动元素
ele1 = rt.find_element_by_xpath('//*[@text="CSDN"]')
ele2 = rt.find_element_by_xpath('//*[@text="百度地图"]')
rt.drag_and_drop(ele1,ele2)

模拟动作

导入TouchAction的包:TouchAction辅助类:连续性操作

from appium.webdriver.common.touch_action import TouchAction

TouchAction支持的方法

1. 短按 press(self, el=None, x=None, y=None)

2. 长按 long_press(self, el=None, x=None, y=None, duration=1000(ms))

3. 释放 release(self)

4. 移动到 move_to(self,el=None,x=None,y=None)

5. 点击 tap(self,el=None,x=None,y=None,count=1)

6. 等待 wait(self,ms=0)

7. 执行 perform(self)

轻触、点击

如果叫点击显的不是很合适,所以我们直接叫轻触,但是,在你无法定位到元素的时候也可以使用该方法。轻触最多五个点,以列表嵌套元组的方式。单位是ms,这里是0.5s的间隔,会在屏幕中出现两个小点。坐标是随意设置的。这里即使不退出app也是可以的!

from time import sleep
from selenium import webdriver

desired_capas = {
  "deviceName": "emulator-5554",
  "platformName": "Android",
  "appPackage": "com.netease.cloudmusic",
  "appActivity": ".activity.MainActivity",
  "platformVersion": "7.1.2",
  "noReset": "True"
}
rt = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_capas)
rt.close_app()
rt.tap([(100,20),(200,100)],500)

滑动坐标

这个就适合滑屏的app了,比如,抖音,快手,网易,但凡有滑屏的都可以使用这个方法。

rt.swipe(100,100,100,400,duration=1000)

这是一个坐标,从(100,100)到(100,400),时间间隔1s,这里的单位是ms所以是1000

以上两种不需要用到导包,接下来的就需要了

滑动解锁屏幕

滑动屏幕需要连续操作,所以使用该方法:move_to可以连续使用,release()释放,duration默认1000–1S

再此之前我们可以使得屏幕息屏,注意自己设置锁屏,或者自己用手机来试验也行,使用adb命令使得设备锁屏:adb shell input keyevent 6

from appium.webdriver.common.touch_action import TouchAction
import os
from selenium import webdriver

desired_capas = {
  "deviceName": "emulator-5554",
  "platformName": "Android",
  "appPackage": "com.netease.cloudmusic",
  "appActivity": ".activity.MainActivity",
  "platformVersion": "7.1.2",
  "noReset": "True"
}
rt = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_capas)
rt.close_app()
# 命令锁屏
i = 'adb shell input keyevent 6'
os.system(i)
# 初始化方法
action = TouchAction(rt)
# 滑动解锁
action.long_press(x=114,y=1200,duration=1000).move_to(x=777,y=111).release().perform()

这里我只设置了两个点,自己可以设置多个点进行测试。

缩小地图实例

先看一章图,我们需要根据这张图的点进行计算才能实现功能

乍一看,是不是很懵逼,为什么要看这张图,看完代码你就朦懂了 。此处用到多点触摸,需导入包:from appium.webdriver.common.touch_action import TouchAction

MultiTouchAction支持方法:

• 添加触摸操作到多点触摸 add(self, *touch_actions)

• 执行 perform(self

from selenium import webdriver
from appium.webdriver.common.multi_action import MultiAction
from appium.webdriver.common.touch_action import TouchAction

# 打开app
desired_capas = {
  "deviceName": "emulator-5554",
  "platformName": "Android",
  "appPackage": "com.baidu.BaiduMap",
  "appActivity": "com.baidu.baidumaps.MapsActivity",
  "platformVersion": "7.1.2",
  "noReset": "True"
}
rt = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_capas)
# 获取屏幕大小
size = rt.get_window_size()
x = size['width']
y = size['height']
# 从a划到b,从近滑倒远点
action = TouchAction(rt)
action.press(x=0.2*x,y=0.2*y).wait(1000).move_to(x=0.4*x,y=0.4*y).release()
# 从d滑倒c,从远点滑倒近点
action2 = TouchAction(rt)
action2.press(x=0.8*x,y=0.8*y).wait(1000).move_to(x=0.6*x,y=0.6*y).release()
# 实例化方法用于同时操作action跟action2
m_action = MultiAction(rt)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值