天天看點

一個簡單的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");
	}
}
           

繼續閱讀