转自:http://www.software-testing-tutorials-automation.com/2015/12/start-stop-appium-server.html(需翻墙)
开发工具:Eclipse + TestNG
1. 查看启动程序位置
node.exe路径:
mac系统是这样显示的:/usr/local/bin/node(请换成你自己的路径)
windows是这样显示的: C:/Progra~1/Appium/node.exe
appium.js安装路径:
mac系统,根据安装appium版本的不同,选择不同的启动路径:
appium1.5.3:/Applications/Appium.app/Contents/Resources/node_modules/appium/build/lib/main.js
appium1.5.3以前版本:/Applications/Appium.app/Contents/Resources/node_modules/appium/bin/appium.js
windows系统:C:/Progra~1/Appium/node_modules/appium/bin/appium.js
2. 启动/关闭appium server代码
package startappium;
import java.io.IOException;
import org.openqa.selenium.WebElement;
import io.appium.java_client.android.AndroidDriver;
public class AppiumStartStop {
Process p;
// Set path of your node.exe file.
// Progra~1 represents Program Files folder.
String nodePath = "/usr/local/bin/node";
// Set path of your appium.js file.
String appiumJSPath = "/Applications/Appium.app/Contents/Resources/node_modules/appium/build/lib/main.js";
String cmd = nodePath + " " + appiumJSPath;
AndroidDriver<WebElement> driver;
// This method Is responsible for starting appium server.
public void appiumStart() throws IOException, InterruptedException {
// Execute command string to start appium server.
p = Runtime.getRuntime().exec(cmd);
// Provide wait time of 10 mins to start appium server properly.
// If face any eÏrror(Could not start a new session...) then Increase
// this time to 15 or 20 mins.
Thread.sleep(10000);
if (p != null) {
System.out.println("Appium server Is started now.");
}
}
// This method Is responsible for stopping appium server.
public void appiumStop() throws IOException {
System.out.println(p);
if (p != null) {
p.destroy();
}
System.out.println("Appium server Is stopped now.");
}
public void startAppium() throws IOException, InterruptedException {
System.out.println("come here");
appiumStop();
appiumStart();
}
}
另:还有一种使用command line的方法启动,可参考文单顶部链接
实践,创建一个测试类,去调用启动appium server方法:
package test;
import java.io.IOException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import io.appium.java_client.android.AndroidDriver;
public class TestHomePage {
AndroidDriver<WebElement> driver;
AppiumStartStop appiumServer;
@BeforeTest
public void setUp() throws Exception {
appiumServer = new AppiumStartStop();
appiumServer.startAppium();
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "c0875f69");
capabilities.setCapability("browserName", "Android");
capabilities.setCapability("platformVersion", "6.0.1");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("appPackage", "包名"); // app包名
capabilities.setCapability("appActivity", "启动activity"); // app启动方法
driver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
}
@Test
public void testAppearCorrect() throws InterruptedException {
/**此处写你的测试脚本**/
System.out.println("操作结束");
}
@AfterTest
public void endUp() throws IOException {
driver.quit();
appiumServer.appiumStop();
}
}