Appium+python自動化27-等待activity出現(android特有的wait_activity)
阿新 • • 發佈:2017-11-30
參考 ued 出現 urn nac try _id nts positive
前言
在啟動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
# 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自動化27-等待activity出現(android特有的wait_activity)