1. 程式人生 > >ubuntu安裝和使用appium遇到的問題解決方案

ubuntu安裝和使用appium遇到的問題解決方案

近期發現一款appium小工具,看著功能不錯,就在自己的ubuntu機器搭建了一個appium的環境,其中遇到好幾個問題,這裡將遇到的問題及解決方案分享出來。

安裝後無法使用

問題

Appium will not work if used or installed with sudo
error: Appium will not work if used or installed with sudo. Please rerun/install as a non-root user. If you had to install Appium using `sudo npm install -g appium`, the solution is
to reinstall Node using a method (Homebrew, for example) that doesn't require sudo to install global npm packages. [1]+ Exit 1 appium

該問題顯示appium不能使用root使用者來安裝,不然無法執行,所以需要解除安裝用root使用者安裝的appium,該用一般使用者來安裝。

解決方案

  • 改變node的所有者
cd /usr/local/lib
sudo chown -R bixiaopeng node_modules
  • 問題1: 解除安裝appium
npm uninstall appium -g
  • 重新安裝appium
npm install -g appium
  • 啟動
appium &

問題2: 一般使用者安裝問題

問題

非root使用者在執行npm install -g appium安裝時可能會遇到以下問題

> [email protected]0.4.31 install /lib/node_modules/appium/node_modules/ws
> (node-gyp rebuild 2> builderror.log) || (exit 0
) CXX(target) Release/obj.target/bufferutil/src/bufferutil.o SOLINK_MODULE(target) Release/bufferutil.node SOLINK_MODULE(target) Release/bufferutil.node: Finished CXX(target) Release/obj.target/validation/src/validation.o SOLINK_MODULE(target) Release/validation.node SOLINK_MODULE(target) Release/validation.node: Finished npm WARN engine [email protected]0.10.2: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.15"}) npm WARN engine [email protected]0.1.3: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.15"}) npm WARN engine [email protected]0.1.4: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.15"}) npm WARN engine [email protected]0.7.6: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.15"}) npm WARN engine [email protected]0.3.8: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.15"}) npm ERR! Error: EACCES, symlink '/lib/node_modules/appium/bin/appium.js' npm ERR! { [Error: EACCES, symlink '/lib/node_modules/appium/bin/appium.js'] npm ERR! errno: 3, npm ERR! code: 'EACCES', npm ERR! path: '/lib/node_modules/appium/bin/appium.js' } npm ERR! npm ERR! Please try running this command again as root/Administrator. npm ERR! System Darwin 13.2.0 npm ERR! command "node" "/usr/local/bin/npm" "install" "-g" "appium" npm ERR! cwd /Users/stefanow/Code/jqueryuk-workshop-2014 npm ERR! node -v v0.10.28 npm ERR! npm -v 1.4.15 npm ERR! path /lib/node_modules/appium/bin/appium.js npm ERR! code EACCES npm ERR! errno 3 npm ERR! stack Error: EACCES, symlink '/lib/node_modules/appium/bin/appium.js' npm ERR! npm ERR! Additional logging details can be found in: npm ERR! /Users/stefanow/Code/jqueryuk-workshop-2014/npm-debug.log npm ERR! not ok code 0

該問題顯示沒發訪問部分檔案,請使用root使用者重試,很顯然是許可權不夠,但是,問題1已經說過不能使用root使用者進行安裝。那麼關鍵問題就是怎麼解決許可權問題了,首先我們想到的是修改目錄的許可權,執行以下命令:

sudo chmod 777 /lib/node_modules -R 

但是,重新執行發現問題依舊。
檢視/lib/node_modules目錄,我們發現並沒有/lib/node_modules/appium/bin/appium.js檔案。顯然,該檔案是安裝時生成的,因此問題應該出在安裝起npm上,檢視npm相關文件我們發現日誌中提到的符號連結的路徑是可以修改的,因此,解決許可權問題可以將該符號連結修改到使用者有許可權的目錄中。

解決方案

  • 執行以下命令修改符號連結路徑
npm config set prefix '~/.npm-packages'
  • 將新路徑新增到環境變數
vim ~/.bashrc  
# 在檔案中新增以下內容
export PATH="$PATH:$HOME/.npm-packages/bin"
  • 使環境變數生效
source .bashrc

問題3: appium啟動問題

問題

appium啟動時可能會遇到下列問題

[email protected]:~$ appium
error: uncaughtException: fn must be a function
See http://goo.gl/916lJJ
date=Sat Nov 21 2015 10:37:25 GMT+0800 (HKT), pid=2504, uid=501, gid=20, cwd=/usr/local/lib/node_modules/appium, execPath=/usr/local/bin/node, version=v0.10.34, argv=[node, /usr/local/bin/appium], rss=103559168, heapTotal=86062080, heapUsed=56309664, loadavg=[1.6328125, 1.86767578125, 1.81103515625], uptime=39552, trace=[column=15, file=/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/node_modules/appium-jsonwp-proxy/node_modules/appium-support/node_modules/bluebird/js/main/promisify.js, function=Function.Promise.promisify, line=268, method=Promise.promisify, native=false, column=13, file=lib/fs.js, function=, line=46, method=null, native=false, column=26, file=module.js, function=Module._compile, line=456, method=_compile, native=false, column=10, file=module.js, function=Object.Module._extensions..js, line=474, method=Module._extensions..js, native=false, column=32, file=module.js, function=Module.load, line=356, method=load, native=false, column=12, file=module.js, function=Function.Module._load, line=312, method=Module._load, native=false, column=17, file=module.js, function=Module.require, line=364, method=require, native=false, column=17, file=module.js, function=require, line=380, method=null, native=false, column=11, file=/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/node_modules/appium-jsonwp-proxy/node_modules/appium-support/build/lib/tempdir.js, function=, line=12, method=null, native=false, column=26, file=module.js, function=Module._compile, line=456, method=_compile, native=false, column=10, file=module.js, function=Object.Module._extensions..js, line=474, method=Module._extensions..js, native=false, column=32, file=module.js, function=Module.load, line=356, method=load, native=false, column=12, file=module.js, function=Function.Module._load, line=312, method=Module._load, native=false, column=17, file=module.js, function=Module.require, line=364, method=require, native=false, column=17, file=module.js, function=require, line=380, method=null, native=false, column=19, file=/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/node_modules/appium-jsonwp-proxy/node_modules/appium-support/build/index.js, function=, line=11, method=null, native=false, column=26, file=module.js, function=Module._compile, line=456, method=_compile, native=false, column=10, file=module.js, function=Object.Module._extensions..js, line=474, method=Module._extensions..js, native=false, column=32, file=module.js, function=Module.load, line=356, method=load, native=false, column=12, file=module.js, function=Function.Module._load, line=312, method=Module._load, native=false, column=17, file=module.js, function=Module.require, line=364, method=require, native=false, column=17, file=module.js, function=require, line=380, method=null, native=false, column=42, file=lib/proxy.js, function=, line=2, method=null, native=false, column=26, file=module.js, function=Module._compile, line=456, method=_compile, native=false, column=10, file=module.js, function=Object.Module._extensions..js, line=474, method=Module._extensions..js, native=false, column=32, file=module.js, function=Module.load, line=356, method=load, native=false, column=12, file=module.js, function=Function.Module._load, line=312, method=Module._load, native=false, column=17, file=module.js, function=Module.require, line=364, method=require, native=false, column=17, file=module.js, function=require, line=380, method=null, native=false, column=17, file=/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/node_modules/appium-jsonwp-proxy/build/index.js, function=, line=9, method=null, native=false, column=26, file=module.js, function=Module._compile, line=456, method=_compile, native=false, column=10, file=module.js, function=Object.Module._extensions..js, line=474, method=Module._extensions..js, native=false, column=32, file=module.js, function=Module.load, line=356, method=load, native=false, column=12, file=module.js, function=Function.Module._load, line=312, method=Module._load, native=false, column=17, file=module.js, function=Module.require, line=364, method=require, native=false, column=17, file=module.js, function=require, line=380, method=null, native=false, column=28, file=lib/chromedriver.js, function=, line=3, method=null, native=false, column=26, file=module.js, function=Module._compile, line=456, method=_compile, native=false, column=10, file=module.js, function=Object.Module._extensions..js, line=474, method=Module._extensions..js, native=false, column=32, file=module.js, function=Module.load, line=356, method=load, native=false], stack=[TypeError: fn must be a function, , See http://goo.gl/916lJJ, , at Function.Promise.promisify (/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/node_modules/appium-jsonwp-proxy/node_modules/appium-support/node_modules/bluebird/js/main/promisify.js:268:15), at Object.<anonymous> (lib/fs.js:46:13), at Module._compile (module.js:456:26), at Object.Module._extensions..js (module.js:474:10), at Module.load (module.js:356:32), at Function.Module._load (module.js:312:12), at Module.require (module.js:364:17), at require (module.js:380:17), at Object.<anonymous> (/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/node_modules/appium-jsonwp-proxy/node_modules/appium-support/build/lib/tempdir.js:12:11), at Module._compile (module.js:456:26), at Object.Module._extensions..js (module.js:474:10), at Module.load (module.js:356:32), at Function.Module._load (module.js:312:12), at Module.require (module.js:364:17), at require (module.js:380:17), at Object.<anonymous> (/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/node_modules/appium-jsonwp-proxy/node_modules/appium-support/build/index.js:11:19), at Module._compile (module.js:456:26), at Object.Module._extensions..js (module.js:474:10), at Module.load (module.js:356:32), at Function.Module._load (module.js:312:12), at Module.require (module.js:364:17), at require (module.js:380:17), at Object.<anonymous> (lib/proxy.js:2:42), at Module._compile (module.js:456:26), at Object.Module._extensions..js (module.js:474:10), at Module.load (module.js:356:32), at Function.Module._load (module.js:312:12), at Module.require (module.js:364:17), at require (module.js:380:17), at Object.<anonymous> (/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/node_modules/appium-jsonwp-proxy/build/index.js:9:17), at Module._compile (module.js:456:26), at Object.Module._extensions..js (module.js:474:10), at Module.load (module.js:356:32), at Function.Module._load (module.js:312:12), at Module.require (module.js:364:17), at require (module.js:380:17), at Object.<anonymous> (lib/chromedriver.js:3:28), at Module._compile (module.js:456:26), at Object.Module._extensions..js (module.js:474:10), at Module.load (module.js:356:32)]

google我們發現問題是node.js版本太低導致。
首先我們想到的解決方案是直接使用以下命令

sudo apt-get update
sudo apt-get install nodejs

很可惜這種方式在unbuntu 14.04預設安裝的nodejs版本還是v0.10.34,不支援我們安裝的appium(版本1.4.16),那隻能採用原始碼升級方式了。(注:檢視nodejs版本號方法node -v,檢視appium版本方法appium -v)

解決方案

原始碼升級notejs

# Using Ubuntu
curl -sL https://deb.nodesource.com/setup_0.12 | sudo -E bash -
sudo apt-get install -y nodejs

將nodejs版本升級到v0.12之後,appium就可以正常執行了。
至此大功告成!>_<

相關推薦

ubuntu安裝使用appium遇到的問題解決方案

近期發現一款appium小工具,看著功能不錯,就在自己的ubuntu機器搭建了一個appium的環境,其中遇到好幾個問題,這裡將遇到的問題及解決方案分享出來。 安裝後無法使用 問題 Appium will not work if used

RobotFramework(RF)+Appium完全安裝環境搭建配置的解決方案

【本部落格原創,都是經過博主本人全程操作安裝過的,踩過的坑都記錄在本文,有興趣的讀者跟著做一遍~~~】一、搭建環境流程1.先安裝python2.7環境(python-2.7.14.amd64.msi),(1)再安裝第三方庫:wxPython(32位的電腦就安裝win32,64

使用Charles進行HTTPS抓包(包括安裝信任證書以及抓包 出現無法抓包unknown證書無效解決方案

背景: 在進行App測試或定位線上問題時,經常會遇到抓取HTTPS資料包的需求。一般在windows上會使用fiddler,Mac上使用Charles。對於https請求,抓到的資料因為經過了加密,只能看到亂碼。 本文介紹如何使用Charles來抓取https網路報文

Appium自動化(2) - appium環境安裝常見問題的解決方案

如果你還想從頭學起Appium,可以看看這個系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html   問題1:adb檢測不到裝置 解決 1.檢查手機驅動是否安裝(win10系統不需要),去官網下載手機驅動或者電腦下載手機助手來輔助安

U盤安裝CentOS7的最終解決方案

u盤安裝 發現 clas usb 設置 電腦 安裝 軟件 哪裏 U盤安裝CentOS7的最終解決方案 終於將CentOS7裝上筆記本了,過程無比艱辛,因為我發現網上大家提到的所有U盤安裝CentOS7時碰到的問題幾乎都被我碰到了,像什麽: 1.刻錄鏡像的時候只能刻

關於ubuntu安裝報錯問題解決

nbsp http png 題解 logs engines 報錯 col ubuntu安裝 命令行中報錯 首先報錯內容為:(vmware-installer.py:3847): Gtk-WARNING **: 無法在模塊路徑中找到主題引擎:“murr

ImageView最大高度寬度失效解決方案

height oid 尺寸 註意 解決 分享 font 真的是 圖片 解決方案 做RecyclerView的 item 布局時,用到imageview ,可是圖片按原始尺寸顯示,不規範。 所以去google了一下imageview的寬高限制,就試了下maxheight/

ReactNative環境搭建擴展篇——安裝後報錯解決方案

每次 搖一搖 ack pst img 工程 項目 python2 -1 之前一篇寫了《邏輯性最強的React Native環境搭建與調試》說了RN的安裝,今天在這裏做一個復盤,讓我們能夠更直觀更深入的了解React Native(以下簡稱RN),這一篇重點來說的就是,安裝之

高並發大流量解決方案

nbsp 處理機 讀寫分離 計時 只有一個 統計 建立 最大 都是 序都是在同一個處理機上運行,但任一個時刻點上只有一個程序在處理機運行。 我們所說的高並發時什麽? 上面的定義明顯不是我們通常所言的並發,在互聯網時代,所講的並發,高並發,通常是指並發訪問。也就是在某個事件點

[轉載]Ubuntu 16.04 藍屏解決方案

server tps www. 命令行界面 png 但是 serve 解決 ubuntu16 結果:有用! ubuntu16.04開機藍屏解決方法,親測有用! 藍屏界面如下,相信大家是跟我一樣的 不要懵逼! 這個時候大家在鍵盤上按鍵:Ctrl + Alt + F4,

AutoItLibrary安裝常見問題解決

initial 管理 rip 下載地址 不支持 eas 文件夾 常見問題解決 etc AutoItLibrary 安裝步驟: 1、 安裝pythonwin32 在下載地址:http://sourceforge.net/projects/pywin32/files/p

ubuntu 提示 NO PUBLIC KEY 解決方案

iter string pan comm ring 方案 server serve bsp 運行以下命令 記得將KEY改成自己的KEY sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 16126

訪問不了虛擬機 ubuntu中的myql,解決方案

3.1 16px ping 百度一 ip地址 設置 綁定 ubun ont ============================================================== 1. 現象 2. 原因分析   2.1 訪問虛擬機中的mysql的前提

由於手賤引起的一場血案--刪了綁定在ubuntu上的python的解決方案

重啟 事情 一場 設置 不同的 www. 分區 ios win10 就在今天,我想著給我的電腦(ubuntu系統)裝一個python的工具包setuptools,結果使用apt-get來下載軟件時老是在一個resources的依賴項上出問題(現在我也沒有搞懂到底怎麽解決,後

macbook 無法安裝gem pg的解決方案

在mac 10.9上安裝pg的gemfile, 在build的時候出錯了 </pre><pre name="code" class="plain">Gem::Ext::BuildError: ERROR: Failed to build gem native extensi

ubuntu 安裝檢視已安裝軟體

說明:由於圖形化介面方法(如Add/Remove... 和Synaptic Package Manageer)比較簡單,所以這裡主要總結在終端通過命令列方式進行的軟體包安裝、解除安裝和刪除的方法。 一、Ubuntu中軟體安裝方法 1、APT方式 (1)普通安裝:apt-get i

Ubuntu 安裝配置jpcap

參考連結 安裝build-essential sudo apt-get install build-essential 安裝libpcap 參考連結2 1.官方下載最新版本   安裝jpcap git路徑下載——直接下載該頁面內包括的所有檔案 下載後是一個.zip檔案,將檔案解壓。

大規模分散式應用之海量資料高併發解決方案總結視訊教程網盤

大規模分散式應用之海量資料和高併發解決方案總結視訊教程網盤 39套Java架構師,高併發,高效能,高可用,分散式,叢集,電商,快取,微服務,微信支付寶支付,公眾號開發,java8新特性,P2P金融專案,程式設計,功能設計,資料庫設計,第三方支付,web安全,效能調優,設計模式,資料結構,併發程式

穆迪分析與普華永道合作提供“端到端”的精算、會計業務專業解決方案,以協助保險公司實現IFRS 17的合規

倫敦 -- (美國商業資訊) -- 穆迪分析與普華永道今日宣佈,雙方將合作向市場提供一流的技術、實施和諮詢解決方案,以在全球範圍內協助保險公司應對《國際財務報告準則第17號: 保險合同》(IFRS17)。 普華永道全球保險業IFRS 17部門的主管Alex Bertolotti表示:“保險公

大快DKhadoop開發環境安裝常見問題及解決方案彙總

大快DKhadoop開發環境安裝常見問題及解決方案彙總 2018年度國內大資料公司排名50強本月初榜單釋出,榜單上看到大快搜索躋身50強,再看看他們做的DKHadoop發行版,的確還是蠻厲害的吧!最起碼這款DKHadoop用起來確實在易用性方面要更好!Dkhadoop版本的下載安裝以及執行環