好吧~終於要講框架了,首先我們先來個懶漢的方法,就是借用JUNIT框架來實現運行,作者用下來發現JUNIT對APPIUM的支持並不十分友善,但是用來教學到時很合適,來吧,作者開始氣定神閒+豪火球了。
import io.appium.java_client.android.AndroidDriver;
import java.io.File;
import java.net.URL;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import com.ciic.mywheel.stdoutput.StdOutput;
import com.ciic.mywheel.waituntil.WaitUntilFindElementById;
import com.ciic.mywheel.waituntil.WaitUntilFindElementByName;
public class TestCase_One {
public static AndroidDriver<?> driver;
// 配置內容
private static String apkName = "weixin.apk";
private static String platformVersion = "4.4.2";
private static String serverURL = "http://127.0.0.1:4723/wd/hub";
//before 就是用例開始前的準備工作==========================================
@Before
public void setUp() throws Exception {
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "apps");
File app = new File(appDir, apkName);
new DesiredCapabilities();
DesiredCapabilities capabilities = DesiredCapabilities.android();
capabilities.setCapability("unicodeKeyboard", "True");
capabilities.setCapability("resetKeyboard", "True");
capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("deviceName", "Android Emulator");
capabilities.setCapability("platformVersion", platformVersion);
capabilities.setCapability("app", app.getAbsolutePath());
//核心關鍵步驟
driver = new AndroidDriver<WebElement>(new URL(serverURL),
capabilities);
// LOG記錄
StdOutput.print("【Appium驅動】初始化成功");
}
//test就是用例的主題部分=================================================
@Test
public void testSubstract() {
try {
WaitUntilFindElementByName waitUnitlByName = new WaitUntilFindElementByName();
// 登錄界面
waitUnitlByName.waitUntilInit(driver, "登錄", 30);
waitUnitlByName.waitUntilLoading();
driver.findElement(By.name("登錄")).click();
// 使用其他登錄方式
waitUnitlByName.waitUntilInit(driver, "使用其他方式登錄", 30);
waitUnitlByName.waitUntilLoading();
driver.findElement(By.name("使用其他方式登錄")).click();
// QQ號登錄
waitUnitlByName.waitUntilInit(driver, "QQ號/微信號/Email", 30);
waitUnitlByName.waitUntilLoading();
driver.findElementByName("QQ號/微信號/Email").sendKeys("353732443");
Thread.sleep(1000);
driver.findElementByXPath( "//android.widget.LinearLayout[@resource-id='com.tencent.mm:id/alr']/android.widget.EditText") .sendKeys("kfjghfjruhghdd");
Thread.sleep(1000);
driver.findElementByName("登錄").click();
// WAITUNTIL對象
WaitUntilFindElementById waitUnitlById = new WaitUntilFindElementById( driver, "com.tencent.mm:id/bmm", 30);
waitUnitlById.waitUntilLoading();
driver.findElementById("com.tencent.mm:id/bmm").click();
//=========================================================
// 進入微信
Thread.sleep(10000);
//=========================================================
driver.swipe(800, 900, 100, 900, 2000);
Thread.sleep(2000);
driver.findElementByName("公衆號").click();
Thread.sleep(2000);
driver.tap(1, 865, 1216, 500);
Thread.sleep(2000);
driver.findElementByName("微信測試號").click();
// 進入微信公衆號項目首頁
// WAITUNTIL對象
waitUnitlByName.waitUntilInit(driver, "測試之路", 30);
waitUnitlByName.waitUntilLoading();
driver.findElementByName("測試之路").click();
} catch (InterruptedException e) {
// TODO 自動生成的 catch 塊
e.printStackTrace();
}
}
//after爲用例的結束收尾工作==========================================
@After
public void tearDown() throws Exception {
driver.quit();
}
}
寫好這樣的用例之後,右擊運行選擇【JUNIT測試】運行就可以了。有幾條就寫幾條。
不過作者在使用JUNIT4的時候發現,JUNIT4對APPIUM的支持不是很好,驅動有時候老是啓動不起來,而且JUNIT4對排序做的並不十分友善,如果不使用SUIT容器來排序,JUINT4是無序運行的,但是用了SUIT容器則一個用例失敗後,後續的用例就都全部失敗了,在這裏作者也老實交代,對JUNIT4瞭解的也不多,如果有大神可以解惑的,也請教導一下小弟。
以上代碼作者已經對部分appium的函數做了封裝,所以大家只要看個格式和思路就可以了,由於JUNIT4的各種奇怪問題,在後面作者將分享自己的構思給大家,客觀不要着急,先休息休息一下。