2011-03-23 37 views
2

我使用儀器的iOS自動化,我似乎無法弄清楚如何點擊複製/粘貼菜單上的選項。當我做logElementTree()時,我看到我們正在返回一個UIEditingMenu,然後返回三個元素(對應於該菜單的選項,例如複製/粘貼等)。我試圖把它放到一個變量中,然後試圖「點擊」那個變量,但我無法讓它工作。這裏是我的代碼示例:UIAutomation with Instruments - 如何點擊複製/粘貼按鈕?

var target = UIATarget.localTarget(); 

var app = target.frontMostApp(); 

var window = app.mainWindow(); 

//This generates the highlighted text 

app.dragInsideWithOptions({startOffset:{x:0.45, y:0.6}, endOffset:{x:0.45, y:0.6}, duration:1.5}); 

var copy = app.editingMenu.elements.withName("copyButton"); 

copy.tap(); 

Instruments returns, "0) UIAElementNil". In addition to the above, I've also tried: 

app.elements.withName("copyButton") 

window.elements.withName("copyButton") 

所以,我可以得到editingMenu產生可用的選項,但我不能想出一個辦法來挖掘或選擇其中一個選項。我不太確定我知道如何引用這些選項。

有沒有人有任何想法?

謝謝!

回答

0

嘿。
首先,我總是使用.elements()而不是.elements ...但它是JS,所以它可能是調用分配給對象屬性的函數..?
無論如何,也許這個編輯菜單不是應用程序的內部窗口,但它是系統級菜單,調用時,當你做拖動?如果這是真的,試一下:

UIATarget.localTarget().frontMostApp().elements().withName("copyButton").tap(); 

但正如我在apple reference看到你的版本叫app.editingMenu()應該罰款...
也許試圖通過立場,要求按鈕,你會看到哪些迴應:

UIATarget.localTarget().frontMostApp().editingMenu().elements()[0].tap; 
UIATarget.localTarget().frontMostApp().editingMenu().elements()[1].tap; 
UIATarget.localTarget().frontMostApp().editingMenu().elements()[2].tap; 

你應該這樣找到正確的位置。當你有它的位置時,你可以通過button.logElement();來檢查它的屬性。有了這個inf,你應該可以切換回.withName方法,而不是硬編碼的位置。

+0

嗨Yoosiba,我非常感謝你採取的迴應時間。不幸的是,儘管有您的建議,但仍然無法實現。回到繪圖板我去。 – SDQA 2011-03-25 20:50:07

1

您應該嘗試app.editingMenu().elements()[index].tap()其中index是要從返回的元素數組中點擊的選項索引。我得到了我的一個這樣工作。

0

我這樣做與yoosiba類似,但帶有editingMenu元素名稱。 使用Xcode 4.5.1和運行iOS 6的設備。

將Alex Vollmer的優秀tuneup_js用於target,app和vtap()。 否則,您可以使用UIATarget.localTarget()。frontMostApp()和tap()。

注意:vtap()會延遲並重試點擊。沒有這個,你可能需要添加你自己的延遲。

// tap in textFieldA to see editingMenu. 
app.mainWindow().textFields()["textFieldA"].vtap(); 
app.editingMenu().elements()["Select All"].vtap(); 
app.editingMenu().elements()["Copy"].vtap(); 
// must delay before attempting next tap 
target.delay(2); 

// ... navigate to different section of the app 

// tap in textFieldB to see editingMenu. 
app.mainWindow().textFields()["textFieldB"].vtap(); 
// paste clipboard contents copied from textFieldA into textFieldB 
app.editingMenu().elements()["Paste"].vtap(); 
target.delay(2);