Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to stop and start Appium server programmatically using Java?

Tags:

java

appium

How can I perform launching and stopping my server using Java code? Currently I am doing this process manually.

like image 843
Humble_PrOgRaMeR Avatar asked Jan 12 '16 13:01

Humble_PrOgRaMeR


People also ask

Is it possible to start an Appium server programmatically?

buildService(serviceBuilder); Now that we have an AppiumDriverLocalService named server, we can start and stop it easily. When starting, an Appium server will run, and you will be able to connect to it. The Appium server logs, by default, are printed in the output of the test.

How do I start an Appium server?

After a successful installation, you can start using Appium. To open Appium from the command prompt, type Appium followed by the IP address and the server port number. Now, Appium is running and the REST HTTP is listening on the IP address (In the above example, localhost 127.0. 0.1 and the server port 4723).


2 Answers

There are 3 ways to achieve the scenario.
1)Using AppiumDriverLocalService

public void startServer() {
    //Set Capabilities
    cap = new DesiredCapabilities();
    cap.setCapability("noReset", "false");

    //Build the Appium service
    builder = new AppiumServiceBuilder();
    builder.withIPAddress("127.0.0.1");
    builder.usingPort(4723);
    builder.withCapabilities(cap);
    builder.withArgument(GeneralServerFlag.SESSION_OVERRIDE);
    builder.withArgument(GeneralServerFlag.LOG_LEVEL,"error");

    //Start the server with the builder
    service = AppiumDriverLocalService.buildService(builder);
    service.start();
}

public void stopServer() {
    service.stop();
}


2)Using Appium.js with Node.exe

public void startServer() {
    CommandLine cmd = new CommandLine("C:\\Program Files (x86)\\Appium\\node.exe");
    cmd.addArgument("C:\\Program Files (x86)\\Appium\\node_modules\\appium\\bin\\Appium.js");
    cmd.addArgument("--address");
    cmd.addArgument("127.0.0.1");
    cmd.addArgument("--port");
    cmd.addArgument("4723");

    DefaultExecuteResultHandler handler = new DefaultExecuteResultHandler();
    DefaultExecutor executor = new DefaultExecutor();
    executor.setExitValue(1);
    try {
        executor.execute(cmd, handler);
        Thread.sleep(10000);
    } catch (IOException | InterruptedException e) {
        e.printStackTrace();
    }
}

public void stopServer() {
    Runtime runtime = Runtime.getRuntime();
    try {
        runtime.exec("taskkill /F /IM node.exe");
    } catch (IOException e) {
        e.printStackTrace();
    }
}


3)Start Appium server using Command Prompt

public void startServer() {
    Runtime runtime = Runtime.getRuntime();
    try {
        runtime.exec("cmd.exe /c start cmd.exe /k \"appium -a 127.0.0.1 -p 4723 --session-override -dc \"{\"\"noReset\"\": \"\"false\"\"}\"\"");
        Thread.sleep(10000);
    } catch (IOException | InterruptedException e) {
        e.printStackTrace();
    }
}

public void stopServer() {
    Runtime runtime = Runtime.getRuntime();
    try {
        runtime.exec("taskkill /F /IM node.exe");
        runtime.exec("taskkill /F /IM cmd.exe");
    } catch (IOException e) {
        e.printStackTrace();
    }
}<br/>

I found it helpful.Hope it helps. Source: http://www.automationtestinghub.com/3-ways-to-start-appium-server-from-java/

like image 103
Shradhey Tripathi Avatar answered Oct 21 '22 04:10

Shradhey Tripathi


For anybody reading this who happens to be using npm (node/js/typescript), I've created a module called appium-controller that starts and stops appium in the background programmatically (mac or windows).

like image 44
aaronbriel Avatar answered Oct 21 '22 03:10

aaronbriel