2012-05-11 58 views
4

我正在嘗試使用UI自動化鍵盤輸入自動化。target.frontMostApp()。鍵盤()未能找到鍵「N」

target.frontMostApp().keyboard().typeString("INTERCOM") 

但經過第一個「我」鍵入

target.frontMostApp().keyboard() failed to locate key 'N' 
Script threw an uncaught JavaScript error: target.frontMostApp().keyboard() failed to locate key 'N' 

我會得到這個錯誤我有一個本地化的瑞典語鍵盤。

任何人都知道這是一個錯誤還是我錯過了什麼?

+0

您可能只是將鍵盤佈局設置爲帶有非拉丁字母的「異國情調」語言。儘管我遇到了與空間欄相同的問題。哪個更奇怪 – Bgi

回答

-1

我也遇到了這個問題,我相信這是一個輸入太快的字符串。

看起來,鑰匙的名稱會根據換檔按鈕的狀態而改變。如果啓用換檔,那麼該鑰匙被稱爲'N',如果沒有啓用換檔,那麼它是'n'。您會注意輸入字符串,在輸入大寫字母之前輕敲shift按鈕。在按下'Shift'按鈕之前,您的測試試圖按'N'鍵。它不會影響第一個字母您的句子,因爲鍵盤已啓用第一個字母的轉換。

這也會影響在大寫字符後鍵入小寫字符:在轉換按鈕處於未按下狀態時,可以鍵入小寫字符。

我使用一種解決方法,用單獨的typeString()方法鍵入字符串的每個字母。

for (i = 0; i < title.length; i++) 
{ 
    var strChar = title.charAt(i); 
    target.frontMostApp().keyboard().typeString(strChar); 
} 

這樣做的缺點是輸入完整字符串需要很長的時間。

您可能還想看看下面的鏈接,它提供了類似的解決方案,但是使用app.keyboard()。keys()。tap()方法爲字符串的每個字符,而不是typeString()方法。 http://jojitsoriano.wordpress.com/2011/06/27/ios-ui-automation-typing-a-string-in-a-uiatextfield/

1
try{ 
    target.delay(1); 
    target.frontMostApp().mainWindow().textFields()[0].tap(); 
    target.delay(1); 
    target.frontMostApp().mainWindow().textFields()[0].setValue("INTERCOM"); 
} 
catch(err){ 
    target.delay(1); 
    target.frontMostApp().mainWindow().scrollViews()[0].textFields()[0].tap(); 
    target.delay(1); 
    target.frontMostApp().mainWindow().scrollViews()[0].textFields()[0].setValue("INTERCOM"); 
} 
+0

不幸的是,這個解決方案不會導致調用文本輸入/ editingDidChange的委託方法。這就是人們爲什麼選擇「打字」解決方案的原因。 – Prometheus

2

這可能幫助:

var vKeyboard = target.frontMostApp().keyboard(); 
vKeyboard.setInterKeyDelay(0.1); 
vKeyboard.typeString("INTERCOM"); 

默認情況下此延遲設置用0.03秒。這不足以讓您的應用程序更新鍵盤上的按鍵。在爲typeString鍵盤方法確定鍵之間增加此超時將幫助您。 UIAKeyboard參考頁上沒有關於setInterKeyDelay的描述,但此方法可用於UIAKeyboard。 另外我不確定其他語言。我不知道typeString是否允許在其他語言上鍵入,但這100%適用於iOS 5.x的英文鍵盤。

+0

好的,我將在下次使用UI自動測試時嘗試此操作。 – bollhav

+0

我試過了。實際上按鍵速度較慢,但​​錯誤仍然存​​在。 – lucianoenrico