• 稳~😉

  • 大佬好!程哥

  • 如果需要连续执行多条adb shell命令,则可以采用命令adb shell "cmd1 && cmd2 && cmd3",如下:

    import subprocess

    cmd = 'adb shell "cd sdcard && cd tmp && pwd"'

    def adb_shell(cmd):
    p = subprocess.getstatusoutput(cmd)
    return p

    result = adb_shell(cmd)
    print(result)

    执行结果:
    (0, '/sdcard/tmp')

  • 请问这个是多设备并行run还是串行run的测试用例?

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