使用android studio+java+appium進(jìn)行自動(dòng)化測(cè)試
一、準(zhǔn)備好需要安裝的軟件
1.JDK
2.sdk
3.android studio
4.appium 最新版為1.10.0
5.安卓模擬器或真機(jī)
6.一些需要的jar包森爽,添加方式下文詳細(xì)說明
二督函、環(huán)境變量
1.JDK
安裝好JDK之后嘀粱,進(jìn)行環(huán)境變量配置
classpath中:
變量名:%JAVA_HOME%
變量值:C:\Program Files\Java\jdk1.8.0_131 (找到自己jdk安裝路徑即可)path中:
%JAVA_HOME%\bin;
2.SDK
將sdk解壓到某個(gè)盤激挪,sdk的路徑不要包含中文。
classpath中:
變量名:%Android_Home%
變量值:D:\Android\androidsdk (此處是自己的安裝路徑)
在path中添加:
%Android_Home%\platform-tools;%Android_Home%\tools;
3.android studio
這個(gè)直接安裝就可以了锋叨,可以安裝到其他盤垄分,不一定是C盤
4.appium
直接點(diǎn)擊安裝,安裝完成后
classpath中:
變量值:APPIUM_HOME
變量名:C:\Program Files (x86)\Appium
path中:
%APPIUM_HOME%\node_modules.bin
三娃磺、使用android studio 編寫測(cè)試腳本(此處先以運(yùn)行官方demo為例)
1.創(chuàng)建項(xiàng)目
因?yàn)閍ndroid studio不能直接新建java項(xiàng)目薄湿,所以需要先創(chuàng)建一個(gè)android項(xiàng)目
最后點(diǎn)擊finish,然后應(yīng)該為這樣:
然后new module
選擇 java library
此處我創(chuàng)建的是一個(gè)名叫demoTest的library
創(chuàng)建完成之后是這樣的:
2.項(xiàng)目創(chuàng)建完成之后,需要?jiǎng)?chuàng)建一個(gè)文件夾
在項(xiàng)目的java目錄下偷卧,創(chuàng)建一個(gè)名叫apps的文件夾豺瘤,apps文件夾的目的是存放apk文件。
4.下載官方apk文件:
地址:https://github.com/appium-boneyard/sample-code/blob/master/sample-code/apps/ContactManager/ContactManager.apk
下載好之后听诸,將apk文件放入剛剛創(chuàng)建的apps文件夾中
5.官方例子中有各種測(cè)試腳本的例子炉奴。官方地址為:
https://github.com/appium-boneyard/sample-code/tree/master/sample-code/examples/java
由于這里需要對(duì)官方代碼有一些改動(dòng),所以我直接粘貼過來蛇更,直接復(fù)制就行
public class AndroidContactaTest {
private AppiumDriver<AndroidElement> mobiledriver;
private SwipeClass swipe;
@BeforeTest
public void beforeTest( ) throws MalformedURLException {
File classpathRoot = new File(System.getProperty("user.dir"));
//app的目錄
File appDir = new File(classpathRoot, "/src/main/java/apps/");
//app的名字瞻赶,對(duì)應(yīng)你apps目錄下的文件
File app = new File(appDir, "ContactManager.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
//appium的版本
capabilities.setCapability(MobileCapabilityType.APPIUM_VERSION, "1.10.0");
//android系統(tǒng)的版本
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "5.1.1");
//系統(tǒng)
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME,"Android");
//
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME,"Appium");
//設(shè)備名稱 模擬器名稱
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "yyf");
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
//設(shè)置app的包名
capabilities.setCapability("appPackage", "com.example.android.contactmanager");
//設(shè)置app的啟動(dòng)activity
capabilities.setCapability("appActivity", ".ContactManager");
capabilities.setCapability("newCommandTimeout", 2000);
//此處的地址是appium中的host地址,可以自己修改,只要與appium對(duì)應(yīng)就可以
mobiledriver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@AfterTest
public void afterTest( ) {
mobiledriver.quit();
}
/**
* 要執(zhí)行的的測(cè)試方法
*/
@Test
public void addContact(){
//利用Xpath的方法尋找text值為Add Contact的控件
WebElement el = mobiledriver.findElement(By.xpath(".//*[@text='Add Contact']"));
//點(diǎn)擊這個(gè)控件
el.click();
//利用類名獲取界面上所有的EditText
List<AndroidElement> textFieldsList = mobiledriver.findElementsByClassName("android.widget.EditText");
//第一個(gè)EditText輸入內(nèi)容Some Name
textFieldsList.get(0).sendKeys("Some Name");
//第三個(gè)EditText輸入內(nèi)容Some Name
textFieldsList.get(2).sendKeys("Some@example.com");
//在坐(100,500)滑動(dòng)到(100,100) 時(shí)間為2毫秒
swipe.swipeToDown(mobiledriver);
//用xpath的方式尋找到text值為Save的控件鹃骂,然后點(diǎn)擊
mobiledriver.findElementByXPath(".//*[@text='Save']").click();
}
}
直接復(fù)制粘貼就好,由于appium 1.10不支持swipe滑動(dòng)來定義坐標(biāo)笼平,所以我們需要自己創(chuàng)建一個(gè)類,我創(chuàng)建的類名為SwipeClass
對(duì)應(yīng)的代碼為:
public class SwipeClass {
static Duration duration=Duration.ofSeconds(1);
public void swipeToUp(AppiumDriver driver) {
int width = driver.manage().window().getSize().width;
int height = driver.manage().window().getSize().height;
TouchAction action1=new TouchAction(driver).press(PointOption.point(width/2, height*3/4)).waitAction(WaitOptions.waitOptions(duration))
.moveTo(PointOption.point(width/2, height/4)).release();
action1.perform();
}
public void swipeToDown(AppiumDriver driver) {
int width = driver.manage().window().getSize().width;
int height = driver.manage().window().getSize().height;
TouchAction action2=new TouchAction(driver).press(PointOption.point(width/2, height/4)).waitAction(WaitOptions.waitOptions(duration))
.moveTo(PointOption.point(width/2, height*3/4)).release();
action2.perform();
}
public void swipeToLeft(AppiumDriver driver) {
int width = driver.manage().window().getSize().width;
int height = driver.manage().window().getSize().height;
TouchAction action3=new TouchAction(driver).press(PointOption.point(width*3/4, height/2)).waitAction(WaitOptions.waitOptions(duration))
.moveTo(PointOption.point(width/4,height/2)).release();
action3.perform();
}
public void swipeToRight(AppiumDriver driver) {
int width = driver.manage().window().getSize().width;
int height = driver.manage().window().getSize().height;
TouchAction action4=new TouchAction(driver).press(PointOption.point(width / 4, height / 2)).waitAction(WaitOptions.waitOptions(duration))
.moveTo(PointOption.point(width*3/4,height/2)).release();
action4.perform();
}
}
現(xiàn)在發(fā)現(xiàn)代碼中會(huì)有一些錯(cuò)誤师逸,原因是因?yàn)槲覀儧]有導(dǎo)入需要的jar包。接下來我們開始導(dǎo)入jar包
6.jar包導(dǎo)入
File--->project sturcture
點(diǎn)擊+號(hào)豆混,選擇第一個(gè)篓像,第一個(gè)是從網(wǎng)絡(luò)加載
現(xiàn)在我們需要3個(gè)jar包
在搜索框中輸入appium,進(jìn)行搜索
在搜索框中輸入testng進(jìn)行搜索
在搜索框中輸入selenium進(jìn)行搜索
然后點(diǎn)擊ok.加載之后再在錯(cuò)誤上點(diǎn)擊ALT+ENTER 將包導(dǎo)入
7.啟動(dòng)appium
此時(shí)代碼準(zhǔn)備就緒皿伺,啟動(dòng)appium
此處host與上文代碼中的地址保持一致员辩,點(diǎn)擊start server 1.10.0
啟動(dòng)成功
8.開始運(yùn)行腳本
連上手機(jī)或者模擬器,運(yùn)行腳本
可以點(diǎn)擊這個(gè)按鈕運(yùn)行
也可以在AndroidContacatTest文件點(diǎn)擊右鍵鸵鸥,選擇run AndroidContacatTest 運(yùn)行