本篇转自博客:上海-悠悠

前言
在启动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()

```

最新文章

  1. 关于SAP日期操作的几个函数
  2. iOS-iOS 获取蓝色文件夹图片
  3. ubuntu 挂载windows共享目录的方法
  4. mongodb 2.6 window 安装启动服务
  5. 模拟iOS系统原生导航条隐藏或显示动画
  6. Ubuntu 14.04 安装flash插件
  7. ruby编程语言-学习笔记2(第4章 表达式和操作符)
  8. Linux多任务编程——进程
  9. Ant学习总结1
  10. sysctl -p 报错问题的解决方法
  11. Python IDLE快捷键一览
  12. PHP使用ueditor上传配置
  13. sync_binlog innodb_flush_log_at_trx_commit 浅析
  14. 读论文系列:Object Detection SPP-net
  15. Ibatis和Hibernate的比较
  16. sql语句常用功能(null值转换为0)
  17. 全面深入介绍C++字符串:string类
  18. python自动化之爬虫原理及简单案例
  19. C++ sort函数用法 C中的qsort
  20. Twitter OA prepare: even sum pairs

热门文章

  1. 软件工程项目组Z.XML会议记录 2013/11/27
  2. MongoDB Linux下的安装和启动
  3. awk,rsync,重启,maxdepth一层目录,登录,开机自启动
  4. mysql yearweek修改开始日期
  5. ai学习记录
  6. AGC017C Snuke and Spells(巧妙的线段覆盖模型)
  7. BZOJ1057 [ZJOI2007]棋盘制作 【最大同色矩形】
  8. 防恶意解析,禁止用IP访问网站的Apache设置
  9. POI2007 MEG-Megalopolis [树状数组]
  10. offset--BUG