2015-12-04 15 views
7

Tôi có thêm một câu hỏi dựa trên chuỗi thảo luận trước đây về chuỗi được bản địa hóa của tôi. Đây là liên kết: How to do automated UI testing for system button on XCode7?Cách truy cập chuỗi được bản địa hóa trong khi kiểm tra giao diện người dùng tự động trong Xcode 7?

Bây giờ nếu tôi chuyển ngôn ngữ hệ thống iOS sang ngôn ngữ khác, tôi không thể lấy chuỗi địa phương vì nó nằm trong gói khác. Tôi đã tìm thấy một chuỗi khác đang nói về điều này: Can't get access to string localizations in UI Test (Xcode 7)

Nó hoạt động tốt nếu tôi sao chép tất cả các chuỗi được bản địa hóa từ ứng dụng đích sang kiểm tra giao diện người dùng. Nhưng đối với những chuỗi trong XIB hoặc bảng phân cảnh, họ đang sử dụng ID đối tượng để biểu diễn một thông báo, điều đó vô nghĩa và không thể đọc được. How to make Object ID human-readable?

Vì vậy, tôi phải chuyển đổi nó đầu tiên phải biết những gì nó ban đầu trước khi sử dụng NSLocalizedString:

NSLocalizedString("Help", bundle: NSBundle(forClass: AClassInYourUITests.self), comment: "") 

Có cách nào dễ dàng để giải quyết vấn đề này trong thời hạn Xcode? Nếu có thể tôi không muốn sử dụng những chuỗi vô nghĩa này trong mã của tôi, thật khó để biết nó là gì. Hoặc tôi phải viết một kịch bản để xử lý điều này?

Để chính xác hơn, hãy có một ví dụ. Một số dây cục bộ của tôi trong kịch bản của ứng dụng mục tiêu là:

"U2v-M1-HYu.text" = "ヘルプ"; 
"eTC-Zg-zHl.headerTitle" = "完了"; 

Nếu tôi muốn làm các xét nghiệm UI cho các ngôn ngữ khác nhau, tôi không thể chỉ cần sao chép nó vào bó thử nghiệm giao diện người dùng. Tôi cần phải chuyển đổi nó trước tiên như sau:

"Help" = "ヘルプ"; 
"Done" = "完了"; 

Mọi đề xuất đều được hoan nghênh.

Trả lời

0

Bước 1. Thêm tập tin localizable.strings của bạn để kiểm tra mục tiêu UI của bạn

Bước 2. Tạo những phương pháp helper trong class Test của bạn (tìm thấy here):

var currentLanguage: (langCode: String, localeCode: String)? { 
    let currentLocale = Locale(identifier: Locale.preferredLanguages.first!) 
    guard let langCode = currentLocale.languageCode else { 
     return nil 
    } 
    var localeCode = langCode 
    if let scriptCode = currentLocale.scriptCode { 
     localeCode = "\(langCode)-\(scriptCode)" 
    } else if let regionCode = currentLocale.regionCode { 
     localeCode = "\(langCode)-\(regionCode)" 
    } 
    return (langCode, localeCode) 
} 

func localizedString(_ key: String) -> String { 
    let testBundle = Bundle(for: /*YourTestClass*/.self) 
    if let currentLanguage = currentLanguage, 
     let testBundlePath = testBundle.path(forResource: currentLanguage.localeCode, ofType: "lproj") ?? testBundle.path(forResource: currentLanguage.langCode, ofType: "lproj"), 
     let localizedBundle = Bundle(path: testBundlePath) 
    { 
     return NSLocalizedString(key, bundle: localizedBundle, comment: "") 
    } 
    return "?" 
} 

Bước 3 . Thay đổi YourTestClass trong bước 2 mã đến lớp kiểm tra của bạn

Bước 4. Nhận chuỗi cục bộ của bạn bằng cách sử dụng localizedString("String")

LƯU Ý: này dường như không làm việc cho tất cả các chuỗi nội địa hóa. Tôi đã tìm thấy nó không hoạt động cho chuỗi kịch bản cho tôi, chỉ có các tập tin localizable.strings.

Các vấn đề liên quan