前言
在做Android應(yīng)用自動化時,當(dāng)出現(xiàn)內(nèi)嵌webview頁面,driver無法獲取到元素信息,導(dǎo)致無法進行下一步,通過切換窗口的方式來進行

一、APP打開調(diào)試模式
需要讓開發(fā)人員添加一行代碼:
WebView.setWebContentsDebuggingEnabled(true);
未添加時,無法獲取到webview視窗
二、增加啟動參數(shù)
1、獲取手機chromedriver版本號
打開手機開發(fā)者選項->WebView實現(xiàn)->查看具體版本號


在正式啟用前,我們可以先嘗試一次獲取當(dāng)前視窗數(shù)量:
webviews = self.driver.contexts
在日志中找到啟動瀏覽器的版本號-"Browser": "Chrome/83.0.4103.101"
2022-05-19 06:20:04:283 - [debug] [AndroidDriver] Found 1 webview: ["WEBVIEW_com.xiaozhu.xzdz"]
2022-05-19 06:20:04:284 - [debug] [AndroidDriver] Available contexts: ["NATIVE_APP","WEBVIEW_com.xiaozhu.xzdz"]
2022-05-19 06:20:04:284 - [debug] [AndroidDriver] Connecting to chrome-backed webview context 'WEBVIEW_com.xiaozhu.xzdz'
2022-05-19 06:20:04:297 - [debug] [AndroidDriver] A port was not given, using random free port: 8001
2022-05-19 06:20:04:297 - [debug] [AndroidDriver] Passing web view details to the Chromedriver constructor: {
2022-05-19 06:20:04:297 - [debug] [AndroidDriver] "info": {
2022-05-19 06:20:04:298 - [debug] [AndroidDriver] "Android-Package": "com.xiaozhu.xzdz",
2022-05-19 06:20:04:298 - [debug] [AndroidDriver] "Browser": "Chrome/83.0.4103.101",
2022-05-19 06:20:04:298 - [debug] [AndroidDriver] "Protocol-Version": "1.3",
2022-05-19 06:20:04:298 - [debug] [AndroidDriver] "User-Agent": "Mozilla/5.0 (Linux; Android 10; M2002J9E Build/QKQ1.191222.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.101 Mobile Safari/537.36",
2022-05-19 06:20:04:298 - [debug] [AndroidDriver] "V8-Version": "8.3.110.9",
2022-05-19 06:20:04:298 - [debug] [AndroidDriver] "WebKit-Version": "537.36 (@74dd8d5ea19a92d0e6092e59a0c8bd3a40877b71)",
2022-05-19 06:20:04:298 - [debug] [AndroidDriver] "webSocketDebuggerUrl": "ws://127.0.0.1:10900/devtools/browser"
2022-05-19 06:20:04:298 - [debug] [AndroidDriver] }
2022-05-19 06:20:04:298 - [debug] [AndroidDriver] }
2、指定chromedriver路徑
先下載已確定的Chromedriver版本至本地,添加到項目中
下載地址:https://registry.npmmirror.com/binary.html?path=chromedriver/
3、參數(shù)配置
desired_caps = {}
desired_caps['showChromedriverLog'] = True
desired_caps['enableWebviewDetailsCollection'] = True
desired_caps["ensureWebviewsHavePages"] = True
desired_caps['chromedriverExecutable'] = '/xxxx/xxx/chromedriver'
三、切換context
1、獲取當(dāng)前所有的視窗
獲取視窗列表:
webviews = self.driver.contexts
生效的視窗:
#[NATIVE_APP] 為安卓原生、[WEBVIEW_com.xiaozhu.xzdz] 為 H5
Available contexts: ["NATIVE_APP","WEBVIEW_com.xiaozhu.xzdz"]
2、切換至webview頁面
self.driver.switch_to.context(webviews[1])
3、H5 操作完之后切回 APP
self.driver.switch_to.context('NATIVE_APP')
四、在 H5 中進行元素定位和操作
1、安裝調(diào)試工具
下載地址:https://plus.ucweb.com/download/?spm=ucplus.11213647.0.0.22e626042F8OQp#DevTool
根據(jù)設(shè)備找到要進行調(diào)試的webview頁面,點擊可調(diào)試頁面列表中的[inspect]按鈕,可以開啟對應(yīng)頁面的開發(fā)者調(diào)試界面:

2、獲取要操作的元素

3、selenium web操作元素
示例:
self.driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/ul/div[5]/li').click()