天天看点

一个简单的App自动化案例

本篇文章主要介绍一个简单的自动化案例脚本

  • 案例名称:

    使用12306App查询XX日武汉-上海的高铁/动车信息

  • 案例实现步骤:

    1.进入12306App系统;

    2.设置始发、终到站信息(本案例始发站为武汉,终到站为上海);

    3.选择出发日期(本案例选择为2020.5.20日,可以自行设置);

    4.勾选只看高铁/动车选项;

    5.单击查询按钮.

  • 校验案例是否通过;

    根据当前页面Activity与车次展示页面Activity是否一致来判断案例是否通过(车次展示页面Activity可预先通过adb命令获取到).

  • 案例代码(原始):
public class TrainSearch {
	private DesiredCapabilities desiredCapabilities = null;
	
	private AndroidDriver<WebElement> androidDriver = null;
	
	@BeforeTest
	public void setAppStartConfig() throws MalformedURLException {
		/**
		 * 1.创建配置对象
		 **/
		desiredCapabilities = new DesiredCapabilities();
		
		/**
		 * 2.添加配置
		 **/
		//deviceName:找到测试设备
		desiredCapabilities.setCapability("deviceName", "127.0.0.1:62025");
		//platformName:确定测试平台
		desiredCapabilities.setCapability("platformName", "Android");
		//appPackage:找到需要测试的APP
		desiredCapabilities.setCapability("appPackage", "com.MobileTicket");
		//appActivity:测试APP的启动入口
		desiredCapabilities.setCapability("appActivity", "com.alipay.mobile.quinox.LauncherActivity");
		//设置自动化使用的引擎
		desiredCapabilities.setCapability("automationName", "uiautomator2");
		//设置app启动不清除数据
		desiredCapabilities.setCapability("noReset", true);
		
		/**
		 * 3.创建驱动 
		 **/
		androidDriver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"),desiredCapabilities);
	}
	
	@Test
	public void testTrainSearch() {
		/**
		 * 设置始发站 
		 **/
		FindElement.findElementById(androidDriver, "com.MobileTicket.launcher:id/train_home_dep", 10).click();
		androidDriver.context("WEBVIEW_com.MobileTicket");
		FindElement.findElementByXpath(androidDriver, "//input[@placeholder='请输入城市/车站名'] ", 5).sendKeys("武汉");
		FindElement.findElementByXpath(androidDriver, "//b[text()='武汉']//ancestor::li[1]", 3).click();
		androidDriver.context("NATIVE_APP");
		/**
		 * 设置终到站 
		 **/
		FindElement.findElementById(androidDriver, "com.MobileTicket.launcher:id/train_home_arrive", 3).click();
		IntervalTime.waitTime(2);
		androidDriver.context("WEBVIEW_com.MobileTicket");
		FindElement.findElementByXpath(androidDriver, "//input[@placeholder='请输入城市/车站名'] ", 6).sendKeys("上海");
		FindElement.findElementByXpath(androidDriver, "//b[text()='上海']//ancestor::li[1]", 3).click();
		androidDriver.context("NATIVE_APP");
		/**
		 * 设置出发时间 
		 **/
		FindElement.findElementById(androidDriver, "com.MobileTicket.launcher:id/ticket_home_depart_date_view_container", 3).click();
		IntervalTime.waitTime(2);
		androidDriver.context("WEBVIEW_com.MobileTicket");
		FindElement.findElementByXpath(androidDriver, "//strong[text()=20]//ancestor::li[1]", 3).click();
		androidDriver.context("NATIVE_APP");
		/**
		 * 选中只看高铁/动车选项 
		 **/
		FindElement.findElementById(androidDriver, "com.MobileTicket.launcher:id/ticket_home_type_checkbox", 3).click();
		/**
		 * 单击查询按钮 
		 **/
		FindElement.findElementById(androidDriver, "com.MobileTicket.launcher:id/ticket_home_btn_search", 0).click();
		/**
		 * 校验页面Activity 
		 **/
		Assert.assertEquals(androidDriver.currentActivity(), "com.alipay.mobile.nebulacore.ui.H5Activity");
	}
}
           
  • 案例代码(优化后)

    上述代码可以看出始发站、终到站选择代码为同一逻辑,为避免代码冗余可以做适当的优化,优化后的代码如下:

public class TrainSearch {
	private DesiredCapabilities desiredCapabilities = null;
	
	private AndroidDriver<WebElement> androidDriver = null;
	
	@BeforeTest
	public void setAppStartConfig() throws MalformedURLException {
		/**
		 * 1.创建配置对象
		 **/
		desiredCapabilities = new DesiredCapabilities();
		
		/**
		 * 2.添加配置
		 **/
		//deviceName:找到测试设备
		desiredCapabilities.setCapability("deviceName", "127.0.0.1:62025");
		//platformName:确定测试平台
		desiredCapabilities.setCapability("platformName", "Android");
		//appPackage:找到需要测试的APP
		desiredCapabilities.setCapability("appPackage", "com.MobileTicket");
		//appActivity:测试APP的启动入口
		desiredCapabilities.setCapability("appActivity", "com.alipay.mobile.quinox.LauncherActivity");
		//设置自动化使用的引擎
		desiredCapabilities.setCapability("automationName", "uiautomator2");
		//设置app启动不清除数据
		desiredCapabilities.setCapability("noReset", true);
		
		/**
		 * 3.创建驱动 
		 **/
		androidDriver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"),desiredCapabilities);
	}
	
	@Test
	public void testTrainSearch() {
		/**
		 * 设置始发站 
		 **/
		FindElement.findElementById(androidDriver, "com.MobileTicket.launcher:id/train_home_dep", 10).click();
		chooseStation(androidDriver, "武汉");
		/**
		 * 设置终到站 
		 **/
		FindElement.findElementById(androidDriver, "com.MobileTicket.launcher:id/train_home_arrive", 3).click();
		IntervalTime.waitTime(2);
		chooseStation(androidDriver, "上海");
		/**
		 * 设置出发时间 
		 **/
		FindElement.findElementById(androidDriver, "com.MobileTicket.launcher:id/ticket_home_depart_date_view_container", 3).click();
		IntervalTime.waitTime(2);
		androidDriver.context("WEBVIEW_com.MobileTicket");
		FindElement.findElementByXpath(androidDriver, "//strong[text()=20]//ancestor::li[1]", 3).click();
		androidDriver.context("NATIVE_APP");
		/**
		 * 选中只看高铁/动车选项 
		 **/
		FindElement.findElementById(androidDriver, "com.MobileTicket.launcher:id/ticket_home_type_checkbox", 3).click();
		/**
		 * 单击查询按钮 
		 **/
		FindElement.findElementById(androidDriver, "com.MobileTicket.launcher:id/ticket_home_btn_search", 0).click();
		/**
		 * 校验页面Activity 
		 **/
		Assert.assertEquals(androidDriver.currentActivity(), "com.alipay.mobile.nebulacore.ui.H5Activity");
	}
		/**
		 * 车站选择公共方法 
		 **/
	public void chooseStation(AndroidDriver<WebElement> androidDriver,String stationName) {
		androidDriver.context("WEBVIEW_com.MobileTicket");
		FindElement.findElementByXpath(androidDriver, "//input[@placeholder='请输入城市/车站名'] ", 6).sendKeys(stationName);
		FindElement.findElementByXpath(androidDriver, "//b[text()='" + stationName + "']//ancestor::li[1]", 3).click();
		androidDriver.context("NATIVE_APP");
	}
}
           

继续阅读