本篇文章主要介紹一個簡單的自動化案例腳本
-
案例名稱:
使用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");
}
}