day01
获取当前界面应用程序的包名 和界面名(activity名)
adb shell dumpsys window windows | grep mFocusedApp
//指定锤子手机
adb -s b419ac9e shell dumpsys window windows | grep mFocusedApp
//adb启动日历的主activity
adb -s b419ac9e shell am start -n com.android.calendar/com.android.calendar.AllInOneActivity
adb -s b419ac9e shell am start -n com.android.settings/.applications.autofill.AutofillPickerTrampolineActivity
功能介绍
一、基本操作api
1.1 启动其他app
driver.start_activity(包名,界面名)
1.2 获取包名和界面名
driver.current_package
driver.current_activity
1.3 关闭app和驱动对象
driver.close_app() #回到桌面,driver还在
driver.quit() #直接退出driver
1.4 安装和卸载app
driver.install_app(apk_path)
driver.remove_app("包名")
- 判断是否安装
driver.is_app_installed(app_id)//app_id就是包名
1.5 将应用置于后台
应用场景
银行类app在进入后台一段时间后,如果再回到前台页面需要重新输入密码,如果需要自动化测试这种功能
方法
#进入后台5秒,再回到前台
driver.background_app(5)
热启动:(不关闭电源的情况)从后台启动进入前台
冷启动:关机再开
UIAutomatorViewer
windows:android-sdk tools/bin/uiautomatorviewer.bat
获取页面元素的信息,方便后期定位
转存失败重新上传取消
元素定位
步骤:
打开uiautomotorviewer
打开手机或模拟器
通过ui工具获取元素的note detail信息
通过元素定位api进行定位
对元素进行相关操作
定位一个元素
类比selenium
driver.find_element_by_id(id_value)
driver.find_element_by_class_name(class_name_value)
driver.find_element_by_xpath(id_value)
定位一组元素
driver.find_elements_by_id(id_value)
driver.find_elements_by_class_name(class_name_value)
driver.find_elements_by_xpath(id_value)
注意点
NoSuchElementException
元素等待
元素不能及时出现原因:
网速
服务器错误
电脑配置
隐式等待
所有元素等待时间为同一个值
driver.implicitly_wait(5) #等待一定时间
显示等待
针对所有定位元素的时间设置不同的时间
wait = WebDriverWait(driver,5)
button = wait.until(find_element)
点击、输入、清空
点击
element.click()
输入 清空
element.send_keys()
element.clear()
输入中文
desire_caps[‘unicodeKeyboard’] = True
desire_caps[‘resetKeyboard’] = True
获取元素文本内容
element.text
获取元素位置和大小
element.location #获得字典 [x,y] int类型
element.size
获取元素的属性值
element.get_attribute(value) #value为元素的属性名
滑动和拖拽事件
driver.swipe(start_x,start_y,end_x,end_y,duration=None)
#持续时间越长,惯性越小
滑动时的误差现象(即惯性):cpu相关
scroll滑动事件
driver.drag_and_drop(origin_el,des_el)
#从一个元素滑动到另一个元素,没有惯性
driver.scroll(origin_el,des_el)
#从一个元素滑动到另一个元素,有惯性
4、高级手势
轻敲
1、创建touchAction对象
2、调用对象想执行的手势
3、通过perform()执行
#传入element或者坐标,count表示执行次数,多次点击
TouchAction(driver).tap(element=None,x=None,y=None,count = 1).perform()
wlan_button = driver.find_element_by_xpath(“”)
touch_action = TouchAction(driver)
touch_action = touch_action.tap(wlan_button)
#or touch_action = touch_action.tap(x = ,y = )
touch_action.perform()
按下和抬起
TouchAction(driver).press(el=None,x=None,y=None).perform()
el: 元素
x,y :坐标值
TouchAction(driver).press(“”).perform()
time.sleep(2)
TouchAction(driver).press(“”).release().perform()#释放
等待
模拟手指等待,比如按下等待5秒钟之后再抬起
TouchAction(driver).wait(ms=0).perfrom()
ms: 暂停的毫秒数
TouchAction(driver).press(“”).wait(2000).perform()#释放
长按
模拟手指对元素或者坐标的长按操作,比如按住菜单
TouchAction(driver).long_press(el=None,x=None,y=None,duration=1000).perform()
el: 元素
移动
move_to(x=None,y=None)
连个多个move_to完成画线
5、手机操作API
获取手机分辨率
driver.get_window_size()
截图
driver.get_screenshot_as_file(“路径”)
获取手机网络
driver.network_connection
返回数字 1:飞行模式 2:只开wifi 4:只开流量 6:网络全开
driver.set_network_connection(connection_type)
设置网络
发送键到设备
模拟返回键、home键
driver.press_keycode(keycode,metastate=None)
keycode可以google android keycode
操作通知栏
点击通知消息
driver.open_notifications()
关闭通知栏,可以模拟向上滑动,或者按返回键
————————————————
版权声明:本文为CSDN博主「fan_nlnl」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fan_nlnl/article/details/104993188
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!