app自動化測試(九) appium 微信小程序 自動化測試

現(xiàn)階段,小程序越發(fā)的火直焙,微信也給了巨量的流量誘惑景东。很多公司都有進(jìn)行小程序開發(fā)砂轻。
那么小程序可以進(jìn)行自動化測試嗎奔誓?
當(dāng)然是可以的!

準(zhǔn)備階段

三個inspect工具可選(在APP的H5頁面測試中也有提及)

  1. chrome DevTools chrome://inspect/#devices

  2. UC DevTools https://dev.ucweb.com/download/?spm=ucplus.11199946.c-header.6.53974692oQhbSQ

  3. TBS Studio (騰訊自家的小程序調(diào)試工具)https://x5.tencent.com/tbs/guide/debug/download.html

其實不管是騰訊家的調(diào)試工具還是UC家的調(diào)試工具搔涝,都是對chrome devtools的二次封裝
使用上大同小異厨喂,以上三個工具選擇一個即可庄呈,具體使用方式騰訊家很友好的整理了相關(guān)的文檔
https://x5.tencent.com/tbs/document/debug-detail-wifi.html

開啟小程序debug模式

騰訊的瀏覽器driver是獨家定制X5內(nèi)核。
發(fā)現(xiàn)騰訊家也有很詳細(xì)的文章 就直接搬鏈接過來了
https://x5.tencent.com/tbs/guide/debug/season7.html

設(shè)計初始化環(huán)境的步驟

  1. 配置desired_capabilities(X5內(nèi)核不能用chromedriver)
# 相比之前的啟動參數(shù)诬留,小程序的啟動參數(shù)需要多幾項
"chromedriverExecutable": chromedriverfilepath, "recreateChromeDriverSessions": True, "chromeOptions": {"androidProcess": "com.tencent.mm:appbrand0"}
# chromedriverfilepath的版本需要用在inspect中看到的版本
# recreateChromeDriverSessions 用于自動化配置X5內(nèi)核驅(qū)動
# chromeOptions 提前指定小程序webview的context
  1. 打開微信
# 微信的apppackage appActivity
{"appPackage": "com.tencent.mm", "appActivity": "com.tencent.mm.ui.LauncherUI"}
  1. 進(jìn)入小程序
  • 所有想要進(jìn)入小程序debug狀態(tài)的都要從 搜一搜這個入口進(jìn)去
    有部分人的微信在定位的過程中是無法精確定位到具體元素的贫母,此時我們推薦采用 xpath進(jìn)行定位
    有部分人的微信是可以定位到具體元素的可以使用任意方式


    image.png
  • 進(jìn)入到搜一搜頁面,搜索框是無法進(jìn)行精確定位的,但是可以xpath定位"搜索"這兩個字


    image.png

    在此只能使用XPATH進(jìn)行定位

  • tips:此搜索框必須先進(jìn)行點擊盒刚,再輸入文字腺劣。否則將有bug
  • 進(jìn)入到搜索頁因块,此處一樣有些人可以精確定位,有些不可以


    image.png
caps = {"appPackage": "com.tencent.mm", "appActivity": "com.tencent.mm.ui.LauncherUI", "chromedriverExecutable": file,
        "recreateChromeDriverSessions": True, "chromeOptions": {"androidProcess": "com.tencent.mm:appbrand0"}}
driver = startup_param(**caps)
wait = WebDriverWait(driver, 20)
loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("發(fā)現(xiàn)")')
wait.until(EC.visibility_of_element_located(loc))
driver.find_element(*loc).click()

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("搜一搜")')
wait.until(EC.visibility_of_element_located(loc))
driver.find_element(*loc).click()

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("微信熱點")')
wait.until(EC.visibility_of_element_located(loc))
loc = (MobileBy.XPATH, "http://*[@text='搜索']")
ele = driver.find_element(*loc)
ele.click()
ele.send_keys("京東")

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("京東")')
wait.until(EC.visibility_of_element_located(loc))
driver.find_element(*loc).click()

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("電商平臺")')
wait.until(EC.visibility_of_element_located(loc))
driver.find_element(*loc).click()
  1. 找到小程序運行的context
  1. 如圖我們使用第一個命令可以得到手機(jī)當(dāng)前app正在活躍的進(jìn)程
  2. 找到帶有plugin字樣的pid
  3. 拿去該pid執(zhí)行第二個命令即可得到該pid進(jìn)程的name了
  4. 一般name名為:com.tencent.mm:appbrand0 \ com.tencent.mm:tools \ com.tencent.mm:toolsmp的才是小程序的
image.png
adb shell dumpsys activity top| findstr ACTIVITY
adb shell ps pid
  1. 切換進(jìn)該context
context = driver.contexts  # 此時會有兩個webview的context
driver.switch_to.context(context[-1]) # 選取最后一個context進(jìn)行切換
# ['NATIVE_APP', 'WEBVIEW_com.tencent.mm:tools']
  1. 因為小程序的特性涡上,每個頁面都是單獨的handle趾断,所以需要我們進(jìn)行切換
handle = driver.window_handles  # 獲取當(dāng)前頁面全部的句柄
for i in handle:  # 對全部句柄進(jìn)行遍歷
    driver.switch_to.window(i)  # 切到到每一個句柄上
    if keyword in driver.page_source:  # 當(dāng)某個句柄里面有我們要的關(guān)鍵字時就跳出遍歷
        break
  1. 進(jìn)行相關(guān)用例測試
  • 此處的操作即可參考我們這個系列里面H5頁面的操作拉
  • 不過現(xiàn)在新版本的同學(xué)可能可以看到,H5頁面也不再是webview這個class了吩愧,已經(jīng)可以進(jìn)行精確定位了


    image.png

參考以下:
https://mp.weixin.qq.com/s/U0jFiRsVsChHb8K9995QKQ

https://www.cnblogs.com/yyoba/p/9455519.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雁佳,一起剝皮案震驚了整個濱河市隔嫡,隨后出現(xiàn)的幾起案子甘穿,更是在濱河造成了極大的恐慌,老刑警劉巖温兼,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異募判,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)释液,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門装处,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人妄迁,你說我怎么就攤上這事〉翘裕” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵耍鬓,是天一觀的道長。 經(jīng)常有香客問我牲蜀,道長,這世上最難降的妖魔是什么各薇? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮峭判,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘林螃。我一直安慰自己,他們只是感情好完残,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布横漏。 她就那樣靜靜地躺著,像睡著了一般缎浇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上素跺,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機(jī)與錄音刊愚,去河邊找鬼。 笑死鸥诽,一個胖子當(dāng)著我的面吹牛晰甚,可吹牛的內(nèi)容都是我干的衙传。 我是一名探鬼主播厕九,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼地回,長吁一口氣:“原來是場噩夢啊……” “哼俊鱼!你這毒婦竟也來了畅买?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤谷羞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后湃缎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡九巡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年蹂季,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偿洁。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖神凑,靈堂內(nèi)的尸體忽然破棺而出何吝,到底是詐尸還是另有隱情溉委,我是刑警寧澤爱榕,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站黔酥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏棵帽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一逗概、第九天 我趴在偏房一處隱蔽的房頂上張望忘衍。 院中可真熱鬧逾苫,春花似錦、人聲如沸瑟押。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氢烘。三九已至,卻和暖如春威始,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背黎棠。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留木西,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓八千,卻偏偏與公主長得像燎猛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子重绷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

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

  • XTEST:https://www.cnblogs.com/Test-xiaobai/p/9066331.html...
    leyu閱讀 6,742評論 0 10
  • 目 錄: 1. 小程序自動化方案 目前小程序自動化主要有以下三種方案: Appium框架【官網(wǎng)】:http://a...
    leyu閱讀 10,524評論 4 19
  • 最基礎(chǔ)的使用方法 最簡單的布局: 在Activity中使用WebView: 但只是這樣的話昭卓,在模擬器上是會直接調(diào)到...
    HolenZhou閱讀 7,788評論 12 33
  • 杏花樹下酒 文/阿雪 水檻說:“真不想走出這杏花林,自由自在候醒,多快...
    屏鳥閱讀 709評論 11 9
  • 曾經(jīng)以為父母都是滿目世俗的大人,理想跟愛占业,是他們空乏人生里早已看破的念想纯赎,卻忘了他們也是曾經(jīng)的少年谦疾,背棄理想犬金,肩負(fù)...
    蕤_閱讀 170評論 0 1