appium(四)appium-server的使用


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);
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM