python-App自动化测试框架——uiautomator2之元素操作方法(三)

目录

包操作

屏幕滑动补充

shell命令执行

通过元素的instances定位元素

等待操作


见:python-App自动化测试框架——uiautomator2之元素操作方法(一)

       python-App自动化测试框架——uiautomator2之元素操作方法(二)

       python-App自动化测试框架——uiautomator2之UI元素定位和操作

包操作

1、获取当前应用的包名和activity名

d.app_current()

python-App自动化测试框架——uiautomator2之元素操作方法(三)_第1张图片

2、启动应用前停止此应用,添加stop=True参数,运行完成后自动关闭

d.app_start("com.sigma_rt.totalcontrol", stop=True)

3、停止应用,此方法会丢失应用数据

d.app_stop("com.sigma_rt.totalcontrol")

4、停止所有应用

d.app_stop_all()

5、停止所有应用,除了某些应用

d.app_stop_all(excludes=['com.sigma_rt.totalcontrol'])

6、列出所有运行中的应用

d.app_list_running()

7、列出已安装的所有应用包名

d.app_list()

可以使用这个方法判断是否安装了需要安装的包,如果没有安装或者已经安装则可以做对应的操作,如判断是否安装了包名为com.kedacom.flutter.smartsafety_hybrid_wulumuqi的包,如果没有则进行安装

import uiautomator2 as u

d = u.connect('192.168.40.36:5556')

apkname = 'com.kedacom.flutter.smartsafety_hybrid_wulumuqi'
apkpath = ''

if apkname in d.app_list():
    print('已安装')
else:
    d.app_install(apkpath)

8、判断app是否启动

两种方法:

通过调用app_wait(),返回运行的pid来判断:等待应用运行, 返回pid(int),如果没有进程则返回 0,app_wait()中还可以添加参数(front=True等待应用前台运行;timeout=10设置超时间,默认为20s)

import uiautomator2 as u

d = u.connect('192.168.40.36:5556')

apk = 'com.tblenovo.soundrecorder'

pid = d.app_wait(apk) 
print(pid)

方法二:通过返回运行中的应用包名判断

import uiautomator2 as u

d = u.connect('192.168.40.36:5556')
apk = 'com.tblenovo.soundrecorder'

if apk in d.app_list_running():
    print('运行中')
else:
    print('停止运行')

屏幕滑动补充

整个屏幕滑动,可以设置滑动的距离占屏幕宽度比例,如向上滑动屏幕比例的80%

d.swipe_ext("up", scale=0.8)

shell命令执行

获取输出结果和exitCode(exitCode结果为0表示执行成功)

output, exit_code = d.shell("ps -A", timeout=60)
print(output)
print(exit_code)

仅获取执行结果内容等价于

output = d.shell("ps -A").output

仅获取执行的exitCode值

exit_code = d.shell("ps -A").exit_code

通过元素的instances定位元素

1、获取元素的数量

view_count = d(className="android.view.View").count
print(view_count)

print(len(d(clickable ="true")))   # 通过打印长度,获取可点击的元素个数
print(d(descriptionContains ="火灾").count)   # 通过count()方法,获得包含火灾关键字的元素数量

2、如一个界面中有多个View元素,可以通过下面的方法定位对应的View元素,通过索引获取

d(className="android.view.View")[0]   # 方法1
d(className="android.view.View", instance=0)   # 方法2

3、通过xpath().get()方法下的info获得指定元素的信息

d.xpath('//*[@content-desc="你好"]').get().info

等待操作

1、等待元素出现

# 返回对象,如果没有则返回None,最长等10s(默认),见:https://blog.csdn.net/JBY2020/article/details/120141368
d.xpath('//*[@content-desc="你好"]').wait()

#  返回布尔值,见:https://blog.csdn.net/JBY2020/article/details/120118234
d.xpath('//*[@content-desc="你好"]').exists  

2、设置等待——默认控件等待时间

d.settings['wait_timeout'] = 20.0    # 方法1
d.implicitly_wait(20.0)   # 方法2

3、设置等待——点击的等待延时

d.click_post_delay = 1.5  # 已被弃用的方法

d.settings['operation_delay'] = (.5, 1)

4、配置accessibility服务的最大空闲时间,超时将自动释放。默认为3分钟。(若两个步骤需要等待较长时间,而且不想下次发送指令时重启UiAutomator2,则可以将此时间加大)

d.set_new_command_timeout(200)   # 参数为整数,单位为s

你可能感兴趣的:(自动化测试,app自动化,python,自动化,开发语言)