X5內核是騰訊公司基於優秀開源 webkit 深度優化的瀏覽器渲染引擎,而且在2014年正式宣佈開放給app開發者,因此如今能夠在不少app上看到都是使用的X5內核實現Hybrid混合應用,包括微信、手機QQ、京東、新浪新聞、搜狐視頻等等,包括如今煊赫一時的微信小程序都是X5內核,以前都是使用google的webview,這裏能夠把X5內核理解爲騰訊版本的webview。android
注意:因爲 genymotion 模擬器是X86架構的,不少app安裝不了,好比微信、QQ等(雖說能夠經過安裝arm解釋器來解決該問題,可是進行X5內核調試的話也會出現問題),建議使用真機來作。web
X5內核應用自動化的方式和 google webview 有很是多的差別,由於這裏須要開啓X5的debug調試模式。chrome
微信版本在7.0如下,須要在聊天窗口輸入:shell
http://debugx5.qq.com小程序
針對微信版本在7.0+,微信有對H5開關作了調整,須要在聊天窗口輸入以下:微信小程序
http://debugmm.qq.com/?forcex5=true (優先使用,無效時使用方法二)
http://debugx5.qq.com瀏覽器
點擊「肯定」後便可生效微信
微信在新版中對小程序調試入口加上了限制:在微信主窗口下來打開小程序,利用工具是檢測不到小程序對應的url入口的,解決方案:架構
啓動appium時,須要指定chromedriver.exe的目錄,使用appium默認目錄下的會報錯,在切換到小程序webview時,會去匹配chrome內核所應對chromedriver驅動的版本。在切換完成以後,打印全部的窗口時,會使用x5內核的版本,因此指定一個非默認目錄下面的chromedriver.exe(X5內核對應的版本),此問題就不會出現 。app
desired_caps["chromedriverExecutableDir"] =r'G:\\ChromeDrivers'
上面的啓動參數穩定性稍差,建議使用以下啓動會話配置:
desired_caps['chromedriverExecutable'] = r'G:\ChromeVersionManagement\chromedriver66\chromedriver.exe'
微信/QQ有不少進程,咱們要肯定當前web頁面是位於哪一個進程中,使用adb命令:
由此咱們能夠確認當前微信的頁面運行在 com.tencent.mm:tools 中
desired_caps["recreateChromeDriverSessions"] = True
使用ChromeOptions來定製啓動選項,由於在appium中切換context識別webview的時候,把com.tencent.mm:tools的webview識別成了com.tencent.mm的webview,所以爲了不這個問題,加上androidProcess: com.tencent.mm:tools
desired_caps["chromeOptions"] = {"androidProcess":"com.tencent.mm:tools"}
在第五步和第三步來看,進程不像前面普通的Hybrid混合應用的webview只有一個,這裏每次會生成不少個webview,可是真正匹配的只有一個,這裏進行窗口切換的時候就須要用到循環遍歷的操做:
print("=================進入web自動化環節===============================") #打印當前全部的窗口 hs = driver.window_handles print("當前全部的窗口爲:", hs) # print("當前所在的窗口爲:",driver.current_window_handle) # 小程序的頁面切換:須要遍歷全部的handles,切換到元素所在的handle for handle in hs: driver.switch_to.window(handle) print("切換到窗口:",handle) time.sleep(3) #print(driver.page_source) if driver.page_source.find("Python") != -1: break