2015-10-12 18 views
14

Vì vậy, tôi có một tình huống trong đó tôi có một vài textField được xác thực. Tôi đang cố gắng chạy thử nghiệm giao diện người dùng và khi họ không thành công, họ sẽ nhận được cảnh báo bật lên bằng thông báo lỗi (có thể là một thông báo khác tùy thuộc vào trường nào không hợp lệ và theo cách nào).Không thể truy cập vào các bản địa hóa chuỗi trong Kiểm tra giao diện người dùng (Xcode 7)

Tôi muốn kiểm tra rằng không chỉ một cảnh báo xuất hiện, mà thông báo chính xác được hiển thị. Vấn đề tôi gặp phải là tôi cần lấy nội dung bản địa hóa để so sánh (nếu tôi chạy thử nghiệm bằng ngôn ngữ khác ngoài tiếng Anh), nhưng khi tôi gọi NSLocalizedString trong UITest, nó không thể thu thập đúng chuỗi địa phương (chỉ trả về khóa [mặc định])

Tôi đã thử thêm các tệp localizeable.strings vào mục tiêu UITest, nhưng không có kết quả. Có ai biết nếu điều này là có thể?

chỉnh sửa dưới dạng ghi chú phụ: Tôi cũng đã thử đặt định danh truy cập trên UIAlertView nhưng khi tôi truy vấn bằng mã định danh trợ năng đó không tồn tại, tôi chỉ có thể truy vấn bằng tiêu đề cảnh báo có vẻ ngược .

+0

Có thể chỉnh lại này mà tôi tìm thấy là để buộc các ứng dụng để khởi động bằng tiếng Anh , (khởi chạy đối số) và sau đó để kiểm tra chuỗi tiếng anh. Hoạt động nhưng không phải là giải pháp tối ưu. – ssrobbi

Trả lời

18

Trong kiểm tra giao diện người dùng, gói chính có vẻ là ứng dụng trình chạy ngẫu nhiên. Đó là lý do tại sao tệp .strings không xuất hiện: mặc dù bạn đã thêm nó vào gói thử nghiệm của mình, NSLocalizedString đang kiểm tra gói sai. Để giải quyết vấn đề này, bạn cần một yêu cầu như sau:

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

Bạn có thể muốn đưa vào phương thức trợ giúp.

+8

Tôi đã sao chép tài nguyên gói tương ứng với Localizable.strings, nhưng tôi luôn nhận được phiên bản tiếng Anh của khóa, bất kể ngôn ngữ thiết bị có. Bất kỳ ý tưởng nào @Manuel? – Matias

3

Đây là giải pháp của tôi:

  1. Trong thử nghiệm mục tiêu UI của bạn -> Xây dựng giai đoạn -> Sao chép Bundle Tài nguyên, thêm các tập tin địa hóa cần thiết (ví dụ Localizable.strings).

  2. Thêm một chức năng tương tự như sau:

    func localizedString(key:String) -> String { 
        /*1*/ let localizationBundle = NSBundle(path: NSBundle(forClass: /*2 UITestsClass*/.self).pathForResource(deviceLanguage, ofType: "lproj")!) 
        /*3*/ let result = NSLocalizedString(key, bundle:localizationBundle!, comment: "") // 
        return result 
    } 
    
    
    /*1 Gets correct bundle for the localization file, see here: http://stackoverflow.com/questions/33086266/cant-get-access-to-string-localizations-in-ui-test-xcode-7 */ 
    /*2 Replace this with a class from your UI Tests*/ 
    /*3 Gets the localized string from the bundle */ 
    
  3. Sử dụng các chức năng như thế này: app.buttons[localizedString("localized.string.key")]

+0

Không thể tự động hóa thiết bịNgôn ngữ? Tôi không thích ý tưởng phải chỉ định ngôn ngữ của thiết bị .. Liệu lớp UITest không có bất kỳ cảm giác nào về kết nối với thiết bị mà nó đang thử nghiệm để có được bản địa hóa từ nó? – Sti

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