參考鏈接
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問題是很好解決的。