有什么方法可以在UI测试中自动化SFSafariViewController? [英] Any way to automate SFSafariViewController in UI tests?

查看:135
本文介绍了有什么方法可以在UI测试中自动化SFSafariViewController?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有什么方法可以自动执行SFSafariViewController?我喜欢Xcode 7 UI测试功能,但似乎它不支持SFSafariViewController自动化.我正在测试的某些UI流程需要Web浏览器,因此该应用程序使用SFSafariViewController使其相对于Web视图更加安全.

解决方案

如果类似于启动扩展程序(当前由于直接交互而中断),请尝试在屏幕上寻找您要查找的元素的位置:

点击操作表以启动扩展程序的示例:

func tapElementInActionSheetByPosition(element: XCUIElement!) {
    let tableSize = app.tables.elementBoundByIndex(0).frame.size
    let elementFrame = element.frame

    // get the frame of the cancel button, because it has a real origin point
    let CancelY = app.buttons["Cancel"].frame.origin.y

    // 8 is the standard apple margin between views
    let yCoordinate = CancelY - 8.0 - tableSize.height + elementFrame.midY

    // tap the button at its screen position since tapping a button in the extension picker directly is currently broken
    app.coordinateWithNormalizedOffset(CGVectorMake(elementFrame.midX / tableSize.width, yCoordinate / app.frame.size.height)).tap()
}

注意:您必须在XCUIApplication查询层上点击.按位置点击元素不起作用.

Is there any way to automate SFSafariViewController? I like the Xcode 7 UI test feature, but it seems it does not support SFSafariViewController automation. Some of the UI flows I am testing require a web browser so the app uses SFSafariViewController to make it safer vs a web view.

解决方案

If it's similar to launching extensions (currently broken with direct interactions), try tapping the screen at the point where the element you're looking for is:

Example of tapping an action sheet which launches an extension:

func tapElementInActionSheetByPosition(element: XCUIElement!) {
    let tableSize = app.tables.elementBoundByIndex(0).frame.size
    let elementFrame = element.frame

    // get the frame of the cancel button, because it has a real origin point
    let CancelY = app.buttons["Cancel"].frame.origin.y

    // 8 is the standard apple margin between views
    let yCoordinate = CancelY - 8.0 - tableSize.height + elementFrame.midY

    // tap the button at its screen position since tapping a button in the extension picker directly is currently broken
    app.coordinateWithNormalizedOffset(CGVectorMake(elementFrame.midX / tableSize.width, yCoordinate / app.frame.size.height)).tap()
}

Note: You must tap at the XCUIApplication query layer. Tapping the element by position doesn't work.

这篇关于有什么方法可以在UI测试中自动化SFSafariViewController?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆