【翻譯】Appium 的故障排查

Appium 的故障排查

當(dāng)你在使用過程中遇到了問題,先別急著到 github 上提交反饋符糊,或者到 appium-discuss discussion group 提問凫海。可以先試試在本文中能否找到解決的辦法男娄。

常見問題

  • 確保你是跟著 README 中的每一步來做行贪。
  • 確保你的系統(tǒng)已經(jīng)配置好所需環(huán)境(例如. Xcode 已更至最新,Android SDK 已經(jīng)安裝好模闲,而且ANDROID_HOME也設(shè)置無誤)建瘫。
  • 確保你應(yīng)用的存放路徑是正確的。
  • 在 windows 上運行 appium.app 要使用管理員權(quán)限尸折,假如你在 cmd 中運行啰脚,也得確保是在管理員權(quán)限下。

如果你是通過 Appium.app 運行

  • 升級應(yīng)用并重啟实夹。如果你被告知應(yīng)用無法升級橄浓,請到 appium.io 重新下載。

如果你是通過 Appium 的源碼運行

  • 通過 git pull 命令拉取代碼亮航,確保當(dāng)前的代碼是最新的

  • 移除舊的依賴:rm -rf node_modules

  • 重新安裝依賴:npm install

  • 代碼 Re-transpile: gulp transpile

  • 你可以使用 Appium Doctor 去檢測 Appium 環(huán)境是否已經(jīng)配置好了贮配。

  • 如果你升級到 Android SDK 22 后出現(xiàn)如下報錯:
    {ANDROID_HOME}/tools/ant/uibuild.xml:155: SDK does not have any Build Tools installed.
    在 Android SDK 22 中,platform 與 build tools 分別被拆分到各自的 SDK 管理包中去了塞赂。你需要確保已經(jīng)正確安裝了 build-tools 與 platform-tools泪勒。

Android

  • 確保 Android 模擬器已經(jīng)開啟并在運行中。
  • 出現(xiàn)設(shè)備連接問題時宴猾, adb kill-server && adb devices 這行命令非常有用圆存。它可以重置你的 Android 設(shè)備的連接。
  • 確保你已經(jīng)設(shè)置了 ANDROID_HOME 已經(jīng)指向了 Android SDK 路徑

Windows

  • 確保已經(jīng)開啟了開發(fā)者模式仇哆。
  • 確保 command prompt 已經(jīng)是管理員權(quán)限沦辙。
  • 檢查 Appium 服務(wù)器正在監(jiān)聽的 URL 是否與你測試腳本中的 URL 匹配的上。

IOS

  • 確保 Instruments.app 沒有被開啟讹剔。

  • 如果你使用模擬器時油讯,記得不要讓真機連上你的電腦详民。

  • 確保在手機的設(shè)置中的 accessibility 輔助功能是關(guān)閉的。

  • 確保應(yīng)用是變異在當(dāng)前運行的模擬器上陌兑。

  • 確保應(yīng)用已編譯在合適的模擬器(或真機)上(例如. 在模擬器上運行需要 debug 模式的包)沈跨,否則你會出現(xiàn)posix spawn報錯。

  • 如果你曾經(jīng)用 sudo 運行過 Appium兔综,你可能需要運行 sudo rm /tmp/instruments_sock 該命令饿凛,而且記住以后盡量別帶上 sudo。

  • 如果你是第一次運行 Appium软驰,記得對 Instruments 進行授權(quán)涧窒。 查閱 running on OSX documentation 了解更多。

  • 如果在真機上運行 Instruments 出現(xiàn)了崩潰("exited with code 253")锭亏,確保 Xcode 已經(jīng)下載了設(shè)備的符號文件纠吴。到 Window -> Devices,然后他就會自動的開始下載慧瘤。每次 iOS 版本升級后都需要做這步戴已。

  • 如果你看到 iOS Simulator failed to install the application. 這樣的報錯,并且確定路徑?jīng)]有設(shè)置錯誤的話碑隆,那你可以嘗試去重啟你的電腦恭陡。

  • 確保你的 macOS 上的 keychain 已經(jīng)保存了用于構(gòu)建你的應(yīng)用的證書蹬音,并且 WebDeriverAgent 是已簽名的上煤。特別是你在使用 ssh 的情況下。通常失敗的話會顯示簽名報錯著淆。

  • 如果你的應(yīng)用中還有自定義的元素劫狠,他們或許不能通過默認的方式去使用 UIAutomaion(and therefore Appuim)進行自動化。你需要將 accessibility status 設(shè)置為'enabled'永部。在代碼中設(shè)置的方式如下:

    [myCustomView setAccessibilityEnabled:YES];
    
  • 在 iOS 上測試可能會出現(xiàn)類似內(nèi)存泄露(包括性能不佳独泞、程序掛起)的狀況。如果你出現(xiàn)了類似的問題苔埋,這很可能是由于一個 NSLog 的已知問題所導(dǎo)致的懦砂。其中的一個解決辦法就是將所有的 NSLog 代碼移除。然而组橄,還是有一些巧妙的處理方法荞膘,可以不重構(gòu)就能解決。

    解決辦法 1

    NSLog 是一個宏且可以被定義的玉工。例如:

    // *You'll need to define TEST or TEST2 and then recompile.*
    
    #ifdef TEST
      #define NSLog(...) _BlackHoleTestLogger(__VA_ARGS__);
    #endif // TEST
    #ifdef TEST2
      #define NSLog(...) _StdoutTestLogger(__VA_ARGS__);
    #endif // TEST2
    
    void _BlackHoleTestLogger(NSString *format, ...) {
        //
    }
    
    void _StdoutTestLogger(NSString *format, ...) {
        va_list argumentList;
        va_start(argumentList, format);
        NSMutableString * message = [[NSMutableString alloc] initWithFormat:format
                                                    arguments:argumentList];
    
        printf(message);
    
        va_end(argumentList);
        [message release];
    }
    

    解決辦法 2

    手動去替換掉 NSLog 封裝的底層功能羽资。該方法被 Apple in a similar context. 所推薦

    extern void _NSSetLogCStringFunction(void(*)(const char *, unsigned, BOOL));
    
    static void _GarbageFreeLogCString(const char *message, unsigned length, BOOL withSyslogBanner) {
       fprintf(stderr, "%s\\n", message);
    }
    
    int main (int argc, const char *argv[]) {
       NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
       int exitCode;
    
       setbuf(stderr, NULL);
    
       _NSSetLogCStringFunction(_GarbageFreeLogCString);
       exitCode = WOApplicationMain(@"Application", argc, argv);
       [pool release];
       return exitCode;
    }
    


### Webview/Hybrid/Safari 應(yīng)用的支持

* 確保真機上的 'Web Inspector' 為打開狀態(tài)。
* 確保你已經(jīng)打開 Safari 的開發(fā)者模式(Safari - Advance Preferences- Developer menu for simulators)遵班。
* 確保你客戶端的庫提供的 appium 命令 `context` 可以讓你正確地切換 contexts屠升。
* 當(dāng)你嘗試打開代理的時候潮改,出現(xiàn)了這個報錯:select_port() failed,請查閱該[文檔](https://groups.google.com/forum/#!topic/appium-discuss/tw2GaSN8WX0)腹暖。
* 在 Safari session 中汇在,如果日志記錄到不能輸入初始 url 的問題,先確保你的軟鍵盤是否已被開啟微服,詳情請查閱該[文檔](https://github.com/appium/appium/issues/6440)趾疚。

### 到社區(qū)尋求幫助

如果上述步驟還沒解決你的問題,那你可以通過以下方式獲得幫助:

當(dāng)你在使用 Appium 的過程中有任何問題以蕴,而且 Appium 提供的報錯信息不夠清晰的話糙麦,歡迎加入[討論組](https://discuss.appium.io)與大家進行討論。提問時請附帶上如下信息:

* 你是通過什么方式運行 Appium(Appium.app, npm, source)丛肮。
* 你使用什么操作系統(tǒng)赡磅。
* 你是針對什么設(shè)備和版本去做測試的(例如. Android 4.4, 或者 iOS 7.1)。
* 你是使用真機還是模擬器去做測試宝与。
* 提供客戶端和服務(wù)端給出的的錯誤(例如. “在運行我的 Python 測試腳本時候出現(xiàn)了異常焚廊,Appium 服務(wù)器的報錯信息如鏈接中所示”)。
* 除了上述习劫,在提問的時候希望可以附帶上 Appium 服務(wù)器輸出的內(nèi)容(特別是在 verbose 模式下)咆瘟,這樣我們就可以更好地分析并跟進問題。

如果你確信你發(fā)現(xiàn)的是一個 bug诽里,請直接到 [issue tracker](https://github.com/appium/appium/issues) 去提交一個 issue 去描述 bug 的信息以及重現(xiàn)步驟袒餐。

### 已知問題

* 如果你已在官網(wǎng)下載并安裝 Node,你需要使用 sudo 去運行 `npm`谤狡【难郏可這么做這并不理想∧苟可以嘗試通過 [nvm](https://github.com/creationix/nvm), [n](https://github.com/visionmedia/n) 或者 `brew install node` 這幾種方式去安裝焰宣!
* 通過設(shè)置代理,iOS 真機可以支持 Webview 了捕仔,詳情可查看[討論](https://groups.google.com/d/msg/appium-discuss/u1ropm4OEbY/uJ3y422a5_kJ)匕积。
* 有時候 iOS 的 UI 元素在被定位到后的幾毫秒間會失效,這會導(dǎo)致一個類似 `(null) cannot be tapped` 的報錯榜跌。唯一的解決辦法就是把  finding-and-clicking 的代碼放進一個 retry block 中闪唆。
* 如果你是通過 MacPorts 去安裝 Node 與 npm,Appium 可能很難找到可執(zhí)行的 `node`斜做。你必須確保 MacoPorts 的 bin 文件夾(默認是 `/opt/local/bin`)已經(jīng)添加到你的 `~/.profile`, `~/.bash_profile` 或者 `~/.bashrc` 中的 `PATH` 環(huán)境變量中苞氮。

### 特定的錯誤

|Action|Error|Resolution|
|------|-----|----------|
|Running ios test|`[INST STDERR] posix spawn failure; aborting launch`|你的應(yīng)用沒有分別對應(yīng)模擬器或者真機去編譯對應(yīng)版本.|
|Running mobile safari test|`error: Could not prepare mobile safari with version '7.1'`|你可能需要再次運行授權(quán)的腳本以確保 iOS SDK 文件是可寫狀態(tài)。詳情請查閱 [running on OSX documentation](./running-on-osx.md#authorizing-ios-on-the-computer)|
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓤逼,一起剝皮案震驚了整個濱河市笼吟,隨后出現(xiàn)的幾起案子库物,更是在濱河造成了極大的恐慌,老刑警劉巖贷帮,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戚揭,死亡現(xiàn)場離奇詭異,居然都是意外死亡撵枢,警方通過查閱死者的電腦和手機民晒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锄禽,“玉大人潜必,你說我怎么就攤上這事∥值” “怎么了磁滚?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長宵晚。 經(jīng)常有香客問我垂攘,道長,這世上最難降的妖魔是什么淤刃? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任晒他,我火速辦了婚禮,結(jié)果婚禮上逸贾,老公的妹妹穿的比我還像新娘陨仅。我一直安慰自己,他們只是感情好耕陷,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布掂名。 她就那樣靜靜地躺著据沈,像睡著了一般哟沫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锌介,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天嗜诀,我揣著相機與錄音,去河邊找鬼孔祸。 笑死隆敢,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的崔慧。 我是一名探鬼主播拂蝎,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼惶室!你這毒婦竟也來了温自?” 一聲冷哼從身側(cè)響起玄货,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤偶芍,失蹤者是張志新(化名)和其女友劉穎蜈垮,沒想到半個月后见转,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體站叼,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡嘁捷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年震叙,在試婚紗的時候發(fā)現(xiàn)自己被綠了栈雳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怯邪。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡鸠踪,死狀恐怖丙者,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情营密,我是刑警寧澤蔓钟,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站卵贱,受9級特大地震影響滥沫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜键俱,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一兰绣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧编振,春花似錦缀辩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至畅蹂,卻和暖如春健无,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背液斜。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工累贤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人少漆。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓臼膏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親示损。 傳聞我的和親對象是個殘疾皇子渗磅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容