2016-08-09 3 views
1

Xcode 7에서 일부 UI 테스트를 작성했으며 버튼을 참조해야 할 때 accessibility.identifier을 사용합니다. 이 논리는 모든 언어에서 올바르게 작동했습니다. 엑스 코드 7.3와iOS의 다국어 UI 자동화 테스트

app.buttons["signin"].tap() 

내가 시뮬레이터 언어가 영어가 아닌 경우 버튼을 찾을 수 없기 때문에 테스트가 실패 코드를 실행하려고합니다. 또한 언어가 영어로 다른 경우 Xcode에서이 단추를 읽는 방법을 확인하기 위해 탐색을 기록하려고했습니다. 번역을 키로 사용한다는 사실을 알았습니다 ... 전혀 이해가되지 않습니다!

이러한 테스트는 스크린 샷을 만드는 데 정말 유용했지만 분명히이 문제로 모든 언어에 대한 테스트를 실행할 수는 없습니다.

식별자로 인식 할 수없는 경우 어떻게 절대적인 방법으로 단추를 가리킬 수 있습니까?

---- 편집 내가 주요 문제를 발견했다. 번역을 한 회사는 labelidentifier 필드 번역했습니다/

내가 app.buttons.elementBoundByIndex(1)를 사용하여 요소를 얻으려고을하지만 당신은 실제 accessibilityIdentifier 버튼에 할당 한 다음 한 수 제대로

답변

0

를 작동하지 않는 것 액세스 해보십시오. 텍스트가있는 버튼에 액세스하는 것은 텍스트가 언제든지 바뀔 수 있으므로 항상 나쁜 생각입니다. 예. : XCUIApplication(). buttons [ "AppSignInIdentifier"]

0

프로젝트가 현지화 파일을 관리하기를 바랍니다. 나는 똑같은 문제에 직면했다. 그렇다면 현지화는 아직 UIAutomation에서 직접 작동하지 않습니다. 해결 방법이 있습니다. 코드 스 니펫을 나와 공유하고 있습니다. 번들에있는 xcodeproj 파일을 먼저 찾아야합니다. 이러한 파일은 UIAutomation 대상에 번들로 제공되지 않으므로

- (NSString *)getLocalizedString:(NSString *)string withComments:(NSString *)comments { 
    NSString *userLocale = [[NSLocale currentLocale] localeIdentifier]; 
    NSString *userLanguage = [userLocale substringToIndex:2]; 
    NSString *path = [self getProjectPath]; 

    path = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"/YourProjectFileName/Resources/Localization/%@.lproj",userLanguage]]; 

    NSBundle *bundle = [NSBundle bundleWithPath:path]; 
    NSString *localizedString = NSLocalizedStringFromTableInBundle(string, @"Localizable", bundle, comments); 

    return localizedString; 
} 


- (NSString *)getProjectPath { 

    NSString *currentSourceFilePath = [[NSString stringWithCString:__FILE__ encoding:NSUTF8StringEncoding] stringByDeletingLastPathComponent]; 

    NSString *currentPath = [currentSourceFilePath copy]; 

    BOOL foundIt = NO; 

    do { 
     NSString *testPath = [currentPath stringByAppendingPathComponent:@"XYZ.xcodeproj"]; 

     if ([[NSFileManager defaultManager] fileExistsAtPath:testPath]) { 
      // found it 
      foundIt = YES; 
      break; 
     } 

     if ([currentPath isEqualToString:@"/"]) { 
      // cannot go further up 
      break; 
     } 

     currentPath = [currentPath stringByDeletingLastPathComponent]; 

    } while ([currentPath length]); 

    if (!foundIt) { 
     return nil; 
    } 

    return currentPath; 
} 

그리고 사용이 //

NSString *loginStr = [self getLocalizedString:@"Login" withComments:@""]; 

그리고 자동화 프로세스를 찾는 것이 쉬울 것이다 있도록 또한 자동화의 더 나은 사용을 위해, 당신의 컨트롤에 대한 접근성 레이블을 설정하십시오

프로세서 오버 헤드가 적고 충돌 및 문제 발생 가능성이 적습니다.

0

접근성 식별자는 지역화 된 문자열이 아니어야합니다. 그렇지 않으면 다른 언어로 앱을 실행할 때 변경됩니다.

내게 필요한 옵션 식별자를 언어에 관계없이 그대로 하드 코드하면됩니다.

button.accessibilityIdentifier = "myButton"