是否可以使用EarlGrey(iOS UI测试)解除系统警报?

时间:2016-02-23 22:34:49

标签: ios ui-testing earlgrey

我开始尝试使用EarlGrey,现在使用XCUITest进行了UI测试几个月。我遇到了无法解除系统警报的经典问题,这很奇怪,因为看起来Google实现了一个名为grey_systemAlertViewShown()的系统警报匹配器。我正在尝试使用GREYCondition检测系统警报。这是我尝试过的:

    - (void)waitForAndDismissSystemAlertForSeconds:(NSInteger)seconds {
    GREYCondition *interactableCondition = [GREYCondition conditionWithName:@"isInteractable" block:^BOOL{
        // Fails if element is not interactable
        NSError *error;
        [[EarlGrey selectElementWithMatcher:grey_systemAlertViewShown()] assertWithMatcher:grey_interactable() error:&error];

        if (error) {
            return NO;
        } else {
            NSError *allowButtonError;
            [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Allow")] assertWithMatcher:grey_notNil() error:&allowButtonError];
            if (!allowButtonError) {
                [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(@"Allow")] performAction:grey_tap()];
               }

        return YES;
    }];

    [interactableCondition waitWithTimeout:seconds];
}

我也尝试过使用这里描述的addUIInterruptionMonitorWithDescription(但是使用EarlGrey代码基本上完成了我在上面的中断监视器中所做的事情):Xcode 7 UI Testing: how to dismiss a series of system alerts in code

这两种方法都不奏效。我的GREYCondition中的非错误情况不会触发断点,中断监视器也不会解除我的警报。

有人知道EarlGrey是否支持驳回系统警报?

4 个答案:

答案 0 :(得分:5)

作为grey_systemAlertViewShown indicate的文档,grey_systemAlertViewShown仅检查是否显示系统警报视图。更好地使用API​​将断言未显示系统警报(可能是因为测试应用程序模拟了导致系统警报的代码)。

body {
  margin: 0px;
}
#page-container 
{
position:absolute;
margin: 0px;
padding: 0px;
border: 0px;
}

#header 
{
background-color: #f9f8e5;
margin-left: 0px;
margin-right: 0px;
margin-bottom: 20px;
margin-top: -10px;
padding: 0px;
border: 0px;
width: 100%;
height: 200px;
}

在撰写此系统时,EarlGrey不会忽视警报视图。应用程序启动的警报视图可以被取消。 FAQ有一个问题,表明如果存在模态对话框,EarlGrey测试将失败。

答案 1 :(得分:2)

我们发现解决此问题的最佳方法是包含一个用于测试的启动参数,我们不会在该应用中注册通知。

类似的东西:

if [[[NSProcessInfo processInfo] arguments] containsObject:argument] { return; }

之前打电话

[[UIApplication sharedApplication] registerUserNotificationSettings:settings]; [[UIApplication sharedApplication] registerForRemoteNotifications];

这样,"你想要允许推送通知......"警报不会显示。

答案 2 :(得分:1)

可以使用AppleSimulatorUtils util授予所有必需的权限。

这种方法消除了消除警报的需要,并节省了时间。

通过在终端应用程序中输入下一个命令来安装实用程序

<http> <headers> <content-type-options="nosniff"/> </headers> </http>

brew tap wix/brew

并授予权限

brew install applesimutils


有关更多信息和示例,请参阅

https://github.com/wix/AppleSimulatorUtils

答案 3 :(得分:0)

EarlGreyImpl.invoked(fromFile:#file,lineNumber:#line).selectElement(with:grey_text(“ Click”))。perform(grey_tap())

//使用上面的代码可能会解决您的问题