我試圖訪問UIAStaticText
(客觀C代碼中的UILabel
)JavaScript對象的value()
。我可以使用setValue()
設置該值,我可以確認模擬器更新文本,但是當我嘗試獲取值時,我只能得到null
。無法獲取UIAStaticText的值?
即
text.setValue("new text");
更新標籤在模擬器 「新文本」。
text.value()
仍然返回null
我設置了該值後。
我在這裏做錯了什麼?
我試圖訪問UIAStaticText
(客觀C代碼中的UILabel
)JavaScript對象的value()
。我可以使用setValue()
設置該值,我可以確認模擬器更新文本,但是當我嘗試獲取值時,我只能得到null
。無法獲取UIAStaticText的值?
即
text.setValue("new text");
更新標籤在模擬器 「新文本」。
text.value()
仍然返回null
我設置了該值後。
我在這裏做錯了什麼?
貌似問題的根源是在UILabel
accessibilityValue
的財產返還accessibilityLabel
,而不是UILabel
文本,因爲它應該。爲解決此問題,我在我的自定義UILabel
類別中覆蓋了accessibilityValue
屬性。
@interface UILabel (MyAccessibility)
@property(nonatomic, copy) NSString *accessibilityValue;
@end
@implementation UILabel (MyAccessibility)
@dynamic accessibilityValue;
-(NSString *)accessibilityValue {
// Here we force UIKit to return Label value, not the accessibility label
return self.text;
}
@end
除了這個小把戲,我總是儘量喜歡的無障礙標識了無障礙標籤準備我的自動化測試UI元素。請查看Instruments New Features User Guide的「輔助功能標籤和標識符屬性」部分。
太棒了。如果有人想知道我在想什麼,事實證明沒有必要在任何地方導入類別標題;只需在你的應用中編譯它就行了。 –
經過多年小時搜索和嘗試新事物,我發現這對O'Reilly Answers確認存在這樣的情況你不能使用蘋果的UIAutomation框架靜態文本標籤值的錯誤。這裏是報價:
UILabel的文本標籤字符串顯示爲StaticText字段的名稱,而不是它的值,它始終爲零。如果您設置了輔助功能標籤,它將成爲名稱屬性,並且不再有任何方法可以發現UILabel中的當前文本。我有一個關於此問題的Apple報告。
感謝,所以這是我設置的無障礙標籤,該標籤borks這對我來說?我正在考慮將此報告爲一個錯誤,但是由於登錄到Apples開發人員門戶而出現的一些問題使我忘記了這一點。 – MdaG
我認爲自動化腳本檢查UILabel值目前基本沒有用處。我使用了O'Reilly提供的工作 - 將我的UILabels轉換爲不可編輯的UITextFields。權衡是,你失去了簡單的格式,如陰影的東西,但其他工作就像一個魅力。 –
你應該更喜歡Viktor的答案更清潔。您不應該修改您的應用程序以便與您的測試兼容。 –
實際上,沒有必要創建Viktor Krykun指定的類別。設置accessibilityIdentifier足夠 - 蘋果的文件說(的iOS 6.1.3):
輔助標籤和標識屬性
標識符屬性允許您爲 元素使用更具描述性的名稱。它是可選的,但它必須被設置爲腳本來執行 這兩種操作:
- 通過名字來訪問一個容器視圖,同時還能夠訪問其 孩子。
- 按名稱訪問UILabel視圖以獲取其顯示的 文本(通過其值屬性)。
它也可能有必要明確設置
uilabel.accessibilityLabel = NSLocalizedString(@"Element description", @"Localized accessibility label for VoiceOver");
uilabel.accessibilityValue = uilabel.text;
在我自己的代碼中,我有一個情況下它只是工作,而另一個在那裏我有明確設置的值。我最好的猜測是,可能是因爲我在一個案例中輸入並刪除了Interface Builder中的輔助功能標籤 - 最終可能是零字符串和空字符串之間的區別。 Apple的代碼在這裏顯然很脆弱(SDK 6.1.3,在iOS 5.0模擬器上測試)。
回覆ChrisH(因爲我沒有看到他是如何回覆的):您可以將相同的技巧應用於UITableViewCell和UILabel,然後針對單元格內的標籤文本與值()而不是其中的靜態文本。雖然真的感覺就像在黑客之上堆積更多黑客一樣。但我沒有看到任何其他方式。
編輯:爲完整起見,添加了包括現有解決方案的完整實施。
@interface UILabel (MyAccessibility)
@property(nonatomic, copy) NSString *accessibilityValue;
@end
@implementation UILabel (MyAccessibility)
@dynamic accessibilityValue;
-(NSString *)accessibilityValue {
// Here we force UIKit to return Label value, not the accessibility label
return self.text;
}
@end
@interface UITableViewCell (AccessibilityFix)
@property(nonatomic, copy) NSString *accessibilityValue;
@end
@implementation UITableViewCell (AccessibilityFix)
@dynamic accessibilityValue;
-(NSString *)accessibilityValue {
// Here we force UIKit to return Label value, not the accessibility label
return self.textLabel.text;
}
@end
謝謝你,我正要開始敲我的頭靠在筆記本 –