Кнопка AlertPrompt для автоматизации пользовательского интерфейса / textField - PullRequest
0 голосов
/ 12 мая 2011

У меня небольшие проблемы с UI Automation (встроенным в iOS-инструмент), когда дело доходит до alertView. Прежде всего, я не уверен, где я могу установить accessibilityLabel и тому подобное для кнопок, которые находятся в alertView. Во-вторых, хотя я не получаю сообщение об ошибке, я не могу заставить свой textField фактически установить значение textField в какое-либо значение. Я добавлю свой код для alertView и 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 голосов
/ 12 мая 2011

Если вы хотите назначить имя доступности для вашего представления, скорее всего, вам следует попытаться реализовать методы доступности для всего представления (я не уверен, что вы подклассифицируете для класса 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"];
}

Затем зарегистрируйте дерево элементов и убедитесь, что вы можете получить доступ к своим свойствам доступности представления / предупреждения через методы .name () и .value () в пользовательском интерфейсе javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...