[Appium]使用android studio+java+appium進(jìn)行自動(dòng)化測(cè)試(一)環(huán)境搭建

使用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)境變量配置


image.png

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

image.png

三娃磺、使用android studio 編寫測(cè)試腳本(此處先以運(yùn)行官方demo為例)
1.創(chuàng)建項(xiàng)目
因?yàn)閍ndroid studio不能直接新建java項(xiàng)目薄湿,所以需要先創(chuàng)建一個(gè)android項(xiàng)目


image.png
image.png

image.png

image.png

image.png

最后點(diǎn)擊finish,然后應(yīng)該為這樣:
image.png

然后new module
image.png

選擇 java library
image.png

image.png

此處我創(chuàng)建的是一個(gè)名叫demoTest的library
創(chuàng)建完成之后是這樣的:
image.png

image.png

2.項(xiàng)目創(chuàng)建完成之后,需要?jiǎng)?chuàng)建一個(gè)文件夾
在項(xiàng)目的java目錄下偷卧,創(chuàng)建一個(gè)名叫apps的文件夾豺瘤,apps文件夾的目的是存放apk文件。
image.png

4.下載官方apk文件:
地址:https://github.com/appium-boneyard/sample-code/blob/master/sample-code/apps/ContactManager/ContactManager.apk
image.png

下載好之后听诸,將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


image.png

image.png

image.png

點(diǎn)擊+號(hào)豆混,選擇第一個(gè)篓像,第一個(gè)是從網(wǎng)絡(luò)加載
現(xiàn)在我們需要3個(gè)jar包


image.png

在搜索框中輸入appium,進(jìn)行搜索
image.png

在搜索框中輸入testng進(jìn)行搜索
image.png

在搜索框中輸入selenium進(jìn)行搜索
image.png

然后點(diǎn)擊ok.加載之后再在錯(cuò)誤上點(diǎn)擊ALT+ENTER 將包導(dǎo)入
7.啟動(dòng)appium
此時(shí)代碼準(zhǔn)備就緒皿伺,啟動(dòng)appium


image.png

此處host與上文代碼中的地址保持一致员辩,點(diǎn)擊start server 1.10.0
image.png

啟動(dòng)成功
8.開始運(yùn)行腳本
連上手機(jī)或者模擬器,運(yùn)行腳本
image.png

可以點(diǎn)擊這個(gè)按鈕運(yùn)行
image.png

也可以在AndroidContacatTest文件點(diǎn)擊右鍵鸵鸥,選擇run AndroidContacatTest 運(yùn)行
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奠滑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子妒穴,更是在濱河造成了極大的恐慌宋税,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讼油,死亡現(xiàn)場(chǎng)離奇詭異杰赛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)矮台,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門乏屯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阔墩,“玉大人,你說我怎么就攤上這事瓶珊⌒ン铮” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵伞芹,是天一觀的道長(zhǎng)忘苛。 經(jīng)常有香客問我,道長(zhǎng)唱较,這世上最難降的妖魔是什么扎唾? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮南缓,結(jié)果婚禮上胸遇,老公的妹妹穿的比我還像新娘。我一直安慰自己汉形,他們只是感情好纸镊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著概疆,像睡著了一般逗威。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岔冀,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天凯旭,我揣著相機(jī)與錄音,去河邊找鬼使套。 笑死罐呼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的侦高。 我是一名探鬼主播嫉柴,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼矫膨!你這毒婦竟也來了差凹?” 一聲冷哼從身側(cè)響起期奔,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤侧馅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后呐萌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體馁痴,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年肺孤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了罗晕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片济欢。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖小渊,靈堂內(nèi)的尸體忽然破棺而出法褥,到底是詐尸還是另有隱情,我是刑警寧澤酬屉,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布半等,位于F島的核電站,受9級(jí)特大地震影響呐萨,放射性物質(zhì)發(fā)生泄漏杀饵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一谬擦、第九天 我趴在偏房一處隱蔽的房頂上張望切距。 院中可真熱鬧,春花似錦惨远、人聲如沸谜悟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赌躺。三九已至,卻和暖如春羡儿,著一層夾襖步出監(jiān)牢的瞬間礼患,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工掠归, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缅叠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓虏冻,卻偏偏與公主長(zhǎng)得像肤粱,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子厨相,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355