appium api 用户操作 用法

一、用法

  1. 获取 driver 属性
  2. 获取元素属性
  3. 用户操作
  4. 触屏操作
  5. swipe滑动
  6. start_activity进入页面 
  7. 放大缩小
  8. 按键操作
  9. Toast
  10. 其他操作

(1)获取 driver 属性

  1. current_package, 包名。    aapt,元素定位
  2. current_activity, 获取当前页面,     后面切换有用
  3. context, 上下文。web窗口切换。h5测试,获取上下文
    driver.switch_to_context
  4. contexts, 所有的上下文。      winodw_handlers
  5. page_source , 获取页面源代码
  6. capabilities
  7. device_time,  设备时间
  8. location, 定位

(2)获取元素属性

  • el.rect   获取元素宽度,高度,x,y

  • text

  • el.get_attribute() 

(3)用户操作

  • el.click()

  • el.send_keys() 

(4)触屏操作(全部封装在TouchAction这个类里面)

from appium.webdriver.common.touch_action import TouchAction

xpath_my = '//*[@resource-id="com.lemon.lemonban:id/navigation_my"]/android.widget.ImageView[1]'
el = driver.find_element('xpath', xpath_my)
action = TouchAction(driver)
action.tap(el).perform()
  •  tap,点击,按下去然后松开, 相当于全局的click,适合封装在basepage中
  • move_to, 移动
  • press, 按下去不松开
  • long_press, 长按不松开
  • release, 松开
  • wait, 等待
  • flick, 划一下就松开(用得不多)

(5)swipe 滑动 (单指操作)

from appium.webdriver import Remote

caps = {
    "deviceName": "emulator-5554",
    "platformName": "Android",
    "app": r"D:\Future-release-2018.apk",
    "newCommandTimeout": 1200
}

# Remote 类是集成自 selenium webdriver类
driver = Remote(command_executor='http://127.0.0.1:4446/wd/hub',
                desired_capabilities=caps
                )

# 方法1:直接输入对应的坐标点
# 存在的问题:不稳定。换一个大屏手机可能就失效了
driver.swipe(600, 600, 100, 600)

# 方法2:可以使用不同的分辨率的手机,都可以通用的让滑动生效
# 思路,1,获取手机的屏幕宽度和高度width,height
# 从右边往左边滑
# 2, driver.swipe(width * 0.9, height * 0.5, width * 0.1, height * 0.5 )
# {'width': 900, 'height': 1600, 'x': 0, 'y': 0}
# rect = driver.get_window_rect()
# width = rect['width']
# height = rect['height']


# 从左边滑动到右边
driver.swipe(width * 0.1, height * 0.5, width * 0.9, height * 0.5 )

# 从上面滑动到下面, 下拉刷新操作
driver.swipe(width * 0.5, height * 0.1, width * 0.5, height * 0.9 )

# 从下面滑动到上面,上拉刷新,懒加载
driver.swipe(width * 0.5, height * 0.9, width * 0.5, height * 0.1 )

 每次都要传四个参数,很麻烦 ,封装一下

 

再简化一下,在width方法和height方法上面添加@property, 这个是用来干嘛的?这个表示会把这个方法转化成属性。

 注意:不难发现,其实swipe还有一个参数 duration,这个是用干嘛的? 数值越大,滑动的速度越慢,数值越小,滑动的速度越快,这个其实是控制滑动的速度,duration=1000,就是1秒钟滑到指定位置。

!!! 如果滑动速度过快,app就容易卡死,所以正常让duration参数设置的不要太小,也就是不要让他滑动的太快,正常设置duration=1000可以了。

(6)start_activity进入页面 

作用:这个是啥意思呢?你可以直接进入某个界面,不需要一步一步去点击,但是呢,一定要确保这个界面是可以进入的,因为有些界面需要登录 或者需要某个权限才能进入。

  1. 什么时候才用?
    答: 如果需要测试某个单独的页面,但是进入这个页面有很长的路径,则会严重影响效率, 而且路径过长,会让测试程序不稳定。 start_activitykeyi 可以快速进入指定界面,只需要指定activity的名称。
  2. 那么问题来了,怎么获取当前页面的名称呢?
    # 获取当前页面的名称
    adb shell dumpsys activity | find "mResumedActivity"
    
    ​
  3. 好处是什么?
    答:尽可能避免不必要的流程,提升我们UI自动化测试的稳定性,也尽量避免因多次定位元素导致的出错。
  4. 怎么使用?
# 需要填写两个参数,1.需要跳转的包名,2.进入哪个页面。
driver.satrt_activity('com.lemon.lemonban', '.activity.LoginActActivity')

     5. 可以从appA跳转到另外一个app页面,多个app之间的跳转(只需要把包名换成其他的app的包名,activity改成其他app的页面名称就能实现多个app之间的跳转)。

     6. 某一个元素移动到另外一个元素上面怎么操作。

def swipe_element(self, el1,el2, duration=1000):
    "一个元素移动到另外一个元素上面"
    action = TouchAction(self)
    action.press(el=el1).wait(ms=duration).move_to(el2).release()
    action.perform()
    return self
    

 

 

(7)放大缩小(多指操作)

from appium.webdriver.common.multi_action import MultiAction
# 1. TouchAction 一个手指的触控操作
# 2. MultiAction 多个手指的触控操作
# MultiAction 由多个 TouchAction 组成

# 放大
# 思路,先初始化两个 TouchAction, a1, a2
# 1, a1 先按下屏幕最中心的点,a2 按下屏幕最中心的点
# 2, a1 move_to(y=y_point)          height * 0.1
# 3, a2 move_to(y=y_point)          height * 0.9

# 缩小
# 思路,先初始化两个 TouchAction, a1, a2
# 1, a1 按下屏幕 height * 0.1 ,   a2 height * 0.9
# 2, a1 move_to(y=y_point)          height * 0.5
# 3, a2 move_to(y=y_point)          height * 0.5

     

 

缩小改变一下x参数就ok了。

(8)按键操作  

具体可bd搜索Appium---- Android的KeyCode键值

(9)toast

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值