使用 KIF 以编程方式将点击事件发送到 iOS 后台的坐标



这个想法是制作一个应用程序,可以在iOS中另一个应用程序的后台连续发送"点击坐标(x,y(处的屏幕"事件。想想"饼干点击器"作弊。我目前正在帮助我的朋友在他的应用程序中,我的工作是尝试尽可能多地将其排除在外。我有点感觉,尽可能多地点击他的一个按钮会破坏他的应用程序,这就是为什么我在这里。

该方法使用 KIF 以及 iOS 中的后台执行来实现此目的。

  1. 在其中一个类中,文件 KIFUITestActor.m 具有以下代码:

    - (void)tapScreenAtPoint:(CGPoint)screenPoint
    {
    [self runBlock:^KIFTestStepResult(NSError **error) {
    // Try all the windows until we get one back that actually has something in it at the given point
    UIView *view = nil;
    for (UIWindow *window in [[[UIApplication sharedApplication] windowsWithKeyWindow] reverseObjectEnumerator]) {
    CGPoint windowPoint = [window convertPoint:screenPoint fromView:nil];
    view = [window hitTest:windowPoint withEvent:nil];
    // If we hit the window itself, then skip it.
    if (view != window && view != nil) {
    break;
    }
    }
    KIFTestWaitCondition(view, error, @"No view was found at the point %@", NSStringFromCGPoint(screenPoint));
    // This is mostly redundant of the test in _accessibilityElementWithLabel:
    CGPoint viewPoint = [view convertPoint:screenPoint fromView:nil];
    [view tapAtPoint:viewPoint];
    return KIFTestStepResultSuccess;
    }];
    }
    

    这是否是我正在寻找的代码,我将如何在 Swift 中实现它?(或者Objective-C,如果它让事情变得更容易?(

  2. 类作为后台服务运行是否会实现后台执行?

如果您能回答这个问题,非常感谢。

几个选项,具体取决于您有权访问的内容。如果您有要"错误"的其他应用程序的实际 IPA,并且可以将测试目标附加到它,那么KIF是一个不错的选择。

这是使用KIF进行UI测试的小指南(易于谷歌搜索,链接在这里(。不过,快速总结一下:

[tester tapViewWithAccessibilityLabel:@"Clear"];

这种代码应该有一个名为tapViewAtPoint或类似的东西(我上次使用KIF是在一年多前,但它应该像当时一样被很好地记录下来(。

但是,如果您无法访问您尝试攻击的应用程序(对于此类问题似乎更有可能(,那么您可以完全使用不同的方法。

自动操作可以帮助您编写脚本,如果您至少可以在iPhone模拟器中下载该应用程序。既然 Xcode 9 我相信允许你这样做,这部分应该不难,只要目标应用在应用商店里就行了。

如果不是,并且您没有代码,我很想知道您是如何分发应用程序的,因为可能仍然有一种方法可以使用我建议的一个或另一个选项。祝你好运!

编辑:根据重新阅读问题+赏金请求再次更新

类作为后台服务运行是否会实现后台执行?

这再次取决于您是否可以将其作为后台服务运行。如果您可以访问代码本身,则可以完成,尽管我不确定您描述的问题中后台执行的目标是什么。

KIF将无法处理任何不在前台的内容。通常,iOS 设备从不将点击漏斗到后台的应用程序,因此如果正在测试的攻击媒介是重复点击应用程序,则后台执行可能不是答案。

从您的问题来看,这看起来更像是并行化分接循环的用例,您的问题似乎可以从Xcode 9的并行模拟器功能添加中受益。

虽然我还没有亲自尝试过,但您可以在运行Xcode 9的机器上的多个模拟器中进行并行KIF运行。这可能是获取尽可能多的有关导致问题的原因的数据点的最佳方式,因为您可以随时截取应用程序的屏幕截图UI tests。在Xcode 9,我相信还有一个新功能可以直接从Simulator录制视频(不再需要Quicktime(。

最新更新