2013-02-13 58 views
6

我只想用UI自動化測試我的iOS UI,但是在將文本輸入到UITextField時遇到困難。該文件說,方法「setValue(...)」應該做的伎倆,但它不。iOS儀器自動化「setValue」無法正常工作

我總是得到這樣的錯誤:

Script threw an uncaught JavaScript error: Unexpected error in -[UIATextField_0x9952690 setValue:], /SourceCache/UIAutomation_Sim/UIAutomation-271/Framework/UIAElement.m line 1142, kAXErrorSuccess on line 15 of login.js, #0 setValue() 

的代碼看起來是這樣的:

var textfields = UIATarget.localTarget().frontMostApp().mainWindow().textFields(); 
username = textfields["username"]; 
username.setValue("test"); 

用戶名字段不爲空或未定義。

我的第二個解決方案是這樣的JS項目: https://github.com/alexvollmer/tuneup_js#readme 它有一個文本字段「typeString」方法,但它是一個有點馬車,當它涉及到輸入數字和大寫字母失敗。

我正在使用iOS6.1, 工具4.6(46000), Xcode版本4.6(4H127)。

任何幫助表示讚賞!

+0

嗯。我可以使用UI Automation在我的應用程序中設置文本字段的值。你的自動化代碼看起來正確我懷疑Objective C世界裏有什麼錯誤。你在使用'UITextField'的自定義子類嗎?你可以用一個文本字段構建一個虛擬應用程序,並嘗試在你的機器上設置該字段的值嗎?這可能有助於追蹤問題。 – 2013-02-14 02:05:16

+1

在其他項目中,「setValue()」函數有效。我認爲問題是由未完成的動畫造成的。當用戶點擊文本字段時,底層視圖會滾動到頂部,以便在鍵盤顯示時可見。 「target.delay(1)」做我正在尋找,現在「setValue()」函數工作。 – ralphbert 2013-02-18 08:05:42

回答

10

檢查下面是否適合您,

target.delay(1); ()。「」用戶名「]。」tap();「 target.delay(1); ()。「」用戶名「]。setValue(」test「);方法名稱說明UIATarget.localTarget()。frontMostApp()。mainWindow()。textFields()

檢查正確的層次結構,如果它不爲你工作..

+0

看來,「target.delay(1)」做了詭計。你的代碼適合我,謝謝! – ralphbert 2013-02-18 08:02:45

0

我來到這裏努力理解如何編寫腳本UI自動化的作品,如文檔和示例代碼在那裏真是個缺乏(或從一個非常寫具體的觀點並不能解釋所有情況)。

這裏是我學到的主題兩件事情:

  1. 首先,你必須元素上啓用輔助功能。我已經在我的試用中禁用了它,並且在重新啓用它之前,事情表現得非常奇怪(獲得與您類似的「意外錯誤」)。所以請確保您打開了輔助功能。但請注意,一些事情仍然適用於它禁用。例如,您仍然可以通過名稱(accessibilityIdentifier)查找元素,但是您將無法點擊它或致電setValue()

enter image description here

  • 你必須通過你的應用程序層次去挖掘。我的假設是給一個元素accessibilityIdentifier將允許我簡單地查找具有該標識符的元素,如HTML的getElementById。但它是這樣的而不是。即使使用accessibilityIdentifier,您也必須逐層挖掘層次結構。幸運的是,您可以使用UIAElement.logElementTree()獲取有關使用正確層次的一些線索。
  • 到目前爲止,我對這個框架一點都不印象,但我一直如此緩慢地取得進展。