好吧~终于要讲框架了,首先我们先来个懒汉的方法,就是借用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的各种奇怪问题,在后面作者将分享自己的构思给大家,客观不要着急,先休息休息一下。