簡體   English   中英

如何通過mac中的java以編程方式啟動appium服務器?

[英]How to start appium server programmatically through java in mac?

我使用以下代碼段通過mac中的java代碼啟動appium服務器。

public void startAppium() throws ExecuteException, IOException, InterruptedException {
CommandLine command = new CommandLine("/Applications/Appium.app/Contents/Resources/node/bin/node"); command.addArgument("/Applications/Appium.app/Contents/Resources/node_modules/appium/bin/appium.js", false);
command.addArgument("--address", false);
command.addArgument("127.0.0.1");
command.addArgument("--port", false);
command.addArgument("4723");
command.addArgument("--no-reset", false);
DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();
DefaultExecutor executor = new DefaultExecutor();
executor.setExitValue(1);
executor.execute(command, resultHandler);
Thread.sleep(50000);
System.out.println("Appium Server starting");
}

我在@BeforeTest中調用上面的方法。 在@BeforeMethod內部,我提到了所需的功能。 服務器啟動並且它也正在獲取所需的功能,但它顯示以下日志並顯示錯誤:

e[36minfoe[39m: e[37m-->e[39m e[37mPOSTe[39m e[37m/wd/hub/sessione[39m e[90m{"desiredCapabilities":{"app":"/Users/aaaa/dd/qd.apk","appPackage":"com.xxx.xxx","appActivity":"com.xxx.xxx.MainActivity","newCommandTimeout":"1200","platformName":"Android","deviceName":"Android Device"}}e[39m
e[36minfoe[39m: Client User-Agent string: Apache-HttpClient/4.5.2 (Java/1.8.0_73)
e[36minfoe[39m: [debug] Using local app from desired caps: /Users/aaaa/dd/qd.apk
e[36minfoe[39m: [debug] Creating new appium session 6a2245bd-d1ac-443c-bf5f-c6e2c2f64e22
e[36minfoe[39m: Starting android appium
e[36minfoe[39m: [debug] Getting Java version
e[36minfoe[39m: [debug] Cleaning up android objects
e[36minfoe[39m: [debug] Cleaning up appium session
e[31merrore[39m: Failed to start an Appium session, err was: Error: 'java -version' failed. Error: Command failed: /bin/sh -c java -version /bin/sh: java: command not found
e[36minfoe[39m: [debug] Error: 'java -version' failed. Error: Command failed: /bin/sh -c java -version
/bin/sh: java: command not found

我已經嘗試過將JAVA_HOME設置為項目的環境變量,但沒有用。

任何人都可以提出這方面的建議。謝謝。

    //To start appium call this function 
    public void startAppium() throws Exception {
          String port = getPort();
          String chromePort = getPort();
          String bootstrapPort = getPort();
          String command = "appium --session-override -p " + port + " --chromedriver-port " + chromePort + " -bp "
            + bootstrapPort;
         System.out.println(command);
         String output = runCommand(command); //run command on terminal
         System.out.println(output);
 }

// This function will run command on terminal
public String runCommand(String command) throws InterruptedException, IOException
{
    p = Runtime.getRuntime().exec(command);

    BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));

    String line="";
    String allLine="";
    while((line=r.readLine()) != null){
        allLine=allLine+""+line+"\n";
        if(line.contains("started on"))
        break;
    }
    return allLine;
}

//This will check for free ports 
public String getPort() throws Exception
{
    ServerSocket socket = new ServerSocket(0);
    socket.setReuseAddress(true);
    String port = Integer.toString(socket.getLocalPort()); 
    socket.close();
    return port;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM