Appium自动化测试——测试流程

不问归期 提交于 2019-12-25 19:51:18

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!