在 WebView 中使用 UI Testing

UI Testing 可以通過 XCUIApplication() 獲取整個 app 的對象邀层。通過其 staticTexts 左胞、 buttons 等屬性得到一個 XCUIElementQuery 對象,進一步獲取 XCUIElement 對象來操作 UI 達到測試的目的熙侍。

WebView 中的 html 對象忍啤,也是可以通過以上方式獲得的。UITesting 是基于 Accessibility胎食。UI Accessibility 在 iOS 3.0 就被引入了扰才,功能是對屏幕上的 UI 進行分類和標記,配合屏幕閱讀技術(shù) VoiceOver 和語音控制厕怜,用戶在不觸摸屏幕的情況下就可以通過聲音來控制 app , 達到讓身體不便的人士使用 app 的目的衩匣。

但是因為最初 Accessibility 和 VoiceOver 都是基于英文的,中國國情相對對殘障人士的關(guān)愛也比較有限(例如無障礙通道的數(shù)量粥航,盲道的設(shè)計和維護)琅捏,
所以這些功能并不收到重視。不僅如此递雀,完善這些功能對于開發(fā)者來說也是很大的工作量柄延,所以基本不受到重視。

UI Testing 的本質(zhì)就是定位屏幕上的元素缀程,進行點擊搜吧、拖動、輸入等操作交互杨凑,然后獲取狀態(tài)判斷是否符合預(yù)期滤奈。例如在 UI-Testing-Cheat-Sheet 中,就可以很方便的在 WebView 中使用 UI Testing:

    func testTextExistsInAWebView() {
        app.buttons["More Info"].tap()
        let volleyballLabel = app.staticTexts["Volleyball"]
        waitForElementToAppear(volleyballLabel)
        XCTAssert(volleyballLabel.exists)
    }

    func testTappingALinkInAWebView() {
        app.buttons["More Info"].tap()

        let disambiguationLink = app.links["Volleyball (disambiguation)"]
        waitForElementToAppear(disambiguationLink)
        XCTAssert(disambiguationLink.exists)

        disambiguationLink.tap()

        let volleyballLink = app.links["Volleyball (ball)"]
        waitForElementToAppear(volleyballLink)
        XCTAssert(volleyballLink.exists)
    }

但是很遺憾撩满,通過 staticTexts[xxx] 蜒程、 links[xxx] 這樣的方式在 WebView 中獲取元素暫不支持中文,在中文網(wǎng)頁中伺帘,我們無法通過這樣的方式完成 UI Testing昭躺。

這里只能通過一種死板的方式進行 UI Testing: 獲取到 webView 元素后,直接觸摸一個指定的坐標曼追,從而達到操作元素的目的:

    func testLogin() {
        let app = XCUIApplication()
        let webView = app.webViews.element
        
        // 這里簡單的用 sleep() 來等待
        // 根據(jù)網(wǎng)頁加載速度適當(dāng)調(diào)整窍仰,尤其是第一次需要等待較長時間
        sleep(5)
        
        // 觸摸一個位置
        let coordinate = webView.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.5))
        coordinate.tap()
        
        // 這里等待是為了看到操作效果
        sleep(5)
    }

注意:CGVector 中的 dxdy 并不是像素礼殊,而是以 webView 元素的origin 為原點驹吮,以 webViewframe 為大小,做出偏移的百分比晶伦。例子中的
CGVector(dx: 0.5, dy: 0.5) 即是 webView 的中心點碟狞,左上角為 CGVector(dx: 0, dy: 0) ,右下角為 CGVector(dx: 1, dy: 1) 婚陪∽逦郑可能在不同大小的屏幕中元素的位置還有差別,要引起注意泌参。

如果要想測試輸入功能脆淹,只要在彈起鍵盤之后,調(diào)用 XCUIApplication().typeText("admin123") 的方式即可完成沽一。只需要注意網(wǎng)頁的響應(yīng)時間盖溺,在適當(dāng)?shù)牟僮髦屑尤脒m當(dāng)?shù)牡却龝r間,在 WebView 中使用 UI Testing 也就不成問題了铣缠。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末烘嘱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蝗蛙,更是在濱河造成了極大的恐慌蝇庭,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捡硅,死亡現(xiàn)場離奇詭異哮内,居然都是意外死亡,警方通過查閱死者的電腦和手機壮韭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門北发,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泰涂,你說我怎么就攤上這事鲫竞。” “怎么了逼蒙?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵从绘,是天一觀的道長。 經(jīng)常有香客問我是牢,道長僵井,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任驳棱,我火速辦了婚禮批什,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘社搅。我一直安慰自己驻债,他們只是感情好乳规,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著合呐,像睡著了一般暮的。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上淌实,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天冻辩,我揣著相機與錄音,去河邊找鬼拆祈。 笑死恨闪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的放坏。 我是一名探鬼主播咙咽,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼轻姿!你這毒婦竟也來了犁珠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤互亮,失蹤者是張志新(化名)和其女友劉穎犁享,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豹休,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡炊昆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了威根。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凤巨。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖洛搀,靈堂內(nèi)的尸體忽然破棺而出敢茁,到底是詐尸還是另有隱情,我是刑警寧澤留美,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布彰檬,位于F島的核電站,受9級特大地震影響谎砾,放射性物質(zhì)發(fā)生泄漏逢倍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一景图、第九天 我趴在偏房一處隱蔽的房頂上張望较雕。 院中可真熱鬧,春花似錦挚币、人聲如沸亮蒋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宛蚓。三九已至激捏,卻和暖如春设塔,著一層夾襖步出監(jiān)牢的瞬間凄吏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工闰蛔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留痕钢,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓序六,卻偏偏與公主長得像任连,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子例诀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,846評論 25 707
  • assets 文件夾下的html訪問方式:"file:///android_asset/index.html" 如...
    李建彪閱讀 1,721評論 0 7
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫随抠、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • 人是多么害怕孤獨的生物繁涂,我們竭力把自己的行程安排的滿滿當(dāng)當(dāng)拱她,原因無非在孤獨的時候讓疲勞填滿身體忘記寂寞,當(dāng)熱鬧來臨...
    離合不騷閱讀 96評論 0 0
  • 感賞:自己勇敢接受扔罪,醫(yī)生宣布:兒子以后不能像正常孩子一樣上學(xué)的心痛的事實秉沼!感謝堅強,勇敢的自己矿酵! 感賞:朋友對我的...
    櫻木蘭閱讀 136評論 0 1