环境配置
package appium; import io.appium.java_client.android.*; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.concurrent.TimeUnit; import org.apache.commons.io.FileUtils; import org.openqa.selenium.OutputType; //import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.CapabilityType; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.JavascriptExecutor; import org.testng.Assert; //import org.testng.annotations.Test; import org.testng.annotations.BeforeTest; import org.testng.annotations.AfterTest; import org.testng.annotations.Parameters; import org.testng.annotations.Test; import java.util.*; public class appium { private AndroidDriver dr; private String reportPath = "C:\\inetpub\\wwwroot\\Content\\Images\\"; private int sleepBase = 1000; public String port; public String udid; public String pver; @BeforeTest //must be j2se-1.5 @Parameters({ "port", "udid" , "pver"}) public void beforeSuite(String port, String udid, String pver) { //public void beforeSuite() { this.port = port; this.udid = udid; this.pver = pver; //this.port = "4723"; //this.udid = "0123456789ABCDEF"; //this.pver = "4.4"; } @Test public void TC_001() throws InterruptedException, MalformedURLException { try { LaunchApp(); //Step1: go to view ClickByIndex("android.widget.ImageView", 6, "回单验证"); //Step2: fill the form ; To do: put the input text into XML java.util.List<WebElement> arrEditText= dr.findElementsByClassName("android.widget.EditText"); arrEditText.get(0).sendKeys("3243243255"); arrEditText.get(1).sendKeys("1112312345123451234512345456"); arrEditText.get(2).sendKeys("221234512345123456"); InputkeyboardNum(arrEditText.get(3)); arrEditText.get(4).sendKeys("441234123451234556"); arrEditText.get(5).sendKeys("551234123451234556"); PrintScreen(reportPath+udid+"_填写表单.jpg"); //Step3: click search ClickByID("com.boc.bocsoft.phone:id/btn_receipt_ok", "点击查询"); //Step4: check the string PrintScreen(reportPath+udid+"_回单验证查询.jpg"); String text = dr.findElementById("com.boc.bocsoft.phone:id/tv_receipt_result_one_show_no").getText(); Assert.assertEquals(text, "没有符合查询条件的交易回单"); } catch(Exception e) { e.printStackTrace(); } } @Test public void TC_002() throws InterruptedException, MalformedURLException { Login(); //Step1: go to view ClickByIndex("android.widget.ImageView", 3, "转账汇款"); //Step2: fill the form ClickByID("com.boc.bocsoft.phone:id/text_function_menu_child", "对公单笔汇款"); ClickByID("com.boc.bocsoft.phone:id/payee_picker", "选择收款人"); ClickByIndex("android.widget.TextView",2, "签约收款人"); ClickByIndex("android.widget.TextView",8, "选择签约收款人"); InputkeyboardNum(dr.findElementById("com.boc.bocsoft.phone:id/item_content")); //ClickByID("com.boc.bocsoft.phone:id/pick_indicator", "输入用途"); //dr.findElementById("com.boc.bocsoft.phone:id/usage_content").sendKeys("输入中文用途"); //dr.sendKeyEvent(4); //ClickByID("com.boc.bocsoft.phone:id/confirm", "确定"); for(int i =0; i< 3;i++) { swipeScreen(716.0, 988.0, 530.0, 504.0, 0.5, 4, dr); dr.swipe(716, 988, 530, 504, 1); } ClickByID("com.boc.bocsoft.phone:id/submit", "提交"); String expect = dr.findElementById("com.boc.bocsoft.phone:id/result_info").getText(); System.out.println(expect); ClickByID("com.boc.bocsoft.phone:id/main_iv_bank", "主页"); ClickByIndex("android.widget.ImageView", 3, "转账汇款"); ClickByIndex("android.widget.TextView", 9, "网银操作记录查询"); ClickByID("com.boc.bocsoft.phone:id/operation_record_trade_query", "查询网银操作记录"); List<WebElement> arrActual = dr.findElementsById("com.boc.bocsoft.phone:id/review_amount"); String actual = arrActual.get(arrActual.size()-1).getText(); System.out.println(actual); Assert.assertTrue(expect.contains(actual), "expect: " + expect + " ; actual: " + actual); } //basic operation private void ClickByID(String id, String log) throws InterruptedException, MalformedURLException { Thread.sleep(2000); System.out.println("Click " + log); dr.findElementById(id).click(); Thread.sleep(sleepBase * 5); PrintScreen(reportPath+udid+ "_" + log + ".jpg"); } private void ClickByIndex(String className, int index, String log) throws InterruptedException, MalformedURLException { Thread.sleep(2000); java.util.List<WebElement> arr= dr.findElementsByClassName(className); arr.get(index).click(); System.out.println("Click " + log); Thread.sleep(sleepBase * 5); PrintScreen(reportPath+udid+ "_" + log + ".jpg"); } private void SendKeysByID(String id, String keys) throws InterruptedException, MalformedURLException { System.out.println("Send " + keys); dr.findElementById(id).sendKeys(keys); Thread.sleep(1000); } private void Tappoint(int x, int y) throws InterruptedException, MalformedURLException { System.out.println("Tappoint: " + x + " , " + y); dr.tap(1, x, y, 100); Thread.sleep(1000); } private void PrintScreen(String fileName) throws InterruptedException, MalformedURLException { System.out.println(fileName); File file= null; try { file= dr.getScreenshotAs(OutputType.FILE); FileUtils.copyFile(file, new File(fileName)); } catch (IOException e) { e.printStackTrace(); } } // public static void swipeScreen(Double startX, Double startY, Double endX, Double endY, Double duration, int repeat, AndroidDriver driver) { JavascriptExecutor js = (JavascriptExecutor) driver; java.util.HashMap<String, Double> swipeObj = new java.util.HashMap<String, Double>(); swipeObj.put("startX", startX); swipeObj.put("startY", startY); swipeObj.put("endX", endX); swipeObj.put("endY", endY); for (int i = 0; i < repeat; i++) { try { js.executeScript("mobile: flick", swipeObj); } catch (Exception ex) { System.out.println("滑动屏幕失败"); } } } public static void scroll(String direction, AndroidDriver driver) { JavascriptExecutor js = (JavascriptExecutor) driver; java.util.HashMap<String, String> scrollObject = new java.util.HashMap<String, String>(); scrollObject.put("direction", direction); js.executeScript("mobile: scroll", scrollObject); } //app operation private void LaunchApp() throws InterruptedException, MalformedURLException { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); capabilities.setCapability("deviceName", udid); capabilities.setCapability("udid", udid); capabilities.setCapability("platformVersion", pver); capabilities.setCapability("platformName", "Android"); //aapt.exe dump badging apkPath capabilities.setCapability("appPackage", "com.boc.bocsoft.phone"); capabilities.setCapability("appActivity", "com.boc.bocsoft.phone.activity.business.splash.MEBSplashActivity"); capabilities.setCapability("unicodeKeyboard", "True"); //for input Chinese capabilities.setCapability("resetKeyboard", "True"); dr = new AndroidDriver(new URL("http://127.0.0.1:" + port + "/wd/hub"),capabilities); Thread.sleep(sleepBase * 10); PrintScreen(reportPath+udid+"_Launch.jpg"); } private void ExitAppium() { if(dr != null) { dr.closeApp(); } } private void Login() throws InterruptedException, MalformedURLException { try { LaunchApp(); ClickByID("com.boc.bocsoft.phone:id/main_title_right_btn", "登录"); SendKeysByID("com.boc.bocsoft.phone:id/et_login_user_name", "jqhd001"); //SendKeysByID("com.boc.bocsoft.phone:id/sipbox_login_password", "0123456789abc"); //SendKeysByID("com.boc.bocsoft.phone:id/sipbox_login_verifys", "456789"); dr.findElementById("com.boc.bocsoft.phone:id/sipbox_login_password").click(); Thread.sleep(3000); for(int i=0;i<5;i++) { Tappoint(60,1360); Tappoint(160,1360); } dr.sendKeyEvent(4); dr.findElementById("com.boc.bocsoft.phone:id/sipbox_login_verifys").click(); Thread.sleep(1000); for(int i=0;i<6;i++) { Tappoint(178,1360); } dr.sendKeyEvent(4); PrintScreen(reportPath+udid+"_登录.jpg"); ClickByID("com.boc.bocsoft.phone:id/tv_login_submits", "点击登录"); //wait for login: appium will automatic shutdown if no new cmd in 60s System.out.println("Wait 100s for login"); WebElement loginSign = null; for(int i=0;i<5;i++) { Thread.sleep(20000); Tappoint(0,0); try{ loginSign = dr.findElementById("com.boc.bocsoft.phone:id/btn_dialog_error_enter");} catch(Exception e){} if(loginSign != null) { System.out.println("Login done ! " + loginSign); ClickByID("com.boc.bocsoft.phone:id/btn_dialog_error_enter", "修改密码提示"); return; } } } catch(Exception e){} //to do: we may have to retry 3 times because login always failed by bad network } private void InputkeyboardNum(WebElement ele) throws InterruptedException, MalformedURLException { System.out.println("software keyboard: input 123"); ele.click(); Thread.sleep(2000); //int x = dr.manage().window().getSize().width; //int y = dr.manage().window().getSize().height; Tappoint(137, 1330); Tappoint(414, 1330); Tappoint(670, 1330); Tappoint(940, 1670); System.out.println("Input done"); } @AfterTest public void afterTest() { ExitAppium(); } }
<?xml version="1.0" encoding="UTF-8"?> <suite name="Suite1"> <parameter name = "port" value = "4723"/> <parameter name = "udid" value = "0123456789ABCDEF"/> <parameter name = "pver" value = "4.4"/> <test name="Test"> <classes> <class name="appium.appium"/> </classes> </test> <!-- Test --> </suite> <!-- Suite -->