• 不用没条 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
    
  • 试试通过点击指定坐标呢?