在 WebView 中使用 UI Testing

UI Testing 可以通过 XCUIApplication() 获取整个 app 的对象。通过其 staticTextsbuttons 等属性得到一个 XCUIElementQuery 对象,进一步获取 XCUIElement 对象来操作 UI 达到测试的目的。

WebView 中的 html 对象,也是可以通过以上方式获得的。UITesting 是基于 Accessibility。UI Accessibility 在 iOS 3.0 就被引入了,功能是对屏幕上的 UI 进行分类和标记,配合屏幕阅读技术 VoiceOver 和语音控制,用户在不触摸屏幕的情况下就可以通过声音来控制 app , 达到让身体不便的人士使用 app 的目的。

但是因为最初 Accessibility 和 VoiceOver 都是基于英文的,中国国情相对对残障人士的关爱也比较有限(例如无障碍通道的数量,盲道的设计和维护),
所以这些功能并不收到重视。不仅如此,完善这些功能对于开发者来说也是很大的工作量,所以基本不受到重视。

UI Testing 的本质就是定位屏幕上的元素,进行点击、拖动、输入等操作交互,然后获取状态判断是否符合预期。例如在 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 中获取元素暂不支持中文,在中文网页中,我们无法通过这样的方式完成 UI Testing。

这里只能通过一种死板的方式进行 UI Testing: 获取到 webView 元素后,直接触摸一个指定的坐标,从而达到操作元素的目的:

    func testLogin() {
        let app = XCUIApplication()
        let webView = app.webViews.element
        
        // 这里简单的用 sleep() 来等待
        // 根据网页加载速度适当调整,尤其是第一次需要等待较长时间
        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) 。可能在不同大小的屏幕中元素的位置还有差别,要引起注意。

如果要想测试输入功能,只要在弹起键盘之后,调用 XCUIApplication().typeText("admin123") 的方式即可完成。只需要注意网页的响应时间,在适当的操作中加入适当的等待时间,在 WebView 中使用 UI Testing 也就不成问题了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,569评论 25 707
  • assets 文件夹下的html访问方式:"file:///android_asset/index.html" 如...
    李建彪阅读 1,634评论 0 7
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,613评论 4 59
  • 人是多么害怕孤独的生物,我们竭力把自己的行程安排的满满当当,原因无非在孤独的时候让疲劳填满身体忘记寂寞,当热闹来临...
    离合不骚阅读 95评论 0 0
  • 感赏:自己勇敢接受,医生宣布:儿子以后不能像正常孩子一样上学的心痛的事实!感谢坚强,勇敢的自己! 感赏:朋友对我的...
    樱木兰阅读 117评论 0 1