- 錯誤1:selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command.
- 錯誤2:同一段腳本比如超級計算器,通過appium-desktop啟動的Server能正常執行,但是通過 appium 命令行啟動的Server,執行腳本,超級計算器已經被腳本打開了,但是接着報下面的錯誤
selenium.common.exceptions.InvalidSessionIdException: Message: A session is either terminated or not started
關於錯誤1和錯誤2的原因:是因為之前通過 sudo cnpm install appium@1.14.0的版本的時候有下面截圖的報錯,沒有解決,該錯誤是由於權限問題導致的。
解決:徹底卸載mac上的node軟件和appium,然后通過brew install node,再通過npm install -g appium@1.15.1的版本后正常了,安裝過程中也沒有報錯,參考我的關於Mac appium 環境配置博客
MIUI 11 關閉USB安裝APP安裝詢問的提示彈窗
大多數手機關閉USB安裝提示彈窗很簡單,但是小米手機很麻煩,很多人不知道怎么關閉,關閉USB安裝彈窗,其實執行以下幾步即可: 1. 設置->開發者選項中 -> 啟動MIUI優化 ->關閉
2. 設置 -> 授權管理 -> 右上角設置按鈕 -> USB安裝管理 ->關閉
因為關閉了MIUI優化,有些界面,圖標很難看,所以在完成第二步設置后,可以把MIUI優化再打開錯誤3:appium-doctor --ios 檢測環境報錯 Error running xcrun simctl
解決:打開xcode-偏好設置-locations,下拉選上命令行工具
- 錯誤4: UnhandledPromiseRejectionWarning: Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/appium/node_modules/appium-selendroid-driver/2020325-4335-fa47af.9254'
-
解決:其實按照錯誤1或者錯誤2的解決方式,以普通模式安裝,不會遇到這個錯誤。
如果不是以普通模式安裝,即使你解決了這個錯誤,在后續的過程中還會遇到其他類似權限的問題。因此繼續強烈建議以普通模式安裝並配置環境
錯誤5:執行腳本的時候報An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: 'Command '/Users/qiaoersun/Library/Android/sdk/platform-tools/adb -P 5037 -s 49c08cd4 shell settings delete global hidden_api_policy_pre_p_apps' exited with code 255'; Stderr: 'Security exception: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS at com.android.providers.settings.SettingsProvider.enforceWritePermission(SettingsProvider.java:2050) at com.android.providers.settings.SettingsProvider.mutateGlobalSetting(SettingsProvider.java:1256) at com.android.providers.settings.SettingsProvider.deleteGlobalSetting(SettingsProvider.java:1239) at com.android.providers.settings.SettingsProvider.call(SettingsProvider.java:476) at android.content.ContentProvider.call(ContentProvider.java:2161) at android.content.ContentProvider\(Transport.call(ContentProvider.java:477) at com.android.providers.settings.SettingsService\)MyShellCommand.deleteForUser(SettingsService.java:399) at com.android.providers.settings.SettingsService$MyShellCommand.onCommand(SettingsService.java:281) at android.os.ShellCommand.exec(ShellCommand.java:104) at com.android.providers.settings.SettingsService.onShellCommand(SettingsService.java:49) at android.os.Binder.shellCommand(Binder.java:881) at android.os.Binder.onTransact(Binder.java:765) at android.os.Binder.execTransactInternal(Binder.java:1021) at android.os.Binder.execTransact(Binder.java:994)'; Code: '255'
原因: 首先是定位到權限問題,剛開始以為是電腦權限有問題了,網上一頓找,也有人報這個錯,但是都沒有解決方案。最后找了個其他安卓手機試了一下,是正常的,問題就定位到了可能是手機的某個設置問題,應該收手機的某個功能攔截了adb的執行。檢查了開發者選項設置,開啟開發者選項、USB調試、USB安裝都是正常的
解決:各種搜索中,無意間看見“安全調試模式導致小米手機adb shell命令沒反應”的帖子。https://jingyan.baidu.com/article/39810a23c7d0a1f737fda627.html。於是打開了 “USB調試(安全設置)",這個功能會允許通過USB調試修改權限或者模擬點擊的功能。再次執行腳本正常了。
錯誤6:selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: A new session could not be created. Details: session not created: This version of ChromeDriver only supports Chrome version 76
Error: A new session could not be created. Details: session not created: This version of ChromeDriver only supports Chrome version 76
原因:運行過程中由於H5內核(微信里是x5內核)支持的ChromeDriver 的Version是66,而當前電腦環境里的ChromeDriver版本是76,兩個驅動的版本不一致導致的.
解決:下載Chrome的66版本的Version,跟x5內核版本一致即可,然后按照下圖的方式配置路徑即可。
錯誤7:OS真機調試找不到設備:,執行ideviceinstaller -l 等等idevice 系列命令的時候,總之報類似
IERROR: Could not connect to lockdownd, error code -[x],
解決辦法:
1. 給/private/var/db/lockdown授讀寫權限。先 cd /private/var/db 進入db目錄(一定要先cd到該目錄下,否則無法授權,踩過的坑)
進入目錄后執行:sudo chmod -R 777 lockdown/ 命令進行授權
2. 依次執行下面的命令
brew uninstall --ignore-dependencies libimobiledevice
brew uninstall --ignore-dependencies usbmuxd
brew install --HEAD usbmuxd
brew unlink usbmuxd
brew link usbmuxd
brew install --HEAD libimobiledevice
brew install ideviceinstaller
踩坑
brew install --HEAD libimobiledevice
`安裝的時候報了下面的錯
'configure: error: libplist is not up-to-date; missing plist_string_val_compare() etc. functions - Please update libplist to build libimobiledevice'導致每次安裝后,命令都不生效,繼續報 'Could not connect to lockdownd, error code -3'
解決:
根據提示,應該是libplist不是最新的,缺少plist_string_val_compare()等 功能,導致不能編譯libimobiledevice,所以重新安裝libplist,然后再安裝libimobiledevice就好了
brew install libplist --HEAD
brew install --HEAD libimobiledevice
錯誤8:
appium 通過‘adb shell dumpsys window | grep mCurrentFocus’獲取到的activity在真機上啟動失敗,報下面的錯,但是在Android模擬器上可以啟動成功。
selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Cannot start the 'com.xueqiu.android' application. Visit https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android/activity-startup.md for troubleshooting. Original error: Error executing adbExec. Original error: 'Command '/Users/qiaoersun/Library/Android/sdk/platform-tools/adb -P 5037 -s 49c08cd4 shell am start -W -n 'com.xueqiu.android/.common.MainActivity t3' -S -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -f 0x10200000' exited with code 255'; Stderr: 'Security exception: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=t3 cmp=com.xueqiu.android/.common.MainActivity } from null (pid=15151, uid=2000) not exported from uid 10489
java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=t3 cmp=com.xueqiu.android/.common.MainActivity } from null (pid=15151, uid=2000) not exported from uid 10489
at com.android.server.wm.ActivityStackSupervisor.checkStartAnyActivityPermission(ActivityStackSupervisor.java:1089)
at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:788)
at com.android.server.wm.ActivityStarter.startActivity(ActivityStarter.java:587)
at com.android.server.wm.ActivityStarter.startActivityMayWait(ActivityStarter.java:1389)
at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:518)
at com.android.server.wm.ActivityTaskManagerService.startActivityAndWait(ActivityTaskManagerService.java:1262)
at com.android.server.am.ActivityManagerService.startActivityAndWait(ActivityManagerService.java:3568)
at com.android.server.am.ActivityManagerShellCommand.runStartActivity(ActivityManagerShellCommand.java:513)
at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:172)
at android.os.ShellCommand.exec(ShellCommand.java:104)
at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:10061)
at android.os.Binder.shellCommand(Binder.java:881)
at android.os.Binder.onTransact(Binder.java:765)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:4663)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2790)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)'; Code: '255'
原因:
因為獲取到的activity可能不是最先加載的,通過該命令獲取到的並不是launchable-activity,所以啟動失敗,
解決:
(1) 進入命令行,輸入adb logcat | grep START 點擊待測應用,就可以獲取到啟動的activity, 手動是最穩定的方法,推薦。
(2)aapt dump badging apk所在路徑,有的app也獲取不到launchable-activity