1、介紹
appium-server是以前的,現在已經沒有更新了,比appium-desktop的有點就是使用腳本啟動APP時,不需要啟動appium-desktop的服務;
appium-server是用nodejs寫的,所以要下載appium-server需要先安裝nodejs;
2、appium-server的安裝
(1)先安裝nodejs
官網下載地址:http://nodejs.cn/download/ ,檢查環境變量path中是否自動添加了nodejs所在路勁,沒有的話手動添加;在命令行窗口用node –v和npm –v命令驗證安裝是否成功。
查看npm設置:npm config ls ,下圖中的 prefix 就是安裝路徑
設置npm安裝路徑:npm config set prefix “安裝路徑(注意不要帶中文和空格)”
(2)appium-server安裝
安裝方式1:使用npm安裝Appium-server:npm --registry http://registry.npm.taobao.org install appium -g ;建議用下面淘寶NPM鏡像安裝
安裝方式2:使用淘寶的cnpm命令安裝:先安裝cnpm命令:npm --registry http://registry.npm.taobao.org install cnpm -g ;然后使用cnpm安裝appium-server: cnpm install appium -g
安裝完成后,把npm安裝路徑配置到path里,然后在cmd中輸入appium驗證安裝成功
3、啟動appium-server
(1)appium-server的參數
輸入appium -h命令可以獲取到命令行參數列表,appium-server的參數以及許多desired capabilities參數都可以在appium命令行啟動時指定。
推薦指定--log參數和--local-timezone參數配置appium日志保存路徑即可。
(2)使用Java啟動和關閉
//啟動和關閉appium-server @Test public void startAndKillAppium() throws IOException, InterruptedException { //啟動appium-server String startAppium="cmd /c start appium -a 127.0.0.1 -p 4723 -g E:\\appium.log --local-timezone --log-timestamp"; //Runtime.getRuntime().exec() 執行cmd命令 Runtime.getRuntime().exec(startAppium); Thread.sleep(2000); //關閉appium-server和命令行窗口,因為appium-server是用nodejs寫的,可以直接關閉node就關閉了appium-server String KillNode="taskkill /F /IM node.exe"; String killCmd="taskkill /F /IM cmd.exe"; Runtime.getRuntime().exec(KillNode); Runtime.getRuntime().exec(killCmd); }
使用Java啟動appium-server時踩過的坑
(1)如果報錯找不到appium命令,使用admin打開IDEA
(2)如果用Java啟動appium-server時,appium的日志出現下面的報錯:
"Closing session, cause was 'Unexpected shutdown',Encountered internal error running command: NoSuchDriverError: A session is either terminated or not started";
導致 new AndroidDriver時404,而使用Java啟動appium-desktop時就不會出現這個情況,原因是 appium-desktop 和 appium-server 的版本不統一,網上建議使用 cnpm 更新appium-server可以解決此問題,但是我使用此方法沒有解決,以下是自己試出來的方法,親測有效
--1. 首先找到appium-server的安裝路徑,即上面設置的 npm 安裝路徑,找到並打開 appium.cmd 批處理文件
--2. 可以看到實際用來啟動appium-server的是一個 main.js的文件,可以將啟動的文件換成appium-desktop的main.js文件,該文件存在於
C:\Users\HJY\AppData\Local\Programs\Appium\resources\app\node_modules\appium\build\lib\main.js ,替換后
--3. 替換啟動路徑后,使用Java啟動appium-server就不會再報錯了
然后我們使用Java啟動appium-server並執行自動化,首先要使用 adb 連接模擬器
public class AppTest { //使用appium-server啟動APP public static void main(String[] args) throws IOException, InterruptedException { //啟動appium-server String startAppium="cmd /c start appium -a 127.0.0.1 -p 4723 -g E:\\appium.log --local-timezone --log-timestamp"; Runtime.getRuntime().exec(startAppium); //啟動appium-server需要一定時間,這里需要設置等待時間 Thread.sleep(5000); //設置Capabilities參數 DesiredCapabilities desiredCapabilities=new DesiredCapabilities(); //必要參數 desiredCapabilities.setCapability("deviceName", "127.0.0.1:7555"); desiredCapabilities.setCapability("platformName", "Android"); desiredCapabilities.setCapability("platformVersion","6.0.1"); desiredCapabilities.setCapability("appPackage","com.tencent.mobileqq"); desiredCapabilities.setCapability("appActivity",".activity.LoginActivity"); //可選參數 //不要重置簽名 desiredCapabilities.setCapability("noSign",true); //不清除緩存 desiredCapabilities.setCapability("noReset",true); //設置使用unicode鍵盤,讓自動化腳本實現過程中能夠輸入中文,成對使用,單獨使用下面的某一個屬性會ignore desiredCapabilities.setCapability("unicodeKeyboard",true); desiredCapabilities.setCapability("resetKeyboard",true); //電腦連接了多個設備時,指定設備 //desiredCapabilities.setCapability("udid","127.0.0.1:7555"); //創建driver對象 AndroidDriver driver=new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities); Thread.sleep(3000); //定位並操作元素 driver.findElement(MobileBy.AccessibilityId("請輸入QQ號碼或手機或郵箱")).sendKeys("123456"); driver.findElement(By.xpath("//android.widget.EditText[@content-desc='密碼 安全']")).sendKeys("132456"); driver.findElement(By.id("com.tencent.mobileqq:id/login")).click(); Thread.sleep(5000); //關閉APP和driver driver.closeApp(); driver.quit(); //關閉appium-server 和命令行窗口 String killCmd="taskkill /F /IM cmd.exe"; String killNode="taskkill /F /IM node.exe"; Runtime.getRuntime().exec(killNode); Runtime.getRuntime().exec(killCmd); }