微信小程序自動(dòng)化,記錄趟過(guò)的坑!

項(xiàng)目思想:關(guān)鍵字+數(shù)據(jù)驅(qū)動(dòng)混合測(cè)試

  • 基于Android-微信小程序自動(dòng)化的關(guān)鍵是:webview的切換
    對(duì)于微信App來(lái)說(shuō)如何從NATIVE切換到webview的過(guò)程
  • 測(cè)試版本信息
    1.微信版本:7.0.21
    2.Android:7.0
    3.appium引入依賴:6.1.0
    4.testng引入依賴:6.14.3
  • 初始化實(shí)例配置信息
    1.配置參數(shù)如下:


其中涉及到微信內(nèi)置webview版本與chromedriver一致性設(shè)置,查看流程如下:
第一步:查看微信webview版本信息较雕,這里通過(guò)uc-devtools工具查看
uc-devtools工具獲取鏈接:

鏈接:https://pan.baidu.com/s/1GA3EPDz0GD3IyXUsgU8Z3g 
提取碼:3lpg 

scrcpy真機(jī)工具獲取鏈接:

鏈接:https://pan.baidu.com/s/1If7q_empeZgXWVXU0v8rIw 
提取碼:3hi9 

下載后打開(kāi),同時(shí)通過(guò)真機(jī)連接工具scrcpy打開(kāi)微信挚币,此時(shí)即可顯示微信的chromedriver版本號(hào):


從上圖可以看到chromedriver亮蒋,去chromedriver官網(wǎng)下載對(duì)于的版本去驅(qū)動(dòng)
點(diǎn)擊下載對(duì)應(yīng)版本的chromedriver版本
下載后放到resources目錄下,見(jiàn)上圖的配置路徑妆毕。
第二部就可以正常使用web的元素查看了:

2.setCapability參數(shù)配置如下(入坑-需要先查看下自己微信小程序上下文切換的context慎玖,通過(guò)下面的方法可以查看):
其中最關(guān)鍵是的: options.setExperimentalOption("androidProcess", "com.tencent.mm:appbrand0");
第一種方法:通過(guò)driver.getContextHandles()方法獲取從微信app切換到小程序后的所有句柄,配置到啟動(dòng)參數(shù)中设塔。



第二種方法:獲取小程序進(jìn)程號(hào)凄吏,首先要打開(kāi)小程序,然后執(zhí)行下面命令(win)

PS C:\Users\Administrator> adb shell dumpsys activity top| findstr ACTIVITY
  ACTIVITY com.tencent.mm/.plugin.appbrand.ui.AppBrandUI 1d56cca pid=5932

拿到pid號(hào)后進(jìn)一步闰蛔,查看小程序的進(jìn)程號(hào),名稱如下:

PS C:\Users\Administrator> adb shell ps 5932
USER      PID   PPID  VSIZE  RSS   WCHAN              PC  NAME
u0_a193   5932  771   3958616 309928 SyS_epoll_ 0000000000 S com.tencent.mm:appbrand0

就可以看到小程序的進(jìn)程號(hào)名稱:com.tencent.mm:appbrand0图柏,然后設(shè)置setExperimentalOption參數(shù)即可序六。


把需要切換的context,配置到setExperimentalOption中即可蚤吹。具體配置詳情如下:

 //引用配置參數(shù)
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("platformName", platformName);
        capabilities.setCapability("appPackage", appPackage);
        capabilities.setCapability("appActivity", appActivity);
        capabilities.setCapability("automationName", automationName);
        capabilities.setCapability("deviceName",deviceName);
        capabilities.setCapability("chromedriverExecutable", chromePath);
        capabilities.setCapability("platformVersion","7.0");
        capabilities.setCapability("unicodeKeyboard",true);
        capabilities.setCapability("noReset",true);
        // 不重新簽名apk
        capabilities.setCapability("resetKeyboard", true);
        // 支持X5內(nèi)核應(yīng)用自動(dòng)化配置
        capabilities.setCapability("recreateChromeDriverSessions", true);
        /**
         *  ChromeOptions使用來(lái)定制啟動(dòng)選項(xiàng)例诀,因?yàn)樵赼ppium中切換context識(shí)別webview的時(shí)候,
         *  把com.tencent.mm:toolsmp的webview識(shí)別成com.tencent.mm的webview.
         *  所以為了避免這個(gè)問(wèn)題随抠,加上androidProcess: com.tencent.mm:toolsmp
         * */
        ChromeOptions options = new ChromeOptions();
        /**
         * 這里很關(guān)鍵>>
         * ChromeOptions使用來(lái)定制啟動(dòng)選項(xiàng),因?yàn)樵赼ppium中切換context識(shí)別webview的時(shí)候,把com.tencent.mm:toolsmp的webview識(shí)別成com.tencent.mm的webview.
         * 所以為了避免這個(gè)問(wèn)題繁涂,加上androidProcess名:通過(guò)driver.getContextHandles()獲取所有的上下文拱她,我這里獲取的是com.tencent.mm:appbrand0
         * */
        options.setExperimentalOption("androidProcess", "com.tencent.mm:appbrand0");
        capabilities.setCapability(ChromeOptions.CAPABILITY, options);
        // 初始化會(huì)默認(rèn)將chrome瀏覽器打開(kāi),需要將Browser置為空
        capabilities.setBrowserName("");
        // 每次啟動(dòng)時(shí)覆蓋session扔罪,否則第二次后運(yùn)行會(huì)報(bào)錯(cuò)不能新建session
        capabilities.setCapability("sessionOverride", true);
        URL url = null;
        try {
            url = new URL("http://127.0.0.1:4723/wd/hub");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        driver = new AndroidDriver(url, capabilities);

  • 關(guān)鍵實(shí)現(xiàn)邏輯
    1.查了一下網(wǎng)上很多說(shuō)是需要在微信app內(nèi)的搜搜功能進(jìn)入小程序秉沼,但對(duì)于體驗(yàn)版的小程序這里肯定搜索不到的。所以進(jìn)入被測(cè)體驗(yàn)版小程序最簡(jiǎn)單的方法是:下拉微信框+點(diǎn)擊小程序坐標(biāo)進(jìn)入最直接矿酵。
    首次進(jìn)入小程序后都會(huì)在小程序列表展示唬复,最新的位置都是第一個(gè)。
    1.通過(guò)開(kāi)啟手機(jī)設(shè)置內(nèi)置的【指針位置】來(lái)定位小程序的坐標(biāo)



其中通過(guò)坐標(biāo)點(diǎn)擊方法如下:

public void taptest(AndroidDriver driver,int x, int y){
        /**設(shè)置顯示等待時(shí)間10s  driver=baseAndroidDriver.getDriver(baseConfig)
        特注:顯示等待與隱式等待相對(duì)全肮,顯示等待必須在每一個(gè)需要等待的元素前面進(jìn)行聲明敞咧,如果在規(guī)定的時(shí)間內(nèi)找到元素,則直接執(zhí)行辜腺,即找到元素就執(zhí)行相關(guān)操作
         */
        wait = new WebDriverWait(driver,20);
        //tap點(diǎn)擊坐標(biāo)休建,輸入坐標(biāo),然后再release()釋放坐標(biāo)點(diǎn)评疗,用perform()去執(zhí)行一系列action操作
        action = new TouchAction(driver).tap(PointOption.point(x,y)).release().perform();
    }

2.實(shí)現(xiàn)代碼-webview切換成功后就可以正常使用顯示等待時(shí)間解決元素加載問(wèn)題丰包。

//進(jìn)入微信下拉滑動(dòng)
        swipeToDown(driver);
        //點(diǎn)擊被測(cè)小程序,通過(guò)坐標(biāo)點(diǎn)擊
        taptest(driver,190,673);
        //allure截圖存留
       // SaveFailureScreenUtil.saveFailureScreenShot(driver);
        //切換webview頁(yè)面
        // 獲取到所有的contexts壤巷,并在啟動(dòng)參數(shù)里配置
        System.out.println("所有的contexts:" + driver.getContextHandles());
        // 切換到小程序webview對(duì)應(yīng)的context中
        driver.context("WEBVIEW_com.tencent.mm:appbrand0");
        System.out.println("切換context成功邑彪!");
        // 獲取到所有的handles
        Set<String> windowHandles = driver.getWindowHandles();
        System.out.println("所有的windowsHandles" + windowHandles);
        for (String handle :windowHandles){
            System.out.println("切換到對(duì)應(yīng)的windowHandle:" + handle);
            driver.switchTo().window(handle);
            String strTip = "IT互聯(lián)網(wǎng)熱門課程";
            if(driver.getPageSource().contains(strTip)){
                //找到了對(duì)應(yīng)的窗口,退出循環(huán)
                break;
            }else {
                System.out.println("查詢的:"+strTip+"頁(yè)面可能不包含該文本信息");
            }
        }
        //下拉滑動(dòng)操作
        swipeToUp(driver);
        //進(jìn)入正常的web元素定位操作
        //點(diǎn)擊模擬試卷
        UIElementUtil.clickButton("騰訊課堂","分類",driver);
  • xml維護(hù)的元素定位信息


  • 通過(guò)日志可以看到已經(jīng)切換到webview并定位元素點(diǎn)擊成功了

所有的contexts:[NATIVE_APP, WEBVIEW_com.tencent.mm:appbrand0, WEBVIEW_com.tencent.mm:appbrand2]
切換context成功!
所有的windowsHandles[CDwindow-ABCE2F2B94ED5F6A2BF2153F6CFEFF21, CDwindow-FA78683E0B1150082058BBC8EFF73001]
切換到對(duì)應(yīng)的windowHandle:CDwindow-ABCE2F2B94ED5F6A2BF2153F6CFEFF21
查詢的:IT互聯(lián)網(wǎng)熱門課程頁(yè)面可能不包含該文本信息
切換到對(duì)應(yīng)的windowHandle:CDwindow-FA78683E0B1150082058BBC8EFF73001
INFO  2020-12-14 10:24:22 [main] com.iappium.utils.UIElementUtil.clickButton(UIElementUtil.java:186) - [分類]該點(diǎn)擊事件耗時(shí):445ms
  • 最后-更多工具和技術(shù)請(qǐng)關(guān)注:Coding測(cè)試
    其中UIElementUtil工具類是封裝的關(guān)鍵字工具欄胧华,通過(guò)xml維護(hù)定位元素(等同于ui的自動(dòng)化測(cè)試的關(guān)鍵字)寄症,由于UIElementUtil使用的是dom4j解析的xml文件,內(nèi)容較多矩动,需要看的話可以移步至項(xiàng)目源碼中查看iappium4j項(xiàng)目app+小程序自動(dòng)化測(cè)試-源碼
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末有巧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子悲没,更是在濱河造成了極大的恐慌篮迎,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件示姿,死亡現(xiàn)場(chǎng)離奇詭異甜橱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)栈戳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門岂傲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人子檀,你說(shuō)我怎么就攤上這事镊掖∧烁辏” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵亩进,是天一觀的道長(zhǎng)症虑。 經(jīng)常有香客問(wèn)我,道長(zhǎng)归薛,這世上最難降的妖魔是什么谍憔? 我笑而不...
    開(kāi)封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮苟翻,結(jié)果婚禮上韵卤,老公的妹妹穿的比我還像新娘。我一直安慰自己崇猫,他們只是感情好沈条,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著诅炉,像睡著了一般蜡歹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涕烧,一...
    開(kāi)封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天月而,我揣著相機(jī)與錄音,去河邊找鬼议纯。 笑死父款,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瞻凤。 我是一名探鬼主播憨攒,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼阀参!你這毒婦竟也來(lái)了肝集?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蛛壳,失蹤者是張志新(化名)和其女友劉穎杏瞻,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體衙荐,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捞挥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赫模。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片树肃。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瀑罗,靈堂內(nèi)的尸體忽然破棺而出胸嘴,到底是詐尸還是另有隱情,我是刑警寧澤斩祭,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布劣像,位于F島的核電站,受9級(jí)特大地震影響摧玫,放射性物質(zhì)發(fā)生泄漏耳奕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一诬像、第九天 我趴在偏房一處隱蔽的房頂上張望屋群。 院中可真熱鬧,春花似錦坏挠、人聲如沸芍躏。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至榜配,卻和暖如春否纬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛋褥。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工临燃, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人烙心。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓膜廊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親弃理。 傳聞我的和親對(duì)象是個(gè)殘疾皇子溃论,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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