UI自动化警报提示按钮/文本字段可访问性

时间:2011-05-11 20:20:53

标签: javascript iphone ios uialertview ios-ui-automation

在涉及alertView时,我遇到了UI Automation(内置于iOS工具)的麻烦。首先,我不知道在哪里可以设置accessibilityLabel,例如alertView上的按钮。其次,虽然我没有收到错误,但我无法让textField实际设置textField的值。我将为alertView和我用于UI Automation的javaScript提供代码。

UIATarget.onAlert = function onAlert(alert)
{
    // Log alerts and bail, unless it's the one we want
    var title = alert.name();
    UIALogger.logMessage("Alert with title '" + title + "' encountered!");
    alert.logElementTree();
    if (title == "AlertPrompt")
    {
        UIALogger.logMessage(alert.textFields().length + '');
        target.delay(1);
        alert.textFields()["AlertText"].setValue("AutoTest");
        target.delay(1);

        return true; // Override default handler
    }
    else
        return false;
}


var target = UIATarget.localTarget();
var application = target.frontMostApp(); 
var mainWindow = application.mainWindow();
mainWindow.logElementTree();

//target.delay(1);
//mainWindow.logElementTree();
//target.delay(1);

var tableView = mainWindow.tableViews()[0];
var button = tableView.buttons();
//UIALogger.logMessage("Num buttons: " + button.length);
//UIALogger.logMessage("num Table views: " + mainWindow.tableViews().length);

//UIALogger.logMessage("Number of cells: " + tableView.cells().length);

/*for (var currentCellIndex = 0; currentCellIndex < tableView.cells().length; currentCellIndex++)
{
    var currentCell = tableView.cells()[currentCellIndex];
    UIALogger.logStart("Testing table option: " + currentCell.name());
    tableView.scrollToElementWithName(currentCell.name());
    target.delay(1);
    currentCell.tap();// Go down a level
    target.delay(1);

    UIATarget.localTarget().captureScreenWithName(currentCell.name());
    //mainWindow.navigationBar().leftButton().tap(); // Go back
    target.delay(1);
    UIALogger.logPass("Testing table option " + currentCell.name());
}*/

UIALogger.logStart("Testing add item");
target.delay(1);
mainWindow.navigationBar().buttons()["addButton"].tap();
target.delay(1);
if(tableView.cells().length == 5)
    UIALogger.logPass("Successfully added item to table");
else
    UIALogger.logFail("FAIL: didn't add item to table");

这是我正在使用的alertView

#import "AlertPrompt.h"

@implementation AlertPrompt
@synthesize textField;
@synthesize enteredText;
- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle okButtonTitle:(NSString *)okayButtonTitle withOrientation:(UIInterfaceOrientation) orientation
{

    if ((self == [super initWithTitle:title message:message delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:okayButtonTitle, nil]))
    {
        self.isAccessibilityElement = YES;
        self.accessibilityLabel = @"AlertPrompt";
        UITextField *theTextField;
        if(orientation == UIInterfaceOrientationPortrait)
            theTextField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)];
        else
            theTextField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 30.0, 260.0, 25.0)];
        [theTextField setBackgroundColor:[UIColor whiteColor]]; 
        [self addSubview:theTextField];
        self.textField = theTextField;

        self.textField.isAccessibilityElement = YES;
        self.textField.accessibilityLabel = @"AlertText";
        [theTextField release];
        CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 0.0); 
        [self setTransform:translate];
    }
    return self;
}

- (void)show
{
    [textField becomeFirstResponder];
    [super show];
}
- (NSString *)enteredText
{
    return [self.textField text];
}
- (void)dealloc
{
    //[textField release];
    [super dealloc];
}
@end

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果要为视图指定辅助功能名称,则最有可能尝试为整个视图实现辅助功能方法(我不确定您在标头中为AlertPrompt类创建了哪些子类)。

尝试为AlertPrompt实现添加这些方法:

- (BOOL)isAccessibilityElement {
    return YES;
}

- (NSString *)accessibilityLabel {  // will translate to accessibility .name() in UI javascript
    return [NSString stringWithString:@"AlertPrompt"];
}

- (NSString *)accessibilityValue { // will translate to accessibility .value() in UI javascript
    return [NSString stringWithString:@"AlertString"];
}

然后记录元素树并确保您可以通过UI javascript中的.name()和.value()方法访问您的视图/警报辅助功能属性。