繁体   English   中英

如何使用 Java 以编程方式停止和启动 Appium 服务器?

[英]How to stop and start Appium server programmatically using Java?

如何使用 Java 代码启动和停止服务器? 目前我正在手动执行此过程。

有 3 种方法可以实现该场景。
1) 使用 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) 在 Node.exe 中使用 Appium.js

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) 使用命令提示符启动 Appium 服务器

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/>

我发现它很有帮助。希望它有所帮助。 来源: http : //www.automationtestinghub.com/3-ways-to-start-appium-server-from-java/

对于碰巧使用 npm (node/js/typescript) 的任何人来说,我创建了一个名为appium-controller的模块,它以编程方式(mac 或 windows)在后台启动和停止 appium。

顶部提供的AppiumDriverLocalService解决方案解决了我在手动启动服务器时不断收到的套接字挂断错误的永无止境的问题。

这是它在我的代码中的样子:

public final class AppiumServiceProvider {

    private final static Logger log = Logger.getLogger(AppiumServiceProvider.class);
    private static AppiumDriverLocalService service = null;
    private static final TestConfiguration testConfiguration = new TestConfiguration();

    private AppiumServiceProvider() {
    }

    public static AppiumDriverLocalService getService() {
        if (service == null) {
            initAppiumService();
        }
        if (service == null) {
            fail("Cannot start Appium Driver Local Service.");
        }
        return service;
    }

    private static void initAppiumService() {
        Map<String, String> env = new HashMap<>(System.getenv());
        env.put("PATH", "/usr/local/bin:" + env.get("PATH"));
        env.put("ANDROID_HOME", "/Users/nets/Library/Android/sdk");

        service = AppiumDriverLocalService.buildService(new AppiumServiceBuilder()
                .usingAnyFreePort()
                .withAppiumJS(new File(testConfiguration.getAppiumJsLocation()))
                .usingDriverExecutable(new File("C:\\Program Files\\nodejs\\node.exe"))
                .withArgument(GeneralServerFlag.SESSION_OVERRIDE)
                .withArgument(GeneralServerFlag.LOG_LEVEL, "error")
                .withArgument(GeneralServerFlag.RELAXED_SECURITY)
                .withEnvironment(env)
                .withLogFile(new File("target/appium.log"))
                .withStartUpTimeOut(60, TimeUnit.SECONDS));

        log.info("New Appium service: " + service.getUrl());
        service.start();
    }
}

请阅读此内容 - 它将解释如何启动https://github.com/appium/java-client/pull/240

最新的 java 客户端有 api 来做到这一点。

这是以编程方式启动的一种方式,该页面列出了更多此类方式。

        AppiumDriverLocalService service = AppiumDriverLocalService.buildDefaultService();
        final DesiredCapabilities capabilities = new DesiredCapabilities();
        // capabilities.setCapability(CapabilityType.BROWSER_NAME, "Browser");
        capabilities.setCapability("deviceName", "MiPad");
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("automationName","Appium");
        //            capabilities.setCapability("avd","firstavd");
        capabilities.setCapability("appPackage", "com");
        capabilities.setCapability("appActivity", ".ui.activity");
        driver = new AndroidDriver<MobileElement>(service, capabilities);

试试这个 - 它对我有用

示例代码:

public static AppiumDriverLocalService startAppiumServer() {
    boolean flag=   checkIfServerIsRunnning(4723);
    if(!flag)
    {
        AppiumServiceBuilder serviceBuilder = new AppiumServiceBuilder();
        // Use any port, in case the default 4723 is already taken (maybe by another Appium server)
        serviceBuilder.usingAnyFreePort();
        // Tell serviceBuilder where node is installed. Or set this path in an environment variable named NODE_PATH
        serviceBuilder.usingDriverExecutable(new File("/Users/Puneetha/.nvm/versions/node/v11.10.1/bin/node"));
        // Tell serviceBuilder where Appium is installed. Or set this path in an environment variable named APPIUM_PATH
        serviceBuilder.withAppiumJS(new File("/Users/Puneetha/.nvm/versions/node/v11.10.1/bin/appium"));
        // The XCUITest driver requires that a path to the Carthage binary is in the PATH variable. I have this set for my shell, but the Java process does not see it. It can be inserted here.
        HashMap<String, String> environment = new HashMap();
        environment.put("PATH", "/usr/local/bin:" + System.getenv("PATH"));
        serviceBuilder.withEnvironment(environment);

        service = AppiumDriverLocalService.buildService(serviceBuilder);
        service.start();
    }
    return service;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM