1. 程式人生 > 實用技巧 >7.app中存在網頁簡稱混合Hybrid運用

7.app中存在網頁簡稱混合Hybrid運用

瞭解webview

混合(Hybrid)應用

- 一部分是原生介面和程式碼,而另一部分是內嵌網頁

- 比如微信、支付寶

- 內嵌了一個瀏覽器核心,由瀏覽器核心實現的

- 可以借用元素定位工具區分是原生還是混合應用,原生應用滑鼠選不中,混合應用可以,原生應用斷網也可以開啟

- 混合中的內嵌的展示網頁內容的模組稱為webview

- 負責解析app內嵌網頁的部分是系統內建的webview

- 安卓webview本質是chrome瀏覽器核心,因此
版本和chrome一致選擇驅動時,參考同版本chr
omdriver,如果不知道手機webdriver的版本號
,程式可以先不用chromdriver,報錯資訊會知
道選擇那個版本的chromedriver

原生應用與混合應用的區別

混合應用原生和網頁屬於不同的context,需要切換上下文物件

檢視當前所有contexts

driver.contexts
#['NATIVE_APP', 'WEBVIEW_com.example.haiwen.myhybirdapp', 'WEBVIEW_com.tencent.mobileqq:mini']

NATIVE_APP屬於原生,WEBVIEW_*屬於網頁

檢視當前所在context

print(driver.current_context) #NATIVE_APP

切換到網頁context,轉換好了就可以使用網頁的定位方式啦

driver.switch_to.context(網頁context名)

#切入到webview操作-才能以網頁形式定位元素
driver.switch_to.context('WEBVIEW_com.example.haiwen.myhybirdapp')

如下例子是檢視豆瓣電影的評分

from appium import webdriver
#app混合應用
# 準備自動化配置資訊
desired_caps = {
    # 移動裝置平臺
    'platformName': 'Android',
    # 平臺OS版本號,寫整數位即可
    'plathformVersion': '6',
    # 裝置的名稱--值可以隨便寫
    'deviceName': 'test0106',
    # 提供被測app的資訊-包名,入口資訊:
    # 1.開啟被測app,2.命令列輸入以下資訊
    # adb shell dumpsys activity recents | findstr intent={
    'appPackage': 'com.example.haiwen.myhybirdapp',
    'appActivity': '.MainActivity',

    # 確保自動化之後不重置app
    'noReset': True,
    # 設定session的超時時間,單位秒,預設60s
    'newCommandTimeout': 6000,
    # 設定底層測試驅動-1.15預設使用的底層驅動就是UiAutomator2
    'automationName': 'UiAutomator1',  # 或者UiAutomator1
    'skipServerInstallation':True,#跳過UI2的安裝,如果第一次執行程式,不要新增該配置
    #指定匹配手機瀏覽器的webdriver版本--指定驅動所在目錄
    #需要系統內建的webview為安卓原生--即谷歌瀏覽器核心
    'chromedriverExecutableDir': 'D:\\20\\autotest\\appiumcase\\chromedriver_win32_81',

}
boss_caps = desired_caps
#當驅動為ui1,輸入中文需要指定輸入法
boss_caps['unicodeKeyboard']=True#修改手機的輸入法,UI2不需要設定
boss_caps['resetKeyboard']=True
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
driver.implicitly_wait(10)
#輸入網址
driver.find_element_by_id("editText").send_keys('https://m.douban.com/home_guide')
#點選按鈕
driver.find_element_by_id("button").click()
#檢視當前app的所有context
print(driver.contexts)
#['NATIVE_APP', 'WEBVIEW_com.example.haiwen.myhybirdapp', 'WEBVIEW_com.tencent.mobileqq:mini']
#NATIVE_APP安卓原生
#WEBVIEW_com.example.haiwen.myhybirdapp web網頁
#檢視當前的context
print(driver.current_context) #NATIVE_APP
#切入到webview操作-才能以網頁形式定位元素
driver.switch_to.context('WEBVIEW_com.example.haiwen.myhybirdapp')
#豆瓣手機端網頁搜尋框
driver.find_element_by_class_name('search-input').send_keys('肖申克的救贖\n')
#評分
rate = driver.find_element_by_css_selector('.search-results>li:nth-child(1)>ul>li:nth-child(1) p.rating>span:nth-child(2)').text
print('肖申克的救贖的評分為:%s'%rate)
driver.quit()