我开始尝试使用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是否支持驳回系统警报?
答案 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
有关更多信息和示例,请参阅
答案 3 :(得分:0)
EarlGreyImpl.invoked(fromFile:#file,lineNumber:#line).selectElement(with:grey_text(“ Click”))。perform(grey_tap())
//使用上面的代码可能会解决您的问题