标签: xcode-ui-testing

如何检测iOS应用程序是否在UI测试模式下运行

我希望我的应用程序在UI测试模式下运行时运行特殊代码(例如重置其状态).我查看了从UI测试运行应用程序时设置的环境变量,并且没有任何明显的参数来区分正常运行的应用程序与UI测试中的应用程序.有没有办法找出来?

我不满意的两个解决方法是:

  1. 设置XCUIApplication.launchEnvironment一些变量,我稍后在应用程序中检查.这不好,因为您必须在setUp每个测试文件的方法中设置它.我尝试从方案设置中设置环境变量,但在运行UI测试测试时不会传播到应用程序本身.
  2. 检查环境变量是否存在__XPC_DYLD_LIBRARY_PATH.这似乎非常hacky,可能现在只能工作,因为我们如何设置目标构建设置是巧合.

ios xcode-ui-testing

39
推荐指数
4
解决办法
1万
查看次数

使用Xcode 7运行UITesting时出现'NSInternalInconsistencyException'

好吧,到目前为止,我还没能在任何测试版中运行此测试.我遇到的一些问题是在这里这里

现在,我觉得我错过了一些东西.

到目前为止,这是我的进步

  1. 在创建新项目时启用"UI测试"选项.事实上,这为我增加了一个目标.所以我应该好好去 - 或者我想. 在此输入图像描述
  2. UI测试下的swift文件已经导入了"XCTest",并且是"XCTestCase"的子类.
  3. setup()启动应用程序XCUIApplication().launch()
  4. 我添加了以下内容(通过点击"记录"按钮) 在此输入图像描述

然后,我运行了这个测试.

甚至在调用测试之前,整个事情都失败了,在使用以下内容在setup()中启动应用程序之后

***断言失败 - [XCUIApplication init],/ Library/Caches/com.apple.xbs/Sources/XCTest_Sim/XCTest-8170.3/XCTestFramework/UI Testing/XCUIApplication.m:76/Users/UserName/Documents/Projects/Testing/UiTesting/UITestingApp/UITestingApp.swift:0:错误: - [UITestingApp.UITestingApp testSimpleTap]:failed:捕获"NSInternalInconsistencyException","没有通过测试配置指定的目标应用程序路径:
testBundleURL:file:/// Users/UserName /图书馆/开发商/ CoreSimulator /设备/ E3201DC2-CAD3-48C3-95F5-15E18DCA1836 /数据/集装箱/包/应用/ 8B33FC59-FC03-41F8-BD21-43D81BA2D355/UITestingApp-Runner.app /插件/ UITestingApp.xctest /
productModuleName :( null)testsToRun:(null)reportResultsToIDE:no sessionIdentifier:<__ NSConcreteUUID 0x7f93e146c0b0> F242796B-ED26-4AA7-861A-540D2D93CB8F pathToXcodeReportingSocket:(null)disablePerformanceMetrics:no treatMissingBaselinesAsFailures:no baselineFileURL:(null)targetApplicationPath :(null)targetApplicationBundleID:(null)reportActivities:no

任何人遇到这个或对我可能缺少什么有任何建议?

注意:我确实将UI测试目标的"目标应用程序"设置为我的应用程序

更新:我注意到这适用于Xcode的所有beta/final版本 - 相应地更新了标题

xcode ios swift xcode7 xcode-ui-testing

36
推荐指数
4
解决办法
2万
查看次数

滚动直到元素可见iOS UI自动化与xcode7

因此,通过新的xcode更新,apple改进了我们进行UI测试的方式.在乐器中,我们使用java脚本函数"isVisible"来确定我们的目标元素是否可见.

我试图在目标c中复制这个,但我似乎无法找到相当于此的东西.我有一个表视图,一个原型单元格,上面有两个标签.这个原型单元可以重复使用50次.

我正在尝试滚动,直到最后一个单元格可见,我这样做:

if (![[[[[[XCUIApplication alloc] init].tables childrenMatchingType:XCUIElementTypeCell] matchingIdentifier:@"cell"] elementBoundByIndex:49].staticTexts[@"text"] exists]) {
        [[[[[[XCUIApplication alloc] init].tables childrenMatchingType:XCUIElementTypeCell] matchingIdentifier:@"cell"] elementBoundByIndex:0].staticTexts[@"text"] swipeUp];
}
Run Code Online (Sandbox Code Playgroud)

但是这不会滑动,因为加载视图时元素存在.请帮助因为这让我发疯.

objective-c ios xcode-ui-testing

34
推荐指数
4
解决办法
2万
查看次数

Xcode 7 UITests具有本地化UI

在我的应用程序中,我正在使用NSLocalizedString本地化我的应用程序.现在我想切换到UITests和这样的测试代码:

[tabBarsQuery.buttons["particiants"] tap];
Run Code Online (Sandbox Code Playgroud)

这适用于英语,但不适用于其他语言.

[tabBarsQuery.buttons[NSLocalizedString("PARTICIPANTS",comment:nil)] tap];
Run Code Online (Sandbox Code Playgroud)

失败 - 可能是因为Localizable.strings在另一个包中.如何测试本地化应用?

ios swift xcode7 xcode-ui-testing

32
推荐指数
4
解决办法
9340
查看次数

Xcode7 | Xcode UI测试| 如何处理位置服务警报?

我正在使用Xcode7/iOS 9中引入的XCUIApplication,XCUIElement和XCUIElementQuery为我的应用程序编写UI测试用例.

我遇到了路障.测试用例中的一个屏幕需要iOS的位置服务.正如预期的那样,系统会提示用户允许使用名为" Allow “App name” to access your location while you use the app?with Allow&Don't Allowbuttons"的警报来使用位置服务.

问题是或许似乎由于警报由OS本身呈现,因此它不存在于Application的元素子树中.

我记录了以下内容:

print("XYZ:\(app.alerts.count)")//0
var existence = app.staticTexts["Allow “App Name” to access your location while you use the app?"].exists
print("XYZ:\(existence)")//false
existence  = app.buttons["Allow"].exists
print("XYZ:\(existence)") //false
Run Code Online (Sandbox Code Playgroud)

甚至UI录制生成类似的代码:

XCUIApplication().alerts["Allow “App Name” to access your location while you use the app?"].collectionViews.buttons["Allow"].tap()
Run Code Online (Sandbox Code Playgroud)

我还没有找到任何可以让我解决这个问题的API.例如:

  • 点按屏幕上的某个位置
  • 在应用外部获取提醒

那我该怎么办呢?有没有办法配置测试目标,以便不需要位置服务授权.

xcode xctest ios9 xcode-ui-testing xcode7-beta4

31
推荐指数
2
解决办法
1万
查看次数

Xcode 7 UI测试:解除推送和位置警报

我遇到了Xcode 7 UI测试的问题.

我的用户登录后,应用程序会显示两个警报,即请求位置警报和推送通知警报.这些通知一个接一个地显示.位置一出现在第一位.

我尝试自动解雇它们以开始我的测试.

为此,我添加了两个UIInterruptionMonitor,第一个用于Location Alert,第二个用于Notification Push Alert.

    addUIInterruptionMonitorWithDescription("Location Dialog") { (alert) -> Bool in
        /* Dismiss Location Dialog */
        if alert.collectionViews.buttons["Allow"].exists {
            alert.collectionViews.buttons["Allow"].tap()
            return true
        }
        return false
    }
    addUIInterruptionMonitorWithDescription("Push Dialog") { (alert) -> Bool in
        /* Dismiss Push Dialog */
        if alert.collectionViews.buttons["OK"].exists {
            alert.collectionViews.buttons["OK"].tap()
            return true
        }
        return false
    }
Run Code Online (Sandbox Code Playgroud)

但只触发Location 1,从不调用Push Notifications UIInterruptionMonitor的处理程序.

如果我在返回true 请求位置 UIInterruptionMonitor因为这等后接受的答案指定.两个处理程序都被调用,但两个UIInterruptionMonitor中alert参数都链接到请求位置警报视图,因此永远找不到"确定"按钮.

如何解除这两个连续的警报视图?

xcode ios swift xcode-ui-testing

31
推荐指数
2
解决办法
5589
查看次数

iOS UI测试在一个被隔绝的看法

我正在尝试在我的iOS项目中加入UI测试,但是有一件事情继续让我感到震惊的是,你所编写的所有测试似乎都必须从应用程序的开头开始并逐步完成.例如,如果我想测试登录屏幕后面的视图,我的测试必须首先在登录屏幕上运行,输入用户名/密码,单击登录,然后转到我想要测试的视图.理想情况下,登录视图和下一个视图的测试将完全隔离.有没有办法做到这一点,还是我完全错过了UI测试背后的哲学?

ios xctest swift xcode-ui-testing

31
推荐指数
3
解决办法
7141
查看次数

如何在Xcode的UITests下以通用方式访问后退按钮项?

问题是当我尝试访问后退栏按钮项时,因为它显示为:

  • Restaurants 标题,
  • Back 标题
  • 没有头衔

喜欢它在屏幕上:

在此输入图像描述 在此输入图像描述 在此输入图像描述

目前我这样访问它:

let backButton = XCUIApplication().buttons["Restaurants"]
Run Code Online (Sandbox Code Playgroud)

但它不适用于其他情况.这不是普遍的方式.我可以以某种方式设置accessibilityIdentifier或者其他吗?

ios swift xcode-ui-testing

31
推荐指数
3
解决办法
8705
查看次数

Xcode 7 UI测试,录制按钮显示为灰色

我正在尝试使用Xcode 7将UI测试添加到现有项目中.但是,UI测试记录按钮始终是灰色的.我在这里缺少什么?

我尝试重新启动Xcode,清理和重建项目并添加新的UI测试目标.有没有其他人经历过同样的行为?

iphone xcode ios xcode7 xcode-ui-testing

30
推荐指数
5
解决办法
1万
查看次数

Xcode UI测试 - 带时间戳的事件匹配错误

录制UI测试时出现此错误.此时录像机停止录制代码.这是什么意思?

在此输入图像描述

xcode7 xcode-ui-testing

30
推荐指数
1
解决办法
6547
查看次数

标签 统计

xcode-ui-testing ×10

ios ×8

swift ×5

xcode ×4

xcode7 ×4

xctest ×2

ios9 ×1

iphone ×1

objective-c ×1

xcode7-beta4 ×1