使用 Macaca 測試 Electron 桌面 App

本文由Super-Ps發(fā)表于TesterHome論壇盐捷,點(diǎn)擊原文鏈接可查看作者的更多文章并與ta在線交流。

繼上一篇分享解決了部分問題,本次分享完整的 Macaca 集成 Eletron APP 測試方案虏劲。

Macaca 交付過程分析

為了使 Macaca 有測試 Electron 的能力俐东,回顧之前試驗(yàn)的方案 selenmiu-webdriver 尘颓,其方式是:傳遞 chromeDriver 9515 服務(wù)端口兄春,啟動該端口建立連接疯趟,傳遞 binary 參數(shù)拘哨,指明 app 的路勁,傳遞 forBrowser 參數(shù)迅办,指明平臺類型宅静,所以現(xiàn)在思考的問題是,Macaca 是否通過傳遞同樣的參數(shù)能實(shí)現(xiàn)站欺?通過 Macaca 官方示例來 分析 1 下原理,精簡一下代碼

const wd = require('macaca-wd');
var browser = process.env.browser || 'electron' || 'puppeteer';
browser = browser.toLowerCase();

describe('macaca-test/desktop-browser-sample.test.js', function() {
  this.timeout(5 * 60 * 1000);

  var driver = wd.promiseChainRemote({
    host: 'localhost',
    port: process.env.MACACA_SERVER_PORT || 3456
  });

  before(() => {
    return driver
      .init({
        platformName: 'desktop',
        browserName: browser,
        userAgent: `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0 Safari/537.36 Macaca Custom UserAgent`,
        deviceScaleFactor: 2
      })
      .setWindowSize(800, 600);
  });

上面代碼是 Macaca web 端的示例姨夹,對應(yīng) macaca 服務(wù)端的包就是 macaca-chrome ,為什么用它矾策,因?yàn)樗腔?chromedriver 的磷账,與我要做的 electron 集成方案底層服務(wù)相同。根據(jù)以上一段腳本來簡要分析 1 下 macaca 交互過程

  1. 先啟動服務(wù)贾虽,啟動方式是 命令行輸入 macaca-server 啟動服務(wù)時(shí) macaca-cli 執(zhí)行 macaca-cli-server逃糟,之后調(diào)用 webdriver-server 的 inded.js,然后啟動 koa 服務(wù),加載中間件绰咽,路由菇肃,監(jiān)聽端口,等待客戶端請求取募。
  2. 客戶端腳本引入 macaca-wd琐谤,它是 macaca 客戶端支持 node.js 的包,包括了 webdriver 的各種操作玩敏。
  3. 客戶端調(diào)用 promiseChainRemote 是 macaca-wd/wd/lib/main.js 文件的方法斗忌,解析傳遞進(jìn)來的參數(shù),加上 ./promise-webdriver 支持的鏈?zhǔn)秸{(diào)用旺聚,這里指的是解析了 host织阳,port 兩個(gè)參數(shù),并得到了一個(gè) driver 對象可以鏈?zhǔn)秸{(diào)用各種方法砰粹。
  4. 進(jìn)入測試用例套件唧躲,調(diào)用 init 方法, 該方法在 commands.js ,通過 webdriver.js 的 _init 方法發(fā)送腳本內(nèi)傳遞的參數(shù)到服務(wù)端 3456 端口碱璃, 執(zhí)行用例之前我們就啟動的服務(wù)端惊窖,所以一直有監(jiān)聽。
  5. webdriver-server / responseHandler.js 接受客戶端請求厘贼,并返回給客戶端,在服務(wù)端命令行可以查看到詳細(xì)的交互信息圣拄。
  6. macaca-chrome 調(diào)用 macaca-chromedriver.start(caps) , caps 參數(shù)就是腳本 init 里面的參數(shù)嘴秸,此時(shí) macaca-chromedriver 構(gòu)造時(shí)初始化了一系列屬性,proxyHost, proxyPort, urlBase 庇谆,獲取版本岳掐,下載默認(rèn)版本,或者自動下載與瀏覽器對應(yīng)的 chromedriver 版本饭耳,啟動 9515 服務(wù)串述。
  7. macaca-chromedrive 調(diào)用 proxy.js 代理請求 發(fā)送 status ,session 請求到 9515 服務(wù)寞肖。
  8. 最后總結(jié) 1 下順序:啟動 macaca-server --> macaca-wd --> webdriver-server --> macaca-chrome --> macaca-chromedrive.proxy --> 9515 纲酗,響應(yīng)按原路返回。

順手附草圖一張新蟆,可以根據(jù)順序找下源碼文件
image.png

熟悉了過程之后要解決 2 個(gè)問題:

  1. 如何傳遞 electron 應(yīng)用的路勁觅赊?
  2. 該參數(shù)誰處理? 根據(jù)移動端示例參數(shù)的傳遞可以做為參考琼稻,實(shí)踐 1 下吮螺,將代碼改寫為:
before(() => {
  return driver
    .init({
      platformName: 'desktop',
      browserName: browser,
      app: "/Applications/macaca-electron-builder.app/Contents/MacOS/macaca-electron-builder"
    })
});

運(yùn)行結(jié)果報(bào)錯(cuò)了!通過打印 log,參數(shù)是已經(jīng)傳遞到了步驟 6鸠补,步驟 7萝风,參數(shù)傳遞到了,但是 9515 服務(wù)沒處理紫岩,反復(fù)跟蹤 macaca 運(yùn)行過程找問題规惰,折騰很久最后得高人指點(diǎn)查詢Chromedriver 的參數(shù)才恍然大悟,原來 capabilities 是有提供參數(shù)的被因, 參數(shù)沒傳遞正確卿拴,格式跟參數(shù)名字都不對,這里需要一個(gè) chromeOptions Objiect 修正之后長這樣

before(() => {
  return driver
    .init({
      platformName: 'desktop',
      browserName: browser,
      chromeOptions: {            //設(shè)置chromeDriver chromeOptions object 參數(shù)
            binary: '/Applications/macaca-electron-builder.app/Contents/MacOS/macaca-electron-builder'  // 填寫自己的執(zhí)行文件路勁或者安裝之后的文件路勁
       })
});

所以梨与,當(dāng)代理轉(zhuǎn)發(fā)參數(shù)到設(shè)備端時(shí)堕花,大多數(shù)情況設(shè)備端已經(jīng)實(shí)現(xiàn)了該參數(shù),按照規(guī)則去設(shè)置就能調(diào)起來應(yīng)用了粥鞋,兩個(gè)在思考的問題都已解決缘挽,下面就描述 1 下完整的方案。

測試 Electron Demo

目前該方案已經(jīng)提交 macaca 官方并通過了呻粹,如果大家想體驗(yàn)示例壕曼,可以直接從 macaca 官方網(wǎng)站 或者 官方示例庫里查看,這里描述 1 下 mac 的操作步驟等浊,如果你已經(jīng)懂得如何傳遞參數(shù)腮郊,請忽略了以下步驟。

  1. clone 示例庫 到本地
  2. 安裝依賴 $ npm i $ npm run build $ npm run dist
  3. 啟動服務(wù)并執(zhí)行測試用例 $ npm run mac-start $ npm run test
  4. 測試用例示例筹燕,因代碼格式渲染有問題轧飞,直接附上完整的 testCase地址

最后

本著解決自己項(xiàng)目難題的目的,最終卻輸出了兩次分享撒踪,過程中不斷遇到問題过咬,解決問題,把分析過程跟思考記錄下來是希望鼓勵更多人制妄,最終沉淀出來的方案是希望幫忙更多人掸绞,同時(shí)自己也在不斷成長,用積累回饋社區(qū)耕捞。
歡迎大家試用衔掸,一起探討,學(xué)習(xí)砸脊,更加完善示例庫具篇,比如有興趣的同學(xué)可以完善 electron 示例應(yīng)用的 UI 開發(fā),針對各種場景添加 case 等等凌埂。

本文由Super-Ps發(fā)表于TesterHome論壇驱显,點(diǎn)擊原文鏈接可查看作者的更多文章并與ta在線交流。

今日份的知識已攝入!想要學(xué)習(xí)更多干貨知識埃疫、結(jié)識質(zhì)量行業(yè)大牛和業(yè)界精英伏恐?
第十屆中國互聯(lián)網(wǎng)測試開發(fā)大會·深圳,了解下 >>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末栓霜,一起剝皮案震驚了整個(gè)濱河市翠桦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胳蛮,老刑警劉巖销凑,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異仅炊,居然都是意外死亡斗幼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門抚垄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜕窿,“玉大人,你說我怎么就攤上這事呆馁⊥┚” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵浙滤,是天一觀的道長阴挣。 經(jīng)常有香客問我,道長纺腊,這世上最難降的妖魔是什么屯吊? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮摹菠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘骗爆。我一直安慰自己次氨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布摘投。 她就那樣靜靜地躺著煮寡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪犀呼。 梳的紋絲不亂的頭發(fā)上幸撕,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機(jī)與錄音外臂,去河邊找鬼坐儿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的貌矿。 我是一名探鬼主播炭菌,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼逛漫!你這毒婦竟也來了黑低?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤酌毡,失蹤者是張志新(化名)和其女友劉穎克握,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枷踏,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菩暗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呕寝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勋眯。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖下梢,靈堂內(nèi)的尸體忽然破棺而出客蹋,到底是詐尸還是另有隱情,我是刑警寧澤孽江,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布讶坯,位于F島的核電站,受9級特大地震影響岗屏,放射性物質(zhì)發(fā)生泄漏辆琅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一这刷、第九天 我趴在偏房一處隱蔽的房頂上張望婉烟。 院中可真熱鬧,春花似錦暇屋、人聲如沸似袁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昙衅。三九已至,卻和暖如春定鸟,著一層夾襖步出監(jiān)牢的瞬間而涉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工联予, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留啼县,地道東北人材原。 一個(gè)月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像谭羔,于是被迫代替她去往敵國和親华糖。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

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

  • Macaca 介紹 源碼空間:https://github.com/macacajs 模塊拆分講解: Macaca...
    光劍書架上的書閱讀 14,518評論 0 32
  • 導(dǎo)語 接觸Macaca已經(jīng)有一段時(shí)間瘟裸,從開始的對于UI自動化的調(diào)研開始客叉,將Macaca與Appium,Roboti...
    君禾_123閱讀 3,105評論 2 18
  • 0.小目標(biāo) 關(guān)于UI自動化的定義,我想要的是自動地按照流程去點(diǎn)擊頁面话告、輸入數(shù)據(jù)兼搏,不需要人去參與,節(jié)省人工時(shí)間沙郭。比如...
    孢子菌閱讀 15,599評論 10 47
  • UI自動化的價(jià)值 回歸測試 兼容性測試 自動化測試工具選型 使用selenium的優(yōu)勢主要是:開源免費(fèi)佛呻、跨語言、跨...
    DayBreakL閱讀 1,644評論 2 1
  • 在學(xué)習(xí)完Macaca基礎(chǔ)后病线,就迫不及待的模仿著Macaca示例項(xiàng)目吓著,開始了測試用例的開發(fā),并且在幾天時(shí)間里就完成了...
    何小有閱讀 466評論 0 1