本文共 3581 字,大约阅读时间需要 11 分钟。
有多种启动方式,在自动化测试中最长使用的就是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()); }
会发现这些属性在创建对象时会给出默认值,我们也可以自己定义。
这个步骤不是必须的,如果只测试单独的系统就不需要有这个步骤。自动化代码如果是设计测试两种系统中的某个APP的话,后续的一些地方可能就需要根据不同的系统做不同的事情。
//以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/FirefoxOScapabilities.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);//多长时间没有消息就断开appiumcapabilities.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);AppiumDriverdriver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
新安装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);}
到现在为止,准备工作已经完成了,下面就可以进行我们的测试工作了,各种测试逻辑就在这个步骤完成
appiumService.stop();
参考:
https://www.cnblogs.com/NaCl/p/10172142.html https://blog.csdn.net/ljl6158999/article/details/80594521