使用KIF以编程方式将tap事件发送到iOS背景中的坐标

时间:2017-08-26 12:22:50

标签: ios objective-c iphone background kif

我们的想法是创建一个应用程序,可以在iOS中的另一个应用程序的后台连续发送“在坐标(x,y)”事件中点击屏幕。想想'Cookie Clicker'作弊。我目前正在他的应用程序中帮助我的朋友,我的工作是尝试尽可能地将其排除在外。我有一种轻微的感觉,即尽可能多地点击他的一个按钮会使他的应用程序出错,这就是为什么我在这里。

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

  1. 在其中一个类中,文件KIFUITestActor.m的代码为:

    <div id='tooltipAncestorOff'>
        <div id='tooltipAncestorClick'>
        <div id='tooltipAncestorHover'>
            <p class='autosize'>Just <span class='hilite' id="onez">FIRST hilite</span></p>
            <p class='autosize'>Only <span class='hilite' id="twoz">SECOND hilite</span></p>
            <p class='autosize'>Only <span class='hilite' id="threez">THIRD hilite</span></p>
            <p class='autosize'>Only <span class='hilite' id="fourz">FOURTH hilite</span></p>
            <p class='autosize'>Only <span class='hilite' id="fivez">FIFTH hilite</span></p>
            <p class='autosize'>Only <span class='hilite' id="sixz">SIXTH hilite</span></p>
        </div>  </div>  </div>
    
        <ul>
            <li id='toolTip'>placeholder... solve: why do I need text here?</li>
        </ul>
    
    <form name="chooseTooltips">
      <input type="radio" name="tooltips" value="hover" checked> HOVER TOOLTIPS<br />
      <input type="radio" name="tooltips" value="click"> CLICK TOOLTIPS<br />
      <input type="radio" name="tooltips" value="none"> NO TOOLTIPS<br />
    </form>

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

  2. 将该类作为后台服务运行会实现后台执行吗?
  3. 非常感谢你能回答这个问题。

1 个答案:

答案 0 :(得分:1)

一些选项,具体取决于您有权访问的内容。如果你有其他应用程序的实际IPA,你想要“错误”,并且你可以附加一个测试目标,那么m = 0 x = 1 while x < 4: y = 1 while y < 3: m = m + x + y y = y + 1 x = x + 1 print(m) 是一个很好的选择。

这是关于使用KIF进行UI测试的一个小指南(可轻松转换,链接here)。一个简短的总结是:

KIF

那种代码应该有一个等价的 [tester tapViewWithAccessibilityLabel:@"Clear"]; 或类似的东西(我上次使用过KIF一年前,但它应该记录得很好)。

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

如果您至少可以在iPhone模拟器中下载应用程序,那么

Automator可以帮助您编写脚本。由于我认为Xcode 9允许你这样做,所以只要目标应用程序在应用程序商店中,这部分就不应该很难。

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

编辑:更新基于重新阅读问题+赏金请求

  

将该类作为后台服务运行会实现后台执行吗?

这又取决于您是否可以将其作为后台服务运行。如果你有权访问代码本身,那么它可以完成,虽然我不确定后面执行的目标在你描述的问题中是什么。

tapViewAtPoint将无法处理前台不在的任何内容。一般情况下,iOS设备永远不会在后台将应用程序漏斗到应用程序,因此如果要测试的攻击媒介是重复点击应用程序,则后台执行可能不是答案。

从你的问题来看,这看起来更像是一个用于并行化tap循环的用例,你的问题似乎可以从KIF的并行模拟器功能添加中受益。

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