加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

iOS UITest – 导航到所有可用屏幕

发布时间:2020-12-14 17:47:48 所属栏目:百科 来源:网络整理
导读:我正在使用iOS UITest作为 Swift应用程序.我喜欢用的东西, func testAllScreenNavigation() { let app = XCUIApplication() app.tabBars.buttons["Home"].tap() app.navigationBars["Home"].buttons["More"].tap() app.sheets.buttons["Cancel"].tap()} 等等
我正在使用iOS UITest作为 Swift应用程序.我喜欢用的东西,

func testAllScreenNavigation() {

    let app = XCUIApplication()
    app.tabBars.buttons["Home"].tap()
    app.navigationBars["Home"].buttons["More"].tap()
    app.sheets.buttons["Cancel"].tap()
}

等等,以导航一些特定的,标签,按钮等,并切换到相应的屏幕.但我想浏览我的应用程序的每个屏幕(它可以是BFS样式导航或DFS样式导航,无论如何).有没有iOS提供的方式,所以我可以获得所有可导航元素,然后自动探索我的应用程序更深入和更深入?

我还需要跟踪屏幕中哪些xcuoelement已经处理以及哪些尚未处理.

解决方法

我喜欢你获取所有视图的想法,并检查布局和本地化是否正常.

我认为您需要指定“屏幕”的标准以及如何访问它们.

基本上,可以是以下结构的东西

- UITabBarController
-- UISplitViewController
--- UINavigationController
---- UIViewController
----- UIBarButtonItems
----- UIView
----- UIButton
----- UISwitch
----- UITableViewCell

您现在可以从UITabBarController自上而下到下一个控制实例(也可以跳过一个,例如iPhone上的SplitViewControllers).

您可以使用一般属性:

XCUIApplication().tabBars

然而,转换是一个问题:你如何从一个ViewController到另一个ViewController并且它们都在ViewController的View中定位,或者你是否必须循环视图的子视图.

UIButton -> Touch Up Inside
UISwitch -> Value Changed
UITableViewCell -> DidSelectRowAtIndexPath
UIView -> UILongPressGestureRecognizer

这就是我基本上如何设置它:
对于每个UIViewController实例,获取相关的View(并递归执行以下调用).

检查视图的所有子视图.
对于UIViews,进一步检查他们的子视图
对于UIButtons,请执行TouchUpInside
等等.
确保有一个条件停止深入,因为UITableViews有很多子视图,或者你的UIWebViews当然会以不同的方式设置.

这样您就可以在应用程序层次结构中浏览很多视图,但是您需要一些UIBarButtonItems,自定义手势识别器的扩展,当然还有一些可以监听值更改并执行布局的“特殊”控件 – 更改.

访问特定元素

除了上面的方法,您只需获取特定类型的元素数组,您就可以访问特定元素(例如,您知道它们是具有某些ValueChangeListeners的特定类型的元素)

要特别访问特定对象,比如上面的TabBar示例,您可以像这样使用accessibilityLabel.首先,您需要在代码或.xib文件/ .storyboard中声明accessibilityLabel:

// just to illustrate,so you get an idea:
self.tabBarController.isAccessibilityElement = true
self.tabBarController.accessibilityLabel = "tabBar"

然后做:

let tabBar = XCUIApplication().tabBars["tabBar"]

以下是Apple用于设置这些accessibilityLabels的文档:
https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/iPhoneAccessibility/Making_Application_Accessible/Making_Application_Accessible.html

获取元素的相关标识符的一种好方法是使用Apple的Accessibility Inspector:
https://developer.apple.com/library/content/technotes/TestingAccessibilityOfiOSApps/TestAccessibilityiniOSSimulatorwithAccessibilityInspector/TestAccessibilityiniOSSimulatorwithAccessibilityInspector.html

一般来说访问元素

要访问一般的元素,您需要使用这些对象的XCUIElementType,在这里您将根据它们的类访问对象.
例如.你可以打电话:
一般来说,元素中的“tabBars”,“navBars”,“表格”,“按钮”等等.

你仍然会面临“特殊控制”的问题.由于Apple文档缺少(imho)有关属性和属性的一些细节,我建议在此处提供文档:https://blog.metova.com/guide-xcode-ui-test/它提供了可访问内容的精彩概述,可以帮助您更好地理解.

可以在此处找到可用的XCUIElementTypes的概述.基本上,elementType属性是一个枚举值,表示元素的类型. XCUIElementType是一个非常大的枚举,它的一些成员不适用于iOS应用程序(它们适用于MacOS X应用程序).一些更常用的值是:

Alert
Button
NavigationBar
TabBar
ToolBar
ActivityIndicator
SegmentedControl
Picker
Image
StaticText
TextField
DatePicker
TextView
WebView

https://developer.apple.com/reference/xctest/xcuielementtype?language=objc

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读