目前app中存在越來越多的H5頁面了,對於一些做app自動化的測試來說,要求也越來越高,自動化不僅僅要支持原生頁面,也要可以H5中進行操作自動化,這一篇介紹如何查看頁面上是否存在H5頁面,這里首先要了解一個知識點webview是什么
webview是什么
webview是屬於android中的一個控件,也相當於一個容器,需要把H5的一些前端內容,通過這個容器去調用,顯示和渲染網頁
目前很多app中都實現app原生頁面(native)和webview頁面(H5),我們如何查看頁面上哪些存在webview和native呢?
查看webview和native
1、打開uiautomatorviewer定位工具,進行查看頁面上是否存在webview。下圖可以看到android.webkit.webview。

2、斷網情況下,進行訪問app,如果可以正常顯示頁面,說明為原生頁面,如果不能訪問,則為webview(H5)頁面
3、通過fiddler進行抓包查看,內容存在html則為webview(H5)頁面
那么我們在appium中如何查看呢?
4、通過contexts方法
def contexts(self): """ 返回當前會話中的上下文。 """ return self.execute(Command.CONTEXTS)['value']
執行腳本:
# coding:utf-8 from appium import webdriver import time desired_caps = { 'platformName': 'Android', # 測試版本 'deviceName': 'emulator-5554', # 設備名 'platformVersion': '5.1.1', # 系統版本 'appPackage': 'com.yipiao', #apk的包名 'appActivity': '.activity.LaunchActivity', # apk的launcherActivity "noReset": True, # 不清空數據 } driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) time.sleep(6) driver.find_element_by_xpath('//*[@text="下次再說"]').click() time.sleep(3) driver.find_element_by_xpath('//*[@text="我的"]').click() # 點擊產品意見 time.sleep(3) driver.find_element_by_xpath('//*[@text="產品意見"]').click() # 獲取全部上下文 cons = driver.contexts print(cons) # ['NATIVE_APP', 'WEBVIEW_com.yipiao']
上面返回的結果中可以看到頁面中存在NATIVE_APP,和webview_com.yipiao。其中native_app表示app原生頁面,然后webview_com.XXXX表示webview(H5)的頁面
切換webview
前面已經了解到如何查看頁面中是否存在webview,當我們想要操作webview上的元素時,必須要進入到webview中,那么如何進入webview呢?
可以通過 _switch_to.context() 方法進行切換
上面已經查詢到頁面上的內容,然后我們通過_switch_to.context()方法進行跳轉
# 跳轉webview driver._switch_to.context("WEBVIEW_com.yipiao") print(driver.context)
源碼:
# coding:utf-8 from appium import webdriver import time desired_caps = { 'platformName': 'Android', # 測試版本 'deviceName': 'emulator-5554', # 設備名 'platformVersion': '5.1.1', # 系統版本 'appPackage': 'com.yipiao', #apk的包名 'appActivity': '.activity.LaunchActivity', # apk的launcherActivity "noReset": True, # 不清空數據 } driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) time.sleep(6) driver.find_element_by_xpath('//*[@text="下次再說"]').click() # 點擊我的 time.sleep(3) driver.find_element_by_xpath('//*[@text="我的"]').click() # 點擊產品意見 time.sleep(3) driver.find_element_by_xpath('//*[@text="產品意見"]').click() # 獲取全部上下文 cons = driver.contexts print(cons) # 跳轉到webview中 driver._switch_to.context("WEBVIEW_com.yipiao") print(driver.context)
# ['NATIVE_APP', 'WEBVIEW_com.yipiao']
# WEBVIEW_com.yipiao
如果感覺安靜寫的對您有所幫助,點個關注,持續更新~~哪里有寫錯的地方,或者不懂的地方,可以下方留言,看到后第一時間回復~~
