1.启动appium service
有多种启动方式,在自动化测试中最长使用的就是AppiumDriverLocalService,可以设置使用的ip,port等。
//在运行时找不到appium,可以手动添加appium的位置
System.setProperty(AppiumServiceBuilder.NODE_PATH ,
"/usr/local/bin/node");
System.setProperty(AppiumServiceBuilder.APPIUM_PATH ,
"/usr/local/bin/appium");
AppiumServiceBuilder builder = new AppiumServiceBuilder();
builder.withLogFile(new File("log/appium.log"));
appiumService = builder.build();
appiumService.start();
我们查看AppiumServiceBuilder的构造方法,以及该类的参数
//挑选了个别属性
public static final String NODE_PATH = "NODE_BINARY_PATH";
public static final String DEFAULT_LOCAL_IP_ADDRESS = "0.0.0.0";
private static final String APPIUM_FOLDER = "appium";
private static final String BUILD_FOLDER = "build";
private static final String LIB_FOLDER = "lib";
private static final String MAIN_JS = "main.js";
public static final int DEFAULT_APPIUM_PORT = 4723;
private static final String BASH = "bash";
private static final String CMD_EXE = "cmd.exe";
private String ipAddress = DEFAULT_LOCAL_IP_ADDRESS;
//The first starting is slow sometimes on some
//environment
private long startupTimeout = 120;
private TimeUnit timeUnit = TimeUnit.SECONDS;
public AppiumServiceBuilder() {
usingPort(DEFAULT_APPIUM_PORT);
withEnvironment(System.getenv());
}
会发现这些属性在创建对象时会给出默认值,我们也可以自己定义。
2.设置测试的系统IOS/Android
这个步骤不是必须的,如果只测试单独的系统就不需要有这个步骤。自动化代码如果是设计测试两种系统中的某个APP的话,后续的一些地方可能就需要根据不同的系统做不同的事情。
3.创建驱动
//以android为例
//appName是安装包的名称
File app = new File(TaxiConstants.APP_DIR, appName);
// 负责启动服务端时的参数设置
DesiredCapabilities capabilities = new DesiredCapabilities();
//如果检测到有APP,就不重新安装
capabilities.setCapability(MobileCapabilityType.NO_RESET, true);
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android");
//设置测试的平台是IOS/Android/FirefoxOS
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
//设置apk路径
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
//设置测试的web浏览器,如果测试的是移动浏览器则使用,如果是App则为空。
capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "");
capabilities.setCapability(MobileCapabilityType.TAKES_SCREENSHOT, "true");
//使用哪个自动化引擎(Android引擎:Appium(默认)、Selendroid、UiAutomator2或者Espresso)
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.ANDROID_UIAUTOMATOR2);
//多长时间没有消息就断开appium
capabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, TaxiConstants.NEW_COMMAND_TIMEOUT);
capabilities.setCapability(AndroidMobileCapabilityType.APP_WAIT_ACTIVITY,"com.didapinche.taxidriver.*");
capabilities.setCapability(AndroidMobileCapabilityType.NO_SIGN, true);
capabilities.setCapability(AndroidMobileCapabilityType.AUTO_GRANT_PERMISSIONS, true);
//使用unicodeKeyboard的编码方式来发送字符串
capabilities.setCapability(AndroidMobileCapabilityType.UNICODE_KEYBOARD, true);
//重置输入法到原有状态
capabilities.setCapability(AndroidMobileCapabilityType.RESET_KEYBOARD, true);
AppiumDriver<MobileElement>driver = new AndroidDriver<>(new URL(TaxiConstants.APPIUM_SERVER_URL), capabilities);
4.授权
新安装APP时总会弹出一些对内存,通讯录等的权限弹窗
for (int i = 0; i < times; i++) {
WebElement element = driver.findElement(MobileBy.xpath("//*[@class='android.widget.Button'][2]"));
if (element != null) {
if (element.isDisplayed()) {
element.click();
}
}
Thread.sleep(500);
}
5. 开始你的测试工作
到现在为止,准备工作已经完成了,下面就可以进行我们的测试工作了,各种测试逻辑就在这个步骤完成
6. 关闭appium service
appiumService.stop();
参考:
https://www.cnblogs.com/NaCl/p/10172142.html
https://blog.csdn.net/ljl6158999/article/details/80594521
来源:CSDN
作者:Clever99
链接:https://blog.csdn.net/Clever99/article/details/103698843