本篇文章主要介绍一个简单的自动化案例脚本
- 案例名称:
使用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");
}
}