2012-09-14 19 views
3

我寫自動化測試我的iOS應用程序,我試圖找出如何當一個視圖控制器滿載的JavaScript腳本檢測並在屏幕上...iOS UIATarget在tap()後加載UIViewController時檢測?

所以現在例如腳本水龍頭在一個按鈕上:

target.frontMostApp().mainWindow().buttons()["loginButton"].tap(); 

然後,一旦應用程序登錄(可能需要幾秒鐘或更少),我需要按另一個按鈕。

現在,我把它簡單地把一個延遲工作:

target.delay(3); 

但我想能夠檢測到下一個視圖控制器被加載,讓我知道我可以訪問的元素新的屏幕剛剛加載。

有什麼建議嗎?

回答

0

搜索熱身庫here

參考功能waitUntilVisible的一樣。您可以包含其他文件以支持其中的功能。 希望它有幫助。

+0

我不能讓JS調校功能能夠正常工作,例如:mainWindow.waitUntilFoundByName(「富」,100)永遠找不到我的控制器已經accessibilityLabel設置爲foo。有任何想法嗎? – nylund

1

在大多數情況下,只需標識特定於下一個視圖控制器的元素就足夠了。但是元素的描述必須是新UI的唯一內容。

target.frontmostApp().mainWindo().navigationBar()["My Next View"];

該腳本應延遲,直到元件可以被識別或達到超時(見pushTimeoutpopTimout)。

在某些情況下,可能需要指定該元素是可見的。

.withValueForKey(1, "isVisible")

它也可以使用waitForInvalid做反向(等待的東西在前面的UI走開)。

2

有一些方法來實現這一目標:

  1. 調最多庫

    https://github.com/alexvollmer/tuneup_js

    我真的建議檢查了這一點。他們有一些有用的包裝函數來編寫更高級的測試。編寫一些方法來擴展UIAElement類。他們有waitUntilVisible()方法。

    但是有可能元素本身是零。它不是可見性的問題,但它只是不在屏幕上。

  2. UIATargetInstance.pushTimeout(delay)UIATargetInstance.popTimeout()

    蘋果的文件說:

    要在這種情況下,提供了一定的靈活性,並讓您對時序更精細 控制,UI自動化提供了超時時間,一個 期在此期間,它將在發生故障前反覆嘗試執行指定的操作 。如果動作在 超時期限內完成,則該行代碼返回,並且您的腳本可以繼續執行 。如果該操作在超時期限內未完成,則會引發一個 異常。默認的超時時間爲5秒,但您的腳本隨時可以更改該值。

    您也可以使用UIATarget.delay(delay);函數,但這會延遲下一個語句的執行,而不是始終等待查找元素。 setTimeout(delay)也可用於在UIAutomation決定無法找到該元素之前全局設置超時。

    有蘋果指導解釋更多的理解這裏的框架。 http://developer.apple.com/library/IOS/#documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UsingtheAutomationInstrument/UsingtheAutomationInstrument.html