參考鏈接
https://testerhome.com/topics/7866
https://sutune.me/2018/04/30/appium-h5/
chromedriver下載地址:https://chromedriver.chromium.org/downloads
測試環境准備
1.PC端安裝chrome,手機端安裝谷歌瀏覽器(部分品牌應用商店可能會沒有,可以安裝應用寶,再到應用寶上安裝google瀏覽器,或者PC端應用寶內下載。不太清楚這個有什么用途,我不按安裝也是可以運行的。)
2. 打開webview調試模式
這里以微信為例,訪問debugx5.qq.com開啟調試模式。
或者在app中配置如下代碼(在WebView類中調用靜態方法setWebContentsDebuggingEnabled):
if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
3.瀏覽器輸入 chrome://inspect/devices#devices,可以看到當前webview頁面,如果獲取不到可以刷新下,或者調試模式未打開。


代碼准備
desired_caps_a = {'platformName': "Android",
'platFormVersion': "10",
'deviceName': "dd",
'udid': "648d4f29",
# 'automationName': "UiAutomator1",
'noReset': True,
'unicodeKeyboard': True,
'resetKeyboard': True,
'appPackage': "com.tencent.mm",
'appActivity': "com.tencent.mm.ui.LauncherUI",
'chromedriverExecutable': r"C:\Users\v_yddchen\Desktop\chromedriver_win32 77.0\chromedriver.exe",
'chromeOptions': {'androidProcess': "com.tencent.mm:toolsmp"} # webview的進程名字,不然會報錯
# 測試獲取H5元素 my_logging.debug(device_a.contexts) device_a.find_element_by_android_uiautomator('new UiSelector().text("Cc")').click() device_a.find_element_by_android_uiautomator('new UiSelector().textContains("警惕")').click() WebDriverWait(device_a, 20).until(lambda x: x.find_element_by_android_uiautomator('new UiSelector().text("騰訊新聞")')) my_logging.debug(device_a.contexts) device_a.switch_to.context("WEBVIEW_com.tencent.mm:toolsmp") time.sleep(3) my_logging.debug(device_a.current_context)
錯誤
運行上述代碼報錯了
unknown error: Failed to get PID for the following process: com.tencent.mm

解決方法:
1.有說是appiumd的chromedriver版本不對,雖然不太認同,但是我嘗試了一下
設備:oppo reno android 9 webdriver 70.0.3538.110
PC端chrome版本81.0.4044.117 手機端chrome同樣版本 81.0.4044.117
appium webview的版本78.0.3904.62
...\AppData\Local\Programs\appium-desktop\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win的路徑下,更換chromedriver的版本,或者初始化時
chromedriverExecutable指定chromedriver的路徑
更換chromedriver版本 81、78、70都是一樣的報錯(有點懷疑源碼有啥問題,github上搜到了一些蛛絲馬跡,等我再翻翻)。
2.更換了一台設備 oppo findx2 Android 10 webview 77.0.3865.92
以上代碼運行成功。
奇怪的是,不同手機輸出的contexts是不同的。
oppo reno android 9 webdriver 70.0.3538.110

oppo findx2 Android 10 webview 77.0.3865.92

3.確定appium的chromedriver版本的決定性因素
oppo findx2 Android 10 webview 77.0.3865.92

更換appium chromedriver的版本為73,低於系統webdriver和app的webview版本,運行提示出錯

如果chromedriver的版本為77,運行成功。
設置為81或者78,運行失敗。明確報錯chrome version問題是很好解決的。

