2016-06-24 21 views
1

Ich möchte Xcode UI Test verwenden, um die Automatisierung meiner App zu automatisieren.Verwenden von XCUIElementQuery zum Abfragen einer Schaltfläche in tableHeaderView nicht gefunden

Meine Ansicht Hierarchie wie: UITableView-> TableHeaderView-> Meine benutzerdefinierte Ansicht-> Einstellung Schaltfläche.

Ich möchte meine Schaltfläche mit AccessibilityIdentifier abfragen, ich setze es in meinem ViewController, und überprüfen Sie es mit dem Zugänglichkeits-Inspektor von Simulator, und mit meinem realen Gerät mit Voiceover überprüfen Sie die Schaltfläche ist Barrierefreiheit.

app.tables.buttons["settingBtn"].tap()

Warum meine Einstellung Taste Zugänglichkeit ist aber Xcode kann es nicht aufnehmen, und der Code von mir die Einstellung Taste nicht finden kann:

Aber mit meinem Code, kann es nicht gegründet werden ?

Kann mir jemand ein paar Tipps geben, wie man den UIElementQuery mit dem richtigen Weg benutzt, um auf meine Schaltfläche zuzugreifen?

--- --- Bearbeiten

In benutzerdefinierter Ansicht:

@implementation HeaderView 

- (void)awakeFromNib { 
    [super awakeFromNib]; 

    [self initAccessibility]; 
} 

- (BOOL)isAccessibilityElement { 
    return NO; 
} 

- (NSArray *)accessibilityElements { 
    return @[self.settingButton]; 
} 

- (NSInteger)accessibilityElementCount { 
    return [[self accessibilityElements] count]; 
} 

- (NSInteger)indexOfAccessibilityElement:(id)element { 
    return [[self accessibilityElements] indexOfObject:element]; 
} 

- (void)initAccessibility { 
    self.settingButton.isAccessibilityElement = YES; 
    self.settingButton.accessibilityIdentifier = @"settingBtn"; 
    self.settingButton.accessibilityLabel = @"settingBtn"; 
} 

- (IBAction)clickSettingButton:(id)sender { 
    if ([self.delegate respondsToSelector:@selector(clickSettingButton)]) { 
     [self.delegate clickSettingButton]; 
    } 
} 

@end 

in Viewcontroller:

- (void)initHeaderView { 
    self.headerView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([HeaderView class]) owner:self options:nil] firstObject]; 
    self.headerView.delegate = self; 
    [self.headerView.backgroundImageView sd_setImageWithURL:[NSURL URLWithString:kURLString]]; 
    [self.headerView setFrame:CGRectMake(0, 0, SCREENWIDTH, (SCREENWIDTH * 9/16))]; 
    self.headerViewHeight = self.headerView.bounds.size.height; 
    [self.tableView addSubview:self.headerView]; 
    self.tableView.contentInset = UIEdgeInsetsMake(self.headerViewHeight, 0, 0, 0); 
    self.tableView.contentOffset = CGPointMake(0, -self.headerViewHeight + kNavigationBarHeight); 
} 

in UI Testcode:

class PopupDialogUITests: XCTestCase { 

    override func setUp() { 
     super.setUp() 

     continueAfterFailure = false 
     XCUIApplication().launch() 
    } 

    override func tearDown() { 
     super.tearDown() 
    }  

    func testExample() { 
     let app = XCUIApplication() 

     app.tables.buttons["SettingBtn"].tap() 
    } 

} 
+0

Diese Abfrage sieht korrekt aus. Können Sie mehr von Ihrem Anwendungscode posten, um beim Debuggen zu helfen? –

+0

Können Sie die Ausgabe von 'app.tables.buttons.debugDescription' posten? – Oletha

+0

@Oletha, die debugdescription ist: Finde: Nachkommen Typ Tabelle Ausgabe passend: { Tabelle 0x7fb6505e84e0: Merkmale: 35192962023424, {{0.0, 0.0}, {414,0, 736,0}}} ↪︎Find: Nachkommen Typ Knopf passende Keine Schaltfläche in der Tabelle gefunden, aber in Accessibility Inspector, sieht es so aus: http://imgur.com/uUEOVaQ –

Antwort

1

Ich weiß, Es ist über einen Monat her, seit du fragst Ich habe bemerkt, dass Sie immer noch keine Lösung für Ihr Problem gefunden haben. Sie verwenden ein Großbuchstabe "S" am Anfang Ihrer Zeichenfolge, wenn Sie die Eingabehilfe-ID in Ihrem Test angeben, wenn sie in Kleinbuchstaben geschrieben werden soll.

- (void)initAccessibility { 
    self.settingButton.isAccessibilityElement = YES; 
    self.settingButton.accessibilityIdentifier = @"settingBtn"; 
    self.settingButton.accessibilityLabel = @"settingBtn"; 
} 

app.tables.buttons["SettingBtn"].tap()