day01

  1. 获取当前界面应用程序的包名 和界面名(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 协议 ,转载请注明出处!