如何在iPhone的Cocoa中模拟鼠标单击UIWebView?

如何在iPhone的Cocoa中模拟鼠标单击UIWebView?,iphone,cocoa-touch,automation,uiwebview,mouseclick-event,Iphone,Cocoa Touch,Automation,Uiwebview,Mouseclick Event,我正在尝试为iPhone应用程序设置自动单元测试。我使用的是UIWebView,需要模拟不同链接上的点击。我已经尝试过了,但它不会产生与我手动单击链接时相同的结果。主要问题是链接的目标属性设置为 当你手动点击一个标准的“弹出”链接时(例如,似乎做了类似的事情) 有没有办法在框架内做到这一点 我发现了一个类似的问题,题目是,但是我猜这个方法只对OSX有效,对iPhone操作系统无效。我想你可以通过直接在UIView上调用touchesBegind/touchesend方法来模拟触摸(检查类).对于

我正在尝试为iPhone应用程序设置自动单元测试。我使用的是UIWebView,需要模拟不同链接上的点击。我已经尝试过了,但它不会产生与我手动单击链接时相同的结果。主要问题是链接的
目标属性设置为

当你手动点击一个标准的“弹出”链接时(例如,
似乎做了类似的事情)

有没有办法在框架内做到这一点


我发现了一个类似的问题,题目是,但是我猜这个方法只对OSX有效,对iPhone操作系统无效。

我想你可以通过直接在
UIView
上调用
touchesBegind
/
touchesend
方法来模拟触摸(检查类).

对于您的特定情况,在模拟器中进行测试并使用MacOS事件生成器进行单击就足够了

录制和发送事件的私人调用是标准的“自担风险使用”免责声明的一部分。每个UIEvent实际上都是一个UIInternalEvent,它引用了一个uuu GSEvent,因此对于录制,您可以使用GSEvent属性来获取基础事件

@property (nonatomic,assign) struct __GSEvent *_gsEvent;

我没有使用过这些东西,但是看起来GSSendSystemEvent是一个很好的起点。

正确的方法是构建自己的
UIEvent
,然后通过
-sendEvent:
方法将此事件发布到
UIApplication
实例


但是,似乎没有用于构建
UIEvent
的公共API,因此您可能运气不佳。

您能否将单击的位置存储在测试中使用的数据结构中,然后按照此处所述模拟标准触摸事件

---刚刚发现您在这个链接上的示例上运气不太好。我唯一能建议的其他选项是,在从测试运行时操作html以替换任何目标链接(您知道UIWebView在手动单击时会正确处理这些链接,所以我认为在单元测试中使用小bodge是可以的?)


中进行了很好的演练,我尝试使用与这里提供的示例类似的代码:但它不起作用。在普通的UIView子类上,它显然会调用ToucheSBegind/touchesEnded方法,因为代码示例直接调用它。问题是,当您将其发送到UIWebView时,它不会像用户单击某个控件一样传递该事件我尝试创建一个UIEvent,如上所述,我甚至对代码进行了一些修改,使人工UITouch的属性与真实UITouch的属性完全相同。但是,这仍然不会触发浏览器上的简单单击。感谢您的建议。不幸的是,我手动修改链接没有任何帮助,因为当按下这样的链接时,我正在测试行为。如果我修改链接,则测试没有测试正确的行为,并且没有用。