新手区 appium 设置启动 app activity

April · 2016年03月17日 · 最后由 April 回复于 2016年03月18日 · 2825 次阅读

在测试用例的时候,都是从进入 app 的那个页面开始,然后需要通过点击跳到我想测试的页面

比如说我想执行用例要在我的账户页面去完成,我现在就是需要点击我的账户然后到达目的界面。这只是一个简单的例子,我也可以在用例中直接加入点击我的账户这个步骤,可是在复杂的 app 中这样的用例不是很累赘吗?
我打算把 appactivity 这个参数作为用例的一部分传进来,根据不同用例所要求的不同 activity 来启动 app 直接到达我要的界面,可是
我用以下代码获取我 app 中所有界面的 activity 名字都是一样的:

#获取设备上当前应用的包名与activity    
def get_focused_package_and_activity():
    pattern = re.compile(r"[a-zA-Z0-9\.]+/.[a-zA-Z0-9\.]+")
    out = shell("dumpsys window w | %s \/ | %s name=" %(find_util, find_util)).stdout.read()

    return pattern.findall(out)[0]

请问我这个想法可以实现吗?
如果可以,像 app 里面基本都是一个 activity 的要怎么做啊

共收到 6 条回复 时间 点赞

你应该先确认进入 我的账户 这个动作实际是否切换了 activity ,以及它的 activity 是什么。可以通过反编后查看 AndroidMainfest.xml 看到,当然有源码更好。

#1 楼 @chenhengjie123 我用以上的代码能到查到当前运行界面的 activity 名称,我这两个界面的 activity 是一样的。这个代码也是在这里面某位高手共享的。至于你说的反编译,是直接版编译这个 app 的 apk 文件吗?
那如果这两个 activity 是不同的,这种想法在 appium 是可以实现的吗?

可以使用一下 desired_capabilities 中的"intentAction" 和 "optionalIntentArguments",以 UC 浏览器为例子,设置 appium 的启动参数时,给"intentAction" 和 "optionalIntentArguments"赋下面值,启动浏览器后直接打开的是百度搜索刘德华的结果页了,可以试试
intent_action = 'android.intent.action.VIEW'
intent_arguments = '-d https://m.baidu.com/from=2001a/s?word=%E5%88%98%E5%BE%B7%E5%8D%8E'

1、基于 Uiautomator 提供的 .getCurrentActivity() 方法获取的当前 Activity 并不准确, 如何获取当前页面的 Activity 名称?
2、有可能整个 App 只有一个 Activity ,关于 Android,用多个 activity,还是单 activity 配合 fragment?
3、Appium 本来就有.start_activity方法,是用三楼说的 intent 实现的,不是所有 Activity 都可以用这个方法打开
4、Android 测试中获取包名、Activity 的方法总结

没想到有什么万能的方法可以在各种情况下直接跳到想测试的页面

#4 楼 @sanlengjingvv 非常感谢~~太棒了
你说的第一点里面我不是用的你说的那个方法,而是

#获取设备上当前应用的包名与activity    
def get_focused_package_and_activity():
    pattern = re.compile(r"[a-zA-Z0-9\.]+/.[a-zA-Z0-9\.]+")
    out = shell("dumpsys window w | %s \/ | %s name=" %(find_util, find_util)).stdout.read()

    return pattern.findall(out)[0]

如果说整个 app 只有一个 activity 那这种是不是不可以实现啦?

淽沐 [求助] webview 页面调起 native 控件时不生效 中提及了此贴 07月28日 10:52
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册