Appium監(jiān)聽(tīng)边败,失敗自動(dòng)截圖——2018-04-17

自動(dòng)化跑用例,必須要有結(jié)果展示捎废,才能知道腳本跑測(cè)的情況笑窜,而我使用的是Appium+TestNG+java來(lái)寫(xiě)腳本,而截圖尤為重要登疗,腳本pass倒沒(méi)事排截,若是fail,那怎么辦辐益?所以断傲,我們需要一個(gè)腳本跑fail了就自動(dòng)截圖的功能。那么問(wèn)題來(lái)了智政,這個(gè)組合认罩,默認(rèn)情況下,并沒(méi)有截圖功能续捂,那么我們就需要自己寫(xiě)一個(gè)截圖的功能垦垂。
經(jīng)過(guò)查找資料,了解到牙瓢,TestNG作為測(cè)試框架劫拗,有多個(gè)監(jiān)聽(tīng)器接口和類(lèi),這里我們需要用到的是ITestListener接口矾克,只需要注冊(cè)就可以監(jiān)聽(tīng)腳本页慷,

如何實(shí)現(xiàn)監(jiān)聽(tīng)器類(lèi)?

其方法有如下

onFinish(ITestContext arg0)

onStart(ITestContext arg0)

onTestFailedButWithinSuccessPercentage(ITestResult arg0)

onTestFailure(ITestResult result)

onTestSkipped(ITestResult arg0)

onTestStart(ITestResult arg0)

onTestSuccess(ITestResult arg0)

詞即義聂渊,方法什么意思看詞語(yǔ)就知道差购,此處,我們需要的是用例失敗即自動(dòng)截圖功能汉嗽,那我們把截圖功能放到onTestFailure(ITestResult result)方法下欲逃,那么我們需要先建一個(gè)類(lèi),我們就叫它ScreenshotListener吧饼暑,然后把這個(gè)類(lèi)實(shí)現(xiàn)ITestListener接口稳析,即

public class ScreenshotListener implements ITestListener

onTestFailure方法代碼如下

    public void onTestFailure(ITestResult result)
    {

        // 跑fail則截圖
        // 獲取屏幕截圖
        File srcFile = (driver).getScreenshotAs(OutputType.FILE);
        // System.out.println(srcFile.getAbsolutePath().toString());
        DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_hhmmss");
        File location = new File("screenshots");
        String dest = result.getMethod().getRealClass().getSimpleName() + "." + result.getMethod().getMethodName();
        File targetFile =
            new File(location.getAbsolutePath() + File.separator + dest + "_" + dateFormat.format(new Date()) + ".png");
        System.out.println("截圖位置:");
        System.out.println("----------------- file is " + targetFile.getPath());
        try
        {
            FileUtils.copyFile(srcFile, targetFile);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        
    }

怎么用監(jiān)聽(tīng)器?

此處弓叛,我只實(shí)現(xiàn)了用例失敗自動(dòng)監(jiān)聽(tīng)截圖監(jiān)聽(tīng)器類(lèi)彰居,那么怎么用呢?我用的方法是在腳本類(lèi)前面加入一個(gè)注解撰筷,代碼如下

import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;

import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidKeyCode;
@Listeners({ScreenshotListener.class})  //此處需要寫(xiě)入監(jiān)聽(tīng)器注解
public class Display
{
     private AndroidDriver driver;
    
    AppiumUtil appiumUtil = new AppiumUtil();
    
    /**
     * 1.屏幕上方跳出亮度條調(diào)節(jié)框
     * 2.亮度條調(diào)節(jié)框消失
     */
  @Test
    public void brightnessLevel_003()
    {
                driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        WebElement webElement = driver.findElementByAndroidUIAutomator(appiumUtil.scrollTo("Display", AppiumUtil.NAME));
        webElement.click();
        
        driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
        webElement = driver.findElementByName("Brightness level");
        
        webElement.click();
        driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
        driver.pressKeyCode(AndroidKeyCode.BACK);
    }

    /** 
     * step
    1.點(diǎn)擊進(jìn)入設(shè)置 --> 顯示 --> 壁紙陈惰,觀察界面
    
    result
    1.界面顯示動(dòng)態(tài)壁紙、壁紙毕籽、谷歌相冊(cè)
    */
    @Test
    public void enterWallpaper_012()
    {
        driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
        WebElement webElement = driver.findElementByName("Wallpaper");
        webElement.click();
        driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
    }
    @BeforeTest
    public void beforeTest()
        throws Exception
    {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName", "Android Devices");
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("platformVersion", "7.0");
        capabilities.setCapability("udid", "HKL3XDH8");
        capabilities.setCapability("automationName", "Uiautomator2");
        capabilities.setCapability("appPackage", "com.android.settings");
        capabilities.setCapability("appActivity", ".Settings");
        capabilities.setCapability("NoReset", true);
        driver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
        ScreenshotListener.driver = driver;  //此處需要把driver傳入給監(jiān)聽(tīng)器抬闯,否則監(jiān)聽(tīng)器使用driver的時(shí)候井辆,會(huì)拋空指針
        System.out.println("啟動(dòng)應(yīng)用!");
    }
    
    @AfterTest
    public void afterTest()
    {
        driver.quit();
        System.out.println("退出driver溶握!");
    }
}

然后試跑一下杯缺,我刻意把用例跑失敗,得出如下睡榆,圖片好像上傳不了萍肆,稍后傳上
總結(jié),自動(dòng)化跑腳本失敗時(shí)胀屿,可以通過(guò)添加監(jiān)聽(tīng)器類(lèi)塘揣,實(shí)現(xiàn)自動(dòng)截圖功能,監(jiān)聽(tīng)器類(lèi)的實(shí)現(xiàn)方法和如何使用監(jiān)聽(tīng)器類(lèi)以上有提到宿崭。
疑問(wèn):注冊(cè)監(jiān)聽(tīng)器的另外一種方式勿负,也可以在testng.xml文件添加監(jiān)聽(tīng)器,我的如下

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">


  <listeners>
    <listener class-name="com.hq.prodreamer.DisplayTest.ScreenshotListener" />
  </listeners> 

  <test name="Display">
    <classes>
      <class name="com.hq.prodreamer.DisplayTest.Display"/>
    </classes>
    
    <listeners>
        //這是你需要加的東西
        <listener class-name="org.uncommons.reportng.HTMLReporter" />
        <listener class-name="org.uncommons.reportng.JUnitXMLReporter" />
    </listeners>
    
  </test> <!-- Test -->
</suite> <!-- Suite -->

不知為何劳曹,我在testng.xml注冊(cè)監(jiān)聽(tīng)器,也沒(méi)有監(jiān)聽(tīng)成功琅摩?而需要在腳本類(lèi)前面添加監(jiān)聽(tīng)器注釋?zhuān)坑卸拇笊窨梢灾笇?dǎo)一下铁孵。

接上。
終于知道為何在testng.xml注冊(cè)監(jiān)聽(tīng)器沒(méi)有監(jiān)聽(tīng)成功了房资,上面的com.hq.prodreamer.DisplayTest.ScreenshotListener監(jiān)聽(tīng)器沒(méi)有寫(xiě)進(jìn)<test>...</test>里面蜕劝,故沒(méi)有監(jiān)聽(tīng)到Display類(lèi)的情況,所以我們要把監(jiān)聽(tīng)器同樣像reportng一樣寫(xiě)進(jìn)去轰异,代碼如下

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
    <test name="Display">
        <classes>
            <class name="com.hq.prodreamer.DisplayTest.Display"/>
        </classes>
    
        <listeners>
        //這是你需要加的東西
            <listener class-name="org.uncommons.reportng.HTMLReporter" />
            <listener class-name="org.uncommons.reportng.JUnitXMLReporter" />
            <listener class-name="com.hq.prodreamer.DisplayTest.ScreenshotListener" />
        </listeners>
    </test> <!-- Test -->
</suite> <!-- Suite -->

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末岖沛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子搭独,更是在濱河造成了極大的恐慌婴削,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牙肝,死亡現(xiàn)場(chǎng)離奇詭異唉俗,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)配椭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)虫溜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人股缸,你說(shuō)我怎么就攤上這事衡楞。” “怎么了敦姻?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵瘾境,是天一觀的道長(zhǎng)歧杏。 經(jīng)常有香客問(wèn)我,道長(zhǎng)寄雀,這世上最難降的妖魔是什么得滤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮盒犹,結(jié)果婚禮上懂更,老公的妹妹穿的比我還像新娘。我一直安慰自己急膀,他們只是感情好沮协,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著卓嫂,像睡著了一般慷暂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晨雳,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天行瑞,我揣著相機(jī)與錄音,去河邊找鬼餐禁。 笑死血久,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的帮非。 我是一名探鬼主播氧吐,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼末盔!你這毒婦竟也來(lái)了筑舅?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤陨舱,失蹤者是張志新(化名)和其女友劉穎翠拣,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體游盲,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡心剥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了背桐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片优烧。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖链峭,靈堂內(nèi)的尸體忽然破棺而出畦娄,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布熙卡,位于F島的核電站杖刷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏驳癌。R本人自食惡果不足惜滑燃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望颓鲜。 院中可真熱鬧表窘,春花似錦、人聲如沸甜滨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)衣摩。三九已至昂验,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間艾扮,已是汗流浹背既琴。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留泡嘴,地道東北人呛梆。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像磕诊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纹腌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 感謝原作者的奉獻(xiàn)霎终,原作者博客地址:http://blog.csdn.net/zhu_ai_xin_520/arti...
    狼孩閱讀 14,022評(píng)論 1 35
  • 基于 SELENIUM 的自動(dòng)化測(cè)試架構(gòu) 非常感謝各位查閱本篇文章,筆者在此感謝各位升薯。 目前市面上有分門(mén)別類(lèi)的自動(dòng)...
    厲鉚兄閱讀 6,048評(píng)論 6 43
  • 夢(mèng)如易碎的明月光莱褒, 人是月下孤魂野鬼。 偶爾聞一窖酒香涎劈, 醉在星輝斑斕里广凸; 或是枕臥一樹(shù)桃花, 一顆心輕輕蛛枚、輕輕地...
    陌九閱讀 178評(píng)論 0 3
  • 記憶中家鄉(xiāng)的葬禮上總會(huì)放一種特制的土炮蹦浦,又響又亮扭吁。村里每逢葬禮總會(huì)出現(xiàn)那樣一對(duì)夫婦,女人弱智,男人便是人口中的缺心...
    傻傻小二妞閱讀 277評(píng)論 0 1
  • 時(shí)間已是黃昏侥袜,我來(lái)到了這家小網(wǎng)吧里開(kāi)始了兼職工作蝌诡,當(dāng)夜班網(wǎng)管。 剛進(jìn)來(lái)后不久黃總就跟著進(jìn)來(lái)了枫吧,今天的他看起來(lái)整個(gè)打...
    許你故作姿態(tài)閱讀 1,135評(píng)論 1 6