/**
* 所有执行结果,均在Excel->output.xls中查看。。
*/
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileCapabilityType;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.List;
import junit.framework.TestCase;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
public class SmokeTest {
private static AppiumDriver driver;
public int i = 1;//找不到控件时,进行计数
public int j = 0;//控制sheet表
public int k = 7;//控制Excel记录结果的位置
public int m = 1;//页面元素不对时,控制次数
boolean flagment = false;
String button_text, textName;
WritableSheet sheetToEdit;
WritableCell cell;
static Workbook rwb;
static WritableWorkbook workbookCopy;
//配置参数连接Appium,启动App,读取aa.xls里面的数据,生成output.xls数据
@BeforeClass
public static void beforeClass() throws BiffException, IOException{
System.out.println("--------------- 配置参数连接Appium,并启动App ---------------");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "");
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
capabilities.setCapability("unicodeKeyboard", true);
capabilities.setCapability("resetKeyboard", true);
capabilities.setCapability(MobileCapabilityType.APP_PACKAGE, "com.xxx");
capabilities.setCapability(MobileCapabilityType.APP_ACTIVITY, "com.xxx.LoginActivity");
driver = new AndroidDriver(new URL("http://LocalHost:4723/wd/hub"), capabilities);
InputStream stream = new FileInputStream("Excel/ab.xls");
rwb = Workbook.getWorkbook(stream);
workbookCopy = Workbook.createWorkbook(new File("Excel/output.xls"), rwb);
}
@Before
public void setup() throws Exception {
j = 0;
System.out.println("--------------- 执行测试用例开始 ---------------");
}
//每一次新开始执行用例,k++来纪录结果位置后移一位
@After
public void tearDown() throws Exception {
System.out.println("--------------- 执行测试用例结束 ---------------");
}
//写入数据到output.xls,并终止
@AfterClass
public static void afterClass() throws WriteException, IOException{
workbookCopy.write();
workbookCopy.close();
rwb.close();
System.out.println("--------------- driver.quit ---------------");
driver.quit();
}
//执行点击操作,如果元素没找到或者没执行点击,则尝试5次,5次后还是没找到则下一步
public boolean FunctionForClick(String s, String s1){
while(i <= 5){
try{
driver.findElementById(s).click();
System.out.println("---------- 已找到元素:<" + s1 + ">,且已执行点击操作~");
flagment = true;
break;
}catch (Exception e){
System.out.println("---------- 尝试第" + i + "次,无法执行元素:<" + s1 + ">的点击操作!!");
i++;
}
if (i == 6){
System.out.println("########## 已尝试5次,均未无法执行元素:<" + s1 + ">的点击操作!!");
flagment = false;
}
}
return flagment;
}
//执行输入文本操作,如果元素没找到或者没执行点击,则尝试5次,5次后还是没找到则下一步
public boolean FunctionForSendText(String s, String sa, String s1){
while(i <= 5){
try{
driver.findElementById(s).sendKeys(sa);
System.out.println("---------- 已找到元素:<" + s1 + ">,且已执行发送文本操作~");
flagment = true;
break;
}catch (Exception e){
System.out.println("---------- 尝试第" + i + "次,无法执行元素:<" + s1 + ">的输入文本操作!!");
i++;
}
if (i == 6){
System.out.println("########## 已尝试5次,均未无法执行元素:<" + s1 + ">的输入文本操作!!");
flagment = false;
}
}
return flagment;
}
//执行清空文本操作,如果元素没找到或者没执行点击,则尝试5次,5次后还是没找到则下一步
public boolean FunctionForClear(String s, String s1){
while(i <= 5){
try{
driver.findElementById(s).clear();
System.out.println("---------- 已找到元素:<" + s1 + ">,且已执行清空操作~");
flagment = true;
break;
}catch (Exception e){
System.out.println("---------- 尝试第" + i + "次,无法执行元素:<" + s1 + ">的清空操作!!");
i++;
}
if (i == 6){
System.out.println("########## 已尝试5次,均无法无法执行元素:<" + s1 + ">的清空操作!!");
flagment = false;
}
}
return flagment;
}
public boolean FunctionForClass(String s, String s1, int s2){
while(i <= 5){
try{
List<WebElement> list = driver.findElementsByClassName(s);
WebElement Button = list.get(s2);
Button.click();
System.out.println("---------- 已找到元素:<" + s1 + ">,且已执行查找class操作~");
flagment = true;
break;
}catch (Exception e){
System.out.println("---------- 尝试第" + i + "次,无法执行元素:<" + s1 + ">的查找class操作!!");
i++;
}
if (i == 6){
System.out.println("########## 已尝试5次,均无法无法执行元素:<" + s1 + ">的清空操作!!");
flagment = false;
}
}
return flagment;
}
@Test
public void Smoke() throws InterruptedException, BiffException, IOException, RowsExceededException, WriteException {
for(; j < workbookCopy.getNumberOfSheets();j++){
sheetToEdit = workbookCopy.getSheet(j);
for (int n = 2; n < sheetToEdit.getRows();){
i = 1;
m = 1;
boolean flag = false;
String forID = sheetToEdit.getCell(1, n).getContents().toString();
String forText = sheetToEdit.getCell(2,n).getContents().toString();
String forIndex = sheetToEdit.getCell(3,n).getContents().toString();
String forSendText = sheetToEdit.getCell(4, n).getContents().toString();
String forAction = sheetToEdit.getCell(5, n).getContents().toString();
String forCommits = sheetToEdit.getCell(6, n).getContents().toString();
if ((forAction.equals("点击")) && !forID.equals("") && forIndex.equals("")){
flag = FunctionForClick(forID, forCommits);
Thread.sleep(1000);
}
if (forAction.equals("") && !forSendText.equals("") && !forID.equals("") && forIndex.equals("")){
flag = FunctionForSendText(forID, forSendText, forCommits);
Thread.sleep(1000);
}
if (forAction.equals("清空") && !forID.equals("") && forIndex.equals("")){
flag = FunctionForClear(forID, forCommits);
Thread.sleep(1000);
}
if ((forAction.equals("点击")) && !forID.equals("") && !forIndex.equals("")){
flag = FunctionForClass(forID, forCommits, Integer.parseInt(forIndex));
Thread.sleep(1000);
}
if (flag == true){
Label l = new Label(k, n, "通过");
cell = (WritableCell) l;
sheetToEdit.addCell(cell);
n++;
}else if (flag == false){
Label l = new Label(k, n, "Not Found");
cell = (WritableCell) l;
sheetToEdit.addCell(cell);
n++;
}
//当前Sheet表中内容全部执行完后,就先找到相应的tab页,如果找到了就下一步;如果没找到,进行返回操作;如果5次内都无法执行返回,则账户可能已被迫下线,继续执行
if (n == sheetToEdit.getRows()){
while(m <= 5){
try{
driver.findElementById(workbookCopy.getSheet(j).getCell(1,1).getContents().toString());
Thread.sleep(1000);
m = 1;
System.out.println("---------- 已在当前Sheet表中第一个元素所在界面:<" + workbookCopy.getSheet(j).getCell(6,1).getContents().toString() + "> ^^^^^^");
break;
}catch(Exception e){
try{
driver.navigate().back();
Thread.sleep(1000);
System.out.println("---------- 未在当前Sheet表中第一个元素所在界面,执行返回");
m++;
}catch (Exception e2){
System.out.println("---------- 尝试第" + m + "次,无执行返回 @@@@@");
m++;
}
if (m == 6){
System.out.println("@@@@@@@@@@ 已尝试5次,无法返回到当前Sheet表中第一个元素所在界面,估计已被迫下线,或未进入指定界面,请重新执行 @@@@@@@@@@");
Label l = new Label(k, n, "无法返回到当前Sheet表中第一个元素所在界面,估计已被迫下线,或未进入指定页面,请重新执行");
cell = (WritableCell) l;
sheetToEdit.addCell(cell);
TestCase.assertTrue(false);
}
}
}
n++;
}
}
}
}
@Test
public void testRepeat() throws RowsExceededException, BiffException, WriteException, InterruptedException, IOException{
for(int w = 1; w <= 2; w++){
System.out.println("第" + (w + 1) + "次循环");
try{
driver.findElementById("com.xxx:id/btn_login");
j = 0;
k++;
Smoke();
}catch(Exception e){
j = 1;
k++;
Smoke();
}
}
}
}
自己写的比较搓,有不对之处,请高手指正
现在的问题是,程序跑着跑着就自己返回到待机桌面了
相关资料:http://blog.csdn.net/liuchangxin1982/article/category/5722775