标签: xcode-ui-testing

UIAutomation和XCTestCase:如何等待按钮激活

我正在写一个UIAutomation测试用例,我需要等待用户激活才能继续.似乎没有一种很好的方法可以检查按钮是否可以更改为启用状态.

什么是最好的是在检查它的状态之前等待UI中发生的事情?

dispatch_after和NSTimer似乎都不起作用.他们只是阻止失败.

ios ios-ui-automation xctest xcode7 xcode-ui-testing

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

iOS 9 UI测试 - 测试失败,因为目标控件不可用(尚未)

我正在测试Xcode 7的新UI测试功能(在WWDC 2015视频" Xcode中的UI测试 "中介绍).

启动时,我的应用程序通过更新其垂直布局约束的值将"登录面板"设置为视图:面板从主视图下方(屏幕外)向上滑动到视图中.

该面板包含两个文本字段,分别用于用户名和密码.

当您在键盘上点击用户名文本字段的返回键(标记为"下一步")时,密码文本字段将成为第一响应者.当您点击密码文本字段的回溯键(标记为"开始")时,面板被"关闭"(即,屏幕后回动画),活动指示器开始旋转并开始认证.

我记录了一个执行上述操作的测试,但是当我尝试"重现"它时,它似乎失败了,因为文本字段不能立即输入:

测试套件'精选测试'开始于2015-08-14 13:14:19.454测试套件'MyAppUITests'开始于2015-08-14 13:14:19.454测试用例' - [MyAppUITests.MyAppUITests testExample]'开始.
t = 0.00s开始测试
t = 0.00s设置
t = 0.00s启动com.myCompany.MyApp 2015-08-14 13:14:19.953 XCTRunner [4667:451922]继续在后台运行测试,任务ID为1
t = 2.64s等待加载的可访问性
t = 6.20s等待应用程序空闲
t = 6.49s点击"用户ID"TextField
t = 6.49s等待应用程序空闲
t = 6.57s找到"用户ID"TextField
t = 6.57s com.myCompany.MyApp的快照可访问性层次结构
t = 6.60s查找:匹配类型的后代TextField
t = 6.60s查找:匹配谓词的元素'"用户ID"IN标识符'
t = 6.60s等待应用程序空闲
t = 6.67s合成事件
t = 6.74s滚动元素到可见
t = 6.78s断言失败:UI测试失败 - 无法滚动到可见(通过AX操作)TextField 0x7fc90251a130:traits:146029150208,{{107.0,807.0},{200.0 ,30.0}},placeholderValue:'用户ID',值:fffffaaaa,错误:错误-25204执行AXAction 2003:0:错误: - [MyAppUITests.MyAppUITests …

ios ios9 xcode-ui-testing

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

在Xcode 7 UI测试中访问嵌套的UIElements

我无法在我正在测试的应用程序的屏幕上找到XCUIElements.我意识到你可以通过以下方式访问按钮:

app.buttons[].elementBoundByIndex(0)
Run Code Online (Sandbox Code Playgroud)

但问题是有时候,找不到组件.就像我在UITableView中的单元格中有一个Button的情况一样.我尝试使用XCUIElementQuery来查找按钮,但它不在那里.我尝试查找表或tableviews或集合视图,即使它们在视图控制器中,它们也不会在UI测试中找到.返回数组的计数将为零.

我最初尝试记录测试,但单击我尝试访问的元素不起作用.Xcode将其检测为"其他元素",并且在尝试点击期间,播放应用程序不会前进.

是否有一种高级方法来访问UI层次结构中的UIView高级组件以进行级联?

ui-testing ios xcode7 xcode-ui-testing

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

无法在Xcode UI Test中点击UIBarButtonItem

我的导航栏上有一个"添加"按钮,我需要让Xcode的UI测试点击该按钮,在它打开的视图控制器中执行测试.我以编程方式添加按钮,如下所示:

UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(showAddVC)];
self.navigationItem.rightBarButtonItem = addButton;
Run Code Online (Sandbox Code Playgroud)

在我的测试中,我有:

XCUIApplication *app = [[XCUIApplication alloc] init];
XCTAssert([app.buttons[@"Add"] exists]); // <-- This passes, so the test runner does see the button.
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用以下两种方式来点击它时:

// Generated using the test recorder
[app.navigationBars[@"App Title"].buttons[@"Add"] tap];
Run Code Online (Sandbox Code Playgroud)

要么:

// Same expression used with the XCTAsset earlier
[app.buttons[@"Add"] tap];    
Run Code Online (Sandbox Code Playgroud)

什么都没发生.点击按钮时应该执行的操作不会发生.我尝试在行sleep(5)之间添加一些内容以让应用程序加载,但这没有多大帮助.

这是测试日志:

Test Case '-[xx]' started.
    t =     0.00s     Start Test
    t =     0.00s     Set Up
2015-12-22 16:25:02.898 XCTRunner[10978:384690] Continuing to run tests in …
Run Code Online (Sandbox Code Playgroud)

xcode objective-c ios xcode-ui-testing

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

Xcode UI测试 - 如何在WebView中查找并点击()元素

我试图找到一种方法来点击具有以下HTML结构的链接:

<a>
  <div id="facebook_sharing"></div>
</a>
Run Code Online (Sandbox Code Playgroud)

该a标签没有与之相关联的,只是任何属性或文本div标签内.

我尝试了以下但没有成功:

app.links["facebook_sharing"].tap()
Run Code Online (Sandbox Code Playgroud)

有没有办法找到div标签元素并点击它?

谢谢!

xcode ios xcode-ui-testing uitest

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

Xcode UI Testing允许系统警报系列

我有问题,如果我尝试允许系列系统警报,只工作一次,下一个警报不"允许"我谷歌搜索更多时间,并知道该帖子:(Xcode 7 UI测试:如何解雇一系列系统警报代码)没什么..不行.这是我当前的代码,首先警告"允许"成功,未检测到下一个警报..

XCUIApplication *app = [[XCUIApplication alloc] init];
app.launchEnvironment = @{
        @"isUITest" : @YES,
        @"withFakeData" : fakeData
};
[app launch];


for (int i = 1; i <= self.possibleSystemAlerts; i++) {
    NSLog(@"%d", i);
    XCTestExpectation *expectation = [self expectationWithDescription:@"High Expectations"];
    id monitor = [self addUIInterruptionMonitorWithDescription:@"Push notifications" handler:^BOOL(XCUIElement *_Nonnull interruptingElement) {
        XCUIElement *element = interruptingElement;
        XCUIElement *allow = element.buttons[@"Allow"];
        XCUIElement *ok = element.buttons[@"OK"];

        if ([ok exists]) {
            [ok tap];
            [expectation fulfill];
            return YES;
        }

        if ([allow exists]) {
            [allow forceTap]; …
Run Code Online (Sandbox Code Playgroud)

xcode objective-c ui-testing ios xcode-ui-testing

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

在运行UI测试时调试应用程序

所以我在XCode中开始一个UI测试,在此期间发生错误或抛出一些异常.

我开始调试并尝试了解问题所在,但是在一段时间后,UI测试失败并显示以下错误消息:

Assertion Failure: UI Testing Failure - Failed to perform AX action for monitoring the animations of <XCUIApplicationProcess...

堆栈已经消失,打印到控制台的所有内容也都消失了.所以在发生这种情况后我无法继续调试.

我假设XCode认为它正在等待动画?还有别人这个问题吗?你知道如何解决它吗?或者是否有可能将计时器增加到几秒钟以上?

xcode ui-testing ios xcode-ui-testing

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

XCTest - 如何在导航栏标题中查询子字符串

我希望能够验证UI测试中导航栏中是否出现子字符串.

例如,如果导航栏标题是"Rent Properties",那么我可以这样匹配:

XCTAssert(XCUIApplication().staticTexts["Rent Properties"].exists)
Run Code Online (Sandbox Code Playgroud)

但是,这有两个问题:

  • 如果文本不在导航栏中,它仍将匹配
  • 它完全匹配,而我希望能够匹配一个子字符串,如"租"

如何才能做到这一点?

xcode ios swift xcode-ui-testing

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

在XCTest中的UI测试中从TextView获取文本

我正在尝试使用XCode进行iOS UI测试.我的测试应用程序具有带可访问性标识的UITextView元素displayTextView.

我尝试了简单的测试,点击这个元素,键入一些文本,然后检查结果如下:

XCUIElement *textView = app.textViews[@"displayTextView"];
[textView tap];
[textView typeText:@"9.9"];
Run Code Online (Sandbox Code Playgroud)

有用.但后来我无法从文本视图中获取键入的文本.我尝试通过以下方式做到这一点:

XCTAssertEqual([textView.accessibilityValue isEqualToString:@"9.9"]);
Run Code Online (Sandbox Code Playgroud)

但它似乎不正确,因为textView.accessibilityValue为null.获取打字文本的方法是什么?

objective-c ios ios-ui-automation xcode-ui-testing

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

如何使用XCTest正确地找到staticText

我正在为我的iOS应用程序实现UITests.到目前为止,我已经能够进行一些简单的测试,但是我来到一个tableView,其中有两个部分.每个部分都有一个包含静态文本的sectionHeaderView,例如."第1节"和"第2节",正常部分为头部样式.

执行app.tables.staticTexts["SECTION 1"].exists时返回true.这是第一部分,在视图加载时最顶部可见.

执行相同操作时,但对于"第2节",它将返回false.此部分的sectionHeaderView此时在视图之外,所以我认为这是问题所在,但事实证明它不是..我试过app.swipeUp(),它成功地将第二部分带入了屏幕.在swipeUp之后我睡了几秒钟让视图稳定下来,并且我执行相同的检查,但它根本无法找到第二个sectionView.

向下滚动后,我试图打印出来app.tables.staticTexts.debugDescription,看看它可以找到,而且它仅说明了第一部分,以及一个tableFooterView我在的tableView的最底部.

在我执行的时候,我app.tables.staticTexts["SECTION 2"].exists可以在模拟器上逐字地看到"第2节"文本.但它并不存在于测试中.

为什么我的第二部分HeaderView对XCTest完全不可见?可能是因为我特别在这个视图上禁用了某种辅助功能 - 变量吗?我找不到任何东西..

编辑,输出:

    t =    32.25s     Find: Descendants matching type Table
    t =    32.26s     Find: Descendants matching type StaticText
    t =    32.26s     Find: Elements matching predicate '"SECTION 1" IN identifiers'
Found SECTION 1. Will scroll down to find Section 2.
    t =    32.26s     Swipe up Target Application 0x6080000bbf60
    t =    32.26s         Wait for app to idle
    t = …
Run Code Online (Sandbox Code Playgroud)

ui-automation ios xctest xcode-ui-testing

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