zoukankan      html  css  js  c++  java
  • Appium进阶教程

    目录

    Monkey的使用

    adb shell monkey -p com.lqr.wechat -v 500 > monkey.log
    
    adb shell monkey -p com.lqr.wechat -vvv 5000 > monkey2.log
    
    adb shell monkey -p com.lqr.wechat -vvv 5000 --send=1556166765229 --throttle 500 > monkey3.log
    
    adb shell monkey -p com.lqr.wechat -vvv 5000 --send=1556166765229 --ignore-crashes > monkey4.log
    
    

    参数:

    • -p
    • -v
    • -s
    • --throttle
    • --ignore-crashes: 忽略崩溃
    • --ignore-timeouts: 忽略ANR
    • --ignore-security-exceptions: 忽略证书问题
    • --kill-process-after-error: Monkey出错后结束运行
    • --monitor-native-crashes: 监控本地崩溃

    可通过命令行指定

    • count=5000: 计划执行5000次
    • AllowPackage: 包名
    • Event percentages: 事件百分比, 可通过命令行修改
    • Switch: Activity(页面)跳转
    • Sending Touch: 发送动作指令
    • Injection Failed #注入(执行)指令失败, App无反应或不支持
    • CRASH: 崩溃

    指定事件百分比

    • –pct-touch:触摸事件(点击)
    • –pct-motion:动作事件(拖动)
    • –pct-trackball:轨迹球事件(移动)
    • –pct-nav:基本导航事件:上下左右操作
    • –pct-majornav:主导航事件: 确认,菜单,返回键
    • –pct-syskeys:系统按键事件: 如HOME键,BACK键,拨号键,挂断键,音量键等
    • –pct-appswitch:应用启动事件
    • –pct-anyevent: 任意事件

    手动停止Monkey

    adb shell 
    ps  | grep monkey   (查询进程号)
    kill 进程号
    

    Appium inspector的使用

    • 启动和配置
    • 定位和操作元素
    • 录制

    元素定位

    • 通过resource_id: find_element_by_id:
    • 通过content-desc: find_element_by__accessibility_id
    • 通过xpath: 结合属性/上下级节点/索引定位
    • 重复元素+索引定位: l = find_elements_by_... l[1].click()
    • 逐级定位: driver.find_element_by_id(...).find_element_by_class_name(...)

    使用By及元素定位器
    from appium.webdriver.common.mobileby import By

    driver.find_element(By.ID, "....")

    使用uiautomator的原始定位方式

    1.通过id定位

    driver.find_element_by_android_uiautomator('new UiSelector().resourceId(“id”)').click()
    
    
    1. 通过text定位
    # Text定位
    driver.find_element_by_android_uiautomator('new UiSelector().text("textstr")')
    # 文字包含
    driver.find_element_by_android_uiautomator('new UiSelector().textContains(textStr)')
    # 以哪个字符开始
    driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith(textStr)')
    
    
    1. 通过class属性定位
    driver.find_element_by_android_uiautomator('new UiSelector().className("class属性")')
    
    
    1. 多属性定位
    driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.TextView").text("Custom View")')
    
    

    可作为过滤条件的有:

    • UISelector.text
    • UISelector.textContains
    • UISelector.textStartsWith
    • UiSelector.resourceId
    • UISelector.className
    • UISelector.textMatches
    • UISelector.classNameMatches
    • UiSelector.fromParent
    • UiSelector.childSelector
    • UiSelector.resourceIdMatches
    • UiSelector.description
    • UiSelector.descriptionStartWith
    • UiSelector.descriptionMatches

    元素操作

    • click()
    • send_keys()
    • clear()
    • is_displayed()/is_enabled()/is_checked()
    • get_attribute(): 获取属性 文本/状态/是否可操作等
      • get_attribute("text")
      • get_attribute("resourceId")
      • get_attribute("className")
    • set_value(): 设置text值
    • text: 元素的文本
    • location: 获取元素坐标值
    • size: 获取元素大小

    练习

    noReset: True
    1. 打开微信应用 ,判断是否存在 登录按钮
    
    2. 如果已经登录,登录按钮不存在 ,就直接进入登录页,打印 通讯录的这些属性值, resourceid,text,className,enabled,clickable,selected,Displayed
    
    c = driver.find...()
    
    print(c.get_attribute("clickable"))
    print(c.is_enabled()/c.is_displayed()/c.is_selected())
    
    如果登录按钮存在 ,打印这个登录按钮的上面的属性值resourceid,text,className,enabled,clickable,selected,Displayed, 并点击登录按钮,
    	使用set_value())输入用户名密码
    	判断登录按钮是否可用,
    		可用的话打印可用,并点击登录,判断是否登录成功
    		不可用打印不可用
    3. 退出应用
    
    

    练习提示

    try:  # 尝试定位登录按钮
    	l = driver.find_element_by_id("")	
    except:  # 未定位到
    	print(“没有登录按钮”)
    	c = driver.find_....()    # 定位 通讯录 标签
    	print(c.get_attribute('resource-id')  # 打印各种属性
    	print(c.text)
    	print(c.get_attribute(“class”)
    	print(c.is_enabled())
    	....
    else:  # 如果没有异常(定位到了登录按钮)
    	print(l.get_attribute("resource-id")   # 打印登录按钮的各种属性
    	print(l.text)
    	print(l.get_attribute(“class”)
    	print(l.is_enabled())
    	...
    	l.click()  # 点击登录按钮
    	driver.find…().set_value("18010181267")  # 使用set_value输入文字
    	driver.find…().set_value("123456")  # 使用set_value输入密码
    	l2 = driver.find..()  # 定位 登录 按钮
    	if l2.is_enabled() is True:  # 判断 登录按钮 是否可用
    		print(“可用”)
    		l2.click()  # 点击登录按钮
    		try:   # 判断是否登录成功, 登录成功后会有 "通讯录" 这个标签
    			c = driver.find_....()   # 尝试定位通讯录这个标签
    		except:  # 定位不到打印失败
    			print(“登录失败”)
    		else:  # 没有异常(定位到) 打印成功
    			print(“登录成功”)
    	else:
    		print("不可用")  # 上面的l2登录按钮不可用打印不可用
    
    
    
    
    
    

    按键操作

    • drvier.keyevent()
    • driver.press_keycode()

    练习

    
    启动 微信,登录用户名和密码,并点击登录
     进入 “我” ,点击用户名,
    点击二维码名片,
    截图并保存到d:\screenshot\VCODE.png
    导入截图到手机/sdcard/images/这个路径下
    返回到微信聊天列表页,并将音量放大两个分贝
    点击菜单回到手机主屏
    退出
    
    

    屏幕操作

    • tap: 触控(点击指定坐标),支持多点触控
    • swipe: 滑动
    • flick: 快滑
    • pinch:
    • zoom:
    • get_screenshot_as_file: 截图

    获取屏幕宽度

    • width = driver.get_window_size()['width']
    • height = driver.get_window_size()['height']

    练习

    封装四个方法,
    向下滑动,
    向上滑动,
    向左滑动,
    向右滑动,
    
    

    练习2

    打开手机设置 
    滑动查找页面上含有“关于“文字的 元素
    如果找到了点击,如果没找到继续找,
    进入关于页面,查看手机的版本信息
    退出设置页面
    
    

    文件操作

    • driver.pull()
    • driver.push()

    app操作

    autoLaunch=False

    • driver.is_app_installed()
    • driver.install_app()
    • driver.remove_app()
    • driver.launch_app()
    • driver.start_activity()
    • driver.current_activity()
    • driver.background_app(3)
    • driver.close_app()

    网络状态

    • driver.network_connection

    查找已安装app(无apk包)Package/MainActiviy方法

    adb shell
    logcat | grep cmp=
    

    然后在设备上操作一次app

    练习

    1.连接appium server,不启动任何app ,(autoLaunch =False)
    2.启动微信的首页activity( launch_app() )
    3.打开通知栏,然后关闭通知栏(要先打开一个activity)  driver.press_keyevent(“4”)
    4.用start_activity()启动本地浏览器,判断当前相机activity是否正确(
    获取current_activity 对比当前的activity print driver.current_activity -  .Camera)
    5. 截屏screenshot.png 并保存到 d:	mp目录下
    6.把当前app放在后台运行5秒钟  driver.backGround_app—进入 入到app首页
    7.查看当前的网络状态,并且输出
    8. 判断微信app是否已安装,已安装卸载,未安装执行安装 driver.is_app_install(“com.sankuai.meituan”)
    Driver.remove_app(“包名”)
    Driver.install_app(“路径/.apk”)
    
  • 相关阅读:
    easyui使用datagrid时列名包含特殊字符导致表头与数据错位的问题
    解析:使用easyui的form提交表单,在IE下出现类似附件下载时提示是否保存的现象
    使用PreApplicationStartMethodAttribute
    Entity Framework使用Sqlite时的一些配置
    如何自己编写一个easyui插件续
    如何自己编写一个easyui插件
    启动报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    Tomcat启动报错:java.net.BindException: Cannot assign requested address: JVM_Bind
    Maven项目Eclipse启动时报错: java.lang.ClassNotFoundException: org.springframework.web.util.IntrospectorCleanupListener
    ORA-12519, TNS:no appropriate service handler found(数据库上当前的连接数目已经超过最大值)
  • 原文地址:https://www.cnblogs.com/superhin/p/11454796.html
Copyright © 2011-2022 走看看