Python+appium+adb自动获取packagename和launchActivity,启动安卓手机内置浏览器

前言:

为什么要写这篇文章,最近在做自动化测试的时候,客户需求说要用安卓内部浏览器测试H5。由于之前没有做过这种类型的测试,所以百度上和一些技术贴看上了下,都是千篇一律的用com.android.browser包来启动,但是经过实验,现在市面上很多机型内置浏览器的包名都已经有自己的格式了,例如vivo的包名就是com.vivo.browser,用网上的方法根本启动不了。所以才有了现在这篇文章。

首先说下大致的思路,我们获取包名和activity只需要获取launActivity就可以,再通过字符串截取,把两者分开。获取launActivity的难点在于首先要启动浏览器,所以我们只需要添加一个方法,通过"adb shell am start -a android.intent.action.VIEW -d http://www.baidu.com"这个命令启动浏览器,然后用"adb shell dumpsys window w |findstr \/ |findstr name=",来获取activity。这就是一个大致的思路,实现代码如下:

1、第一步还是最基本的设置

def get_desired_capabilities():
    desired_caps = {
        'platformName': 'Android',
        'platformVersion': '7.1.1',
        'deviceName': 'Udid',
        'udid': 'Udid',
        'appPackage': 'browserPakcage',
        'appActivity': 'activity',
        'appWaitPackage': 'browserPakcage',
        # 若没有设置 app,appium 将不会重复安装app
        # 'app': "%app_path%",
        # 若设置为False, appium 不自动拉起应用
        # 'autoLaunch': False,
        'automationName': 'Uiautomator2',
        'newCommandTimeout': 4800,
        'unicodeKeyboard': True,
        'WebView.setWebContentsDebuggingEnabled':True,
        'recreateChromeDriverSessions':True,
        'noReset': True,
        'recreateChromeDriverSessions': True,
        # 设置chromedriver路径,若不设置,使用appium默认版本driver
        'chromedriverExecutable': '/tmp/chromedriver',
        'appiumVersion': 1080 #1.8.0
    }

这是最基本的设置就不用过多的赘述了,接下来进行第二步

2、定义一个函数,用于拿到手机的串号

    def shell(self, command):
        serial = self.driver.capabilities.get('udid')
        command = "adb -s %s shell %s" % (serial, command)
        result = os.popen(command).read()

3、接下来我们是最繁琐的一步了,代码已经撸下来了,具体含义也已经备注清楚了

    def findActivity(self):
        ​
        command = "adb -s %s shell %s" % (
        self.serial, "am start -a android.intent.action.VIEW -d http://www.baidu.com")
        # 通过adb命令启动浏览器
        os.popen(command).read()
        time.sleep(3)
        # 等待很重要,这里加个等待,避免启动了别的软件拿到的就是其他软件的activity了
        command1 = "adb -s %s shell %s" % (self.serial, "dumpsys window w |findstr \/ |findstr name=")
        # 根据adb命令拿到刚刚启动的浏览器的activity
        result1 = os.popen(command1).read()
        activityLine = result1.split('\n')[0]
        # 把刚刚拿到的activity放进数据
        activity = activityLine[activityLine.find('name=') + 5: -2]
        # 取到想要的activity的name
        browserPakcage = activity[0:activity.find('/')]
        # 取到内置浏览器的启动的包名
        activity = activity[activity.find('/') + 1:]
        print ("package: %s" % browserPakcage)
        print ("activity: %s" % activity)
        return browserPakcage, activity

4、包名和activity都拿到了接下来就是一些基本的设置了,把刚刚获取的内容重新赋值

    def setUp(self):

        desired_caps = desired_capabilities.get_desired_capabilities()
        browserPakcage, activity = self.findActivity()
        desired_caps["appPackage"] = browserPakcage
        desired_caps["appActivity"] = activity
        desired_caps["appPackage"] = browserPakcage

        uri = desired_capabilities.get_uri()
        self.automationName = desired_caps.get('automationName')
        self.driver = webdriver.Remote(uri, desired_caps

5、现在就可以开始写要测试的内容了,代码就不贴出来了

    def run(self): 
        
        #执行的步骤
        #执行的步骤
        #执行的步骤
        #执行的步骤
        #执行的步骤

6、启动了程序当然要关闭一下

    def tearDown(self):
        self.driver.quit()

7、最后就开始执行了

if __name__ == '__main__':
    mqc = MqcTest()
    try:
        
        mqc.setUp()
        mqc.run()
    except Exception, e:
        print("STEP : 用例执行失败")
        print("ASSERT : false, program error")
        traceback.print_exc()
    finally:
        mqc.tearDown()

至此,整个过程就结束了,是不是非常简单。同学如果有什么不明白的地方可以在下方留言。

原创不易,如果这篇文章对你有所帮助,请点个赞~

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值