首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS/UI自动化: UIAActionSheet不能使用按钮进行操作

iOS/UI自动化: UIAActionSheet不能使用按钮进行操作
EN

Stack Overflow用户
提问于 2011-03-10 02:08:14
回答 4查看 5.4K关注 0票数 2

我的问题是关于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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-10 21:39:22

正如您所看到的,有一种方法可以为每个动作单返回默认按钮,即Cancel按钮。由于操作表没有其他“默认”按钮,因此您需要自己实现这些按钮。

需要注意的一点是,woorth apple引用跳过了给定类的方法,这些方法是从父类继承的。UIAActionSheet (像大多数UIA元素一样)继承了UIAElement类的所有方法。检查this reference。您应该能够通过调用以下命令从actionsheet中获取所有按钮的数组

代码语言:javascript
复制
var arrButtons = objActionSheet.buttons();

然后,您可以按名称属性检查所需的属性(同样是来自UIAElement name()的方法)。

首先,如果检查数组中您感兴趣的元素,可以使用UIAElement方法elements()直接调用该按钮(假设不会更改ActionSheet)。

例如,如果想要点击ActionSheet树中的第二个按钮,只需调用

代码语言:javascript
复制
UIATarget.localTarget().frontMostApp().actionSheet().elements()[1].tap();

也许你可以跳过localTarget(),不确定,但是上面的代码应该可以工作。

票数 5
EN

Stack Overflow用户

发布于 2011-03-17 05:18:21

我已经找到了使用直接点击模拟来解决这个问题的方法。这不是一个很好的解决方案,但至少它是有效的。我在苹果开发者论坛上也问过同样的问题,但没有得到任何回应。

所以,下面的函数就是我的解决方案。我已经测试过了,它的性能很好。我仍然会继续寻找更好的方法。

代码语言:javascript
复制
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;
    }
}
票数 6
EN

Stack Overflow用户

发布于 2013-03-08 13:58:51

因为我的动作单在弹出框中,所以返回一个nil元素:

代码语言:javascript
复制
UIATarget.localTarget().frontMostApp().actionSheet();

这将返回操作表:

代码语言:javascript
复制
UIATarget.localTarget().frontMostApp().mainWindow().popover().actionSheet();

但是它没有元素()和按钮()。

所以我使用MikhailV的函数来点击按钮。

代码语言:javascript
复制
var target = UIATarget.localTarget();
var actionSheet = UIATarget.localTarget().frontMostApp().mainWindow().popover().actionSheet();
var buttonIndex = 1;

tapActionSheetButton(target, actionSheet, buttonIndex);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5250201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档