我的问题是关于XCode的Instruments工具中的UI自动化模板。UI自动化如何支持UIActionSheet测试?我知道有一个UIAActionSheet元素,并且我能够在我的应用程序中获得它。但我不知道如何获取和操作操作表中的按钮。UI自动化不为这些按钮提供任何元素。UI自动化文档也没有关于这个问题的任何信息。请参阅下面的链接。看起来这个控件并没有为按钮使用UIButton类,而是以某种特定的方式呈现它们。你能给我一些如何在UIAActionSheet上点击按钮的提示吗?谢谢。
http://developer.apple.com/library/ios/#documentation/ToolsLanguages/Reference/UIAActionSheetClassReference/UIAActionSheet/UIAActionSheet.html#//apple_ref/doc/uid/TP40009895
发布于 2011-03-10 21:39:22
正如您所看到的,有一种方法可以为每个动作单返回默认按钮,即Cancel按钮。由于操作表没有其他“默认”按钮,因此您需要自己实现这些按钮。
需要注意的一点是,woorth apple引用跳过了给定类的方法,这些方法是从父类继承的。UIAActionSheet (像大多数UIA元素一样)继承了UIAElement类的所有方法。检查this reference。您应该能够通过调用以下命令从actionsheet中获取所有按钮的数组
var arrButtons = objActionSheet.buttons();然后,您可以按名称属性检查所需的属性(同样是来自UIAElement name()的方法)。
首先,如果检查数组中您感兴趣的元素,可以使用UIAElement方法elements()直接调用该按钮(假设不会更改ActionSheet)。
例如,如果想要点击ActionSheet树中的第二个按钮,只需调用
UIATarget.localTarget().frontMostApp().actionSheet().elements()[1].tap();也许你可以跳过localTarget(),不确定,但是上面的代码应该可以工作。
发布于 2011-03-17 05:18:21
我已经找到了使用直接点击模拟来解决这个问题的方法。这不是一个很好的解决方案,但至少它是有效的。我在苹果开发者论坛上也问过同样的问题,但没有得到任何回应。
所以,下面的函数就是我的解决方案。我已经测试过了,它的性能很好。我仍然会继续寻找更好的方法。
function tapActionSheetButton(target, actionSheet, buttonIndex)
{
var headerHeight = 28;
var buttonHeight = 50;
if (buttonIndex >= 0)
{
var actionSheetRect = actionSheet.rect();
UIALogger.logMessage("actionSheet:{rect:{origin:{x:" + actionSheetRect.origin.x.toString()
+ ", y:" + actionSheetRect.origin.y.toString()
+ "}, size:{width:" + actionSheetRect.size.width.toString()
+ ", height:" + actionSheetRect.size.height.toString()
+ "}}}");
var xOffset = actionSheetRect.size.width / 2;
var yOffset = headerHeight + buttonIndex * buttonHeight + buttonHeight / 2;
if (yOffset < actionSheetRect.size.height) {
var tap_x = actionSheetRect.origin.x + xOffset;
var tap_y = actionSheetRect.origin.y + yOffset;
target.tap({x:tap_x, y:tap_y});
}
}
else
{
var message = "Cannot tap button " + buttonIndex.toString() + ". It does not exist";
throw message;
}
}发布于 2013-03-08 13:58:51
因为我的动作单在弹出框中,所以返回一个nil元素:
UIATarget.localTarget().frontMostApp().actionSheet();这将返回操作表:
UIATarget.localTarget().frontMostApp().mainWindow().popover().actionSheet();但是它没有元素()和按钮()。
所以我使用MikhailV的函数来点击按钮。
var target = UIATarget.localTarget();
var actionSheet = UIATarget.localTarget().frontMostApp().mainWindow().popover().actionSheet();
var buttonIndex = 1;
tapActionSheetButton(target, actionSheet, buttonIndex);https://stackoverflow.com/questions/5250201
复制相似问题