Appium+python自动化27-android特有的wait_activity

前言
在启动app的时候,如果直接做下一步点击操作,经常会报错,于是我们会在启动完成的时候加sleep。
那么问题来了,这个sleep时间到底设置多少合适呢?设置长了,就浪费时间,设置短了,就会找不到元素报错了。
这个时候我们可以用wait_activity的语法,等到你想点击的页面activity出现了,再点击,可以有效的节省时间。

一、wait_activity

1.查看源码

```
def wait_activity(self, activity, timeout, interval=1):
    """Wait for an activity: block until target activity presents
    or time out.
    
    This is an Android-only method.

:Agrs:
     - activity - target activity
     - timeout - max wait time, in seconds
     - interval - sleep interval between retries, in seconds
    """
    try:
        WebDriverWait(self, timeout, interval).until(
            lambda d: d.current_activity == activity)
        return True
    except TimeoutException:
        return False
```

2.解释说明:

```
wait_activity(self, activity, timeout, interval=1):

等待指定的activity出现直到超时,interval为扫描间隔1秒

即每隔几秒获取一次当前的activity
    
    android特有的

返回的True 或 False

:Agrs:

- activity - 需等待的目标 activity

- timeout - 最大超时时间,单位是s

- interval - 循环查询时间

用法:driver.wait_activity('.activity.xxx’,5,2)
```

二、 获取current_activity

1.打开app后,先sleep10秒,等app完全启动完成进入主页面,然后获取当前界面的activity

```python
# coding:utf-8
from appium import webdriver
from time import sleep
desired_caps = {
                'platformName': 'Android',
                'deviceName': '127.0.0.1:62001',
                'platformVersion': '4.4.2',
                'appPackage': 'com.baidu.yuedu',
                'appActivity': 'com.baidu.yuedu.splash.SplashActivity'
                }
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

sleep(10)
# 获取当前界面activity
ac = driver.current_activity
print(ac)
```
2.运行结果:

三、 等待activity

1.用sleep太浪费时间了,并且不知道什么时候能启动完成,所以尽量不用sleep

2.上一步已经获取当主页面的activity了,那就可以用wait_activity等它出现了,再做下一步的点击操作

3.参考代码
```
# coding:utf-8
from appium import webdriver
from time import sleep
desired_caps = {
                'platformName': 'Android',
                'deviceName': '127.0.0.1:62001',
                'platformVersion': '4.4.2',
                'appPackage': 'com.baidu.yuedu',
                'appActivity': 'com.baidu.yuedu.splash.SplashActivity'
                }
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

# sleep(10)  # 不用sleep

# 获取当前界面activity
ac = driver.current_activity
print(ac)

# 等主页面activity出现,30秒内
driver.wait_activity(".base.ui.MainActivity", 30)

# 点知道了
driver.find_element_by_id("com.baidu.yuedu:id/positive").click()

```

《appium+python自动化》百度阅读上同步,点左下角“阅读原文”可以直接购买

Appium交流群:512200893

(0)

相关推荐

  • 用 Python 实现定时自动化收取蚂蚁森林能量

    用 Python 实现定时自动化收取蚂蚁森林能量

  • 2021-02-28

    Android中通过广播方式调起第三方App进入全屏 今天紧急的跟进一个百度视频App无法调起百度贴吧App的问题,当然,这个是只发现是在4.x的android系统下发生,在2.x版本下,一切正常,( ...

  • Appium+python自动化9-SDK Manager

    前言 SDK Manager到有哪些东西是必须安装的呢? 一.SDK Manager 1.双击打开SDK Manager界面 2.Tools里面前三个是必须下载的 --Android SDK Tool ...

  • Appium+python自动化10-AVD 模拟器

    前言 有些小伙伴没android手机,这时候可以在电脑上开个模拟器玩玩 一.模拟器配置 1.双击启动AVD Manager,进入配置界面 2.点Create按钮创建 3.配置模拟器基本信息 --AVD ...

  • Appium+python自动化11-adb必知必会

    前言 学android测试,adb是必学的,有几个常用的指令需要熟练掌握 一.检查设备 1.如何检查手机(或模拟器)是连上电脑的,在cmd输入: >adb devices 2.一定要看到上图红色 ...

  • Appium+python自动化12-appium元素定位

    前言 appium定位app上的元素,可以通过id,name.class这些属性定位到 一.id定位 1.appium的id属性也就是通过UI Automator工具查看的resource-id属性 ...

  • Appium+python自动化13-native和webview切换

    前言 现在大部分app都是混合式的native+webview,对应native上的元素通过uiautomatorviewer很容易定位到,webview上的元素就无法识别了. (手机上要先装个百度阅 ...

  • Appium+python自动化14-查看webview上元素(DevTools)

    前言 app上webview的页面实际上是启用的chrome浏览器的内核加载的,如何把手机的网页加载到电脑上,电脑的chrome浏览器上有个开发模式,是可以方便调试的. 一.环境准备 1.手机上装一个 ...

  • Appium+python自动化15-Mac上环境搭建

    前言 mac上搭建appium+python的环境还是有点复杂的,需要准备的软件 1.nodejs 2.npm 3.cnpm 4.appium 5.pip 6.Appium-Python-Client ...

  • Appium+python自动化16-启动ios上Safari浏览器

    前言 在mac上搭建appium踩了不少坑,先是版本低了,启动后无限重启模拟器.后来全部升级最新版本,就稳稳的了.本篇介绍如何用appium启动ios上的safari浏览器,然后可以用手机上浏览器做w ...

  • Appium+python自动化17-启动iOS模拟器APP源码案例

    前言 上一篇已经可以启动iOS模拟器上的safari浏览器了,启动app比启动浏览器要复杂一点,本篇以github上的源码为案例详细介绍如何启动iOS模拟器的app. 一.clone源码 1.gith ...