不用没条 case 都重启 app 吧,可以封装一个通用的方法,执行完 case 返回到首页或特定页面,放在 AfterMethod 里面,而如果要处理执行 case 崩溃的问题,可以再封装一个方法,先判断当前 app 是否处于前台状态,不在的话,再重启 app,也放在 AfterMethod 中调用
看了下,不知道哪个地方需要注释呢?这个不涉及到主线程和子线程的问题,所以不需要 stop 子线程啥的,这个代码两个线程执行完毕会自动停掉了
不是,多线程的执行不是我们想的那样等一个执行完毕才执行另一个,启动执行的时间是随机的,但从感官上基本是同时执行
如果需要带参传入 test_meizu16_app_start 或 test_vivo_X9_app_start,则用 args 带入即可
t1 = threading.Thread(target=thread_mulitple_devices.test_meizu16_app_start, args=('882QADT9UWTBW',), name='meizu16')
t2 = threading.Thread(target=thread_mulitple_devices.test_vivo_X9_app_start, args=('e9d3a867',), name='vivo X9')
重建工程,已解决
还有一个办法,就是安装 u2 的时候,执行adb shell dumpsys activity | grep "Run #"
不断拿当前页面的 activity,如果有弹窗了,肯定是一个 grantPermisson 相关的 activity,这时候,根据不同型号的手机,点坐标好了,也可以把安装弹窗给点掉。
我这个是基于已经手动安装了 u2 环境的,想要自动安装 u2 的 apk 的话,可能得另外想办法了。比如用 watchdog 等,也是一个 apk
把线程抽出成一个类,然后直接调用,一直让线程跑着,直到最后的 case 跑完,再停掉线程。
手机没有反应是什么意思?执行安装程序了么?
# 等待元素出现,默认等待10s
def wait_for_element_visible(self, element, timeout=10):
# return bool
return self.find_element(element).wait(timeout=timeout)
直接封装一个等待元素的方法,可以判断元素是否出现
window 的我没试过呢,要不把得到的 adb 结果放在 Python 中处理咯?
之前试过了-g 也并不能安装成功,弹窗不点掉的话,最后依然会失败 [INSTALL_FAILED_USER_RESTRICTED] 我的手机:meizu16
如果启动 app 后,弹出了系统弹窗,如授权存储权限等,可以改写 usb_install() 如下:
def usb_install(self):
print("Begin to install apk...\n")
while True:
# # 如果apk安装成功,则退出线程
# if self.is_apk_has_installed('com.xxx'):
# # print("The apk has been installed~")
# break
# 如果app启动成功,并已经点掉了类似于获取存储权限等的弹窗,则退出线程
if self.is_activity_started('com.xxx'):
print("The app starts success~")
break
# 点掉弹窗"允许"、"确认"、"继续安装"等
try:
driver(text="允许").click()
except:
pass
try:
driver(text="确认").click()
except:
pass
try:
driver(text="继续安装").click()
except:
pass
try:
driver(text="安装").click()
except:
pass
为了提高点击效率,可以用 click_exists(timeout=1.0),代码如下:
def usb_install(self):
print("Begin to install apk...\n")
while True:
# # 如果apk安装成功,则退出
# if self.is_apk_has_installed('com.xxx'):
# # print("The apk has been installed~")
# break
# # 如果app启动成功,并点掉类似于存储权限的弹窗,则退出
# if self.is_activity_started('com.xxx'):
# print("The app starts success~")
# break
# 点掉弹窗"允许"、"确认"、"继续安装"等
try:
driver(text="允许").click_exists(timeout=1.0)
except:
pass
try:
driver(text="确认").click_exists(timeout=1.0)
except:
pass
try:
driver(text="继续安装").click_exists(timeout=1.0)
except:
pass
try:
driver(text="安装").click_exists(timeout=1.0)
except:
pass
试试通过点击指定坐标呢?