2013-04-22 49 views
1

嗨自動化專家,需要UI看守示例代碼

網址:http://developer.android.com/tools/help/uiautomator/UiWatcher.html

如何實現這一點:您可以使用此方法來處理的,阻止該測試從程序稱爲阻塞問題。例如,您可以檢查是否出現阻止測試的對話框,然後關閉對話框或執行一些其他適當的操作以允許測試繼續進行。

請您需要示例代碼來說「在流行音樂上按OK 「試圖播放視頻並繼續我們的測試時,無法播放此視頻」?

回答

0

你的觀察是由UiDevice管理類用於實現觀察者的典型邏輯流遵循以下模式:

  1. 定義新的觀察者
  2. 註冊您的守望者
  3. 運行你的守望者

代碼:

package com.watcherDemoTests; 

import android.util.Log; 

import com.android.uiautomator.core.UiCollection; 
import com.android.uiautomator.core.UiDevice; 
import com.android.uiautomator.core.UiObject; 
import com.android.uiautomator.core.UiObjectNotFoundException; 
import com.android.uiautomator.core.UiScrollable; 
import com.android.uiautomator.core.UiSelector; 
import com.android.uiautomator.core.UiWatcher; 
import com.android.uiautomator.testrunner.UiAutomatorTestCase; 

public class WatcherDemoTestExample1 extends UiAutomatorTestCase { 

private static final String LOG_TAG = "WatcherDemoEx1"; 
private static final String MYOKCANCELDIALOGWATCHER_STRING = "OkCancelDialogWatcher"; 

public void testWatcherDemoTestExample1() throws UiObjectNotFoundException { 
Log.w(LOG_TAG, "Starting our test!"); 

// Simulate a short press on the HOME button based on the sample test case: 
// 
// http://developer.android.com/tools/testing/testing_ui.html#sample 
// 
getUiDevice().pressHome(); 
// We're now on the home screen. Launch the All Apps screen. 
UiObject allAppsButton = new UiObject(new UiSelector().description("Apps")); 
// Simulate a click to bring up the All Apps screen. 
allAppsButton.clickAndWaitForNewWindow(); 
// In the All Apps screen, the Snow Report app should be in the Apps tab 
// assuming it is installed prior to starting this test 
UiObject appsTab = new UiObject(new UiSelector().text("Apps")); 
// Simulate a click to enter the Apps tab. 
appsTab.click(); 
// Next, in the apps tabs, we can simulate a user swiping until they 
// come across the Snow Report app icon. Again, swiped from the 
// sample test case. 
UiScrollable appViews = new UiScrollable(new UiSelector().scrollable(true)); 
// Set the swiping mode to horizontal (the default is vertical) 
// This is only compatible with API lvl 17. Short of that it will crash 
// with a "method not found" failure. 
appViews.setAsHorizontalList(); 
// Create a UiSelector to find the Snow Report app and simulate 
// a user click to launch the app. 
UiObject apiDemoApp = appViews.getChildByText(new UiSelector().className(android.widget.TextView.class.getName()), "API Demos"); 
apiDemoApp.clickAndWaitForNewWindow(); 
///////////////////////////////////////////////////////////////////// 
// This concludes the section devoted to simply launching the app. // 
///////////////////////////////////////////////////////////////////// 

// Define watcher 
UiWatcher okCancelDialogWatcher = new UiWatcher() { 
@Override 
public boolean checkForCondition() { 
UiObject okCancelDialog = new UiObject(new UiSelector().textStartsWith("Lorem ipsum")); 
if(okCancelDialog.exists()){ 
Log.w(LOG_TAG, "Found the example OK/Cancel dialog"); 
UiObject okButton = new UiObject(new UiSelector().className("android.widget.Button").text("OK")); 
try { 
okButton.click(); 
} catch (UiObjectNotFoundException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
return (okCancelDialog.waitUntilGone(25000)); 
} 
return false; 
} 
}; 
// Register watcher 
UiDevice.getInstance().registerWatcher(MYOKCANCELDIALOGWATCHER_STRING, okCancelDialogWatcher); 

// Run watcher 
UiDevice.getInstance().runWatchers(); 

/* 
* This test demonstrates UiAutomator Watchers using the Emulator's 
* API Demos App/Alert Dialogs 
* 
* With this, the watcher will be set in advance to identify when 
* an alert dialog is present and cancel it. The test will click 
* on at least one item in the list. 
*/ 
// Get Api Demos list 
UiCollection apiDemoList = new UiCollection(new UiSelector().className("android.widget.ListView")); 
// Click on App 
UiObject appTextView = apiDemoList.getChildByText(new UiSelector() 
.className(android.widget.TextView.class.getName()), 
"App"); 
appTextView.clickAndWaitForNewWindow(); 
// Get App demo list 
UiCollection appDemoList = new UiCollection(new UiSelector().className("android.widget.ListView")); 
// Click on Alert Dialogs 
UiObject alertDialogTextView = appDemoList.getChildByText(new UiSelector() 
.className(android.widget.TextView.class.getName()), "Alert Dialogs"); 
alertDialogTextView.clickAndWaitForNewWindow(); 

// Click on button with text "OK Cancel dialog with a message" 
UiObject okCancelDialogButton1 = new UiObject(new UiSelector().text("OK Cancel dialog with a message")); 
okCancelDialogButton1.click(); 
// Click on button with text "OK Cancel dialog with a long message" 
// This is where the watcher should save our bacon. Yes, this is a poorly written test case, I know. 
// Just go with me here, I'm making a point about Watchers. If the dialog from the previous button 
// press is still in place, this new selector will fail to find an object containing that text. 
// Because the watcher is there, the dialog gets closed and we're all good. 
UiObject okCancelDialogButton2 = new UiObject(new UiSelector().text("OK Cancel dialog with a long message")); 
okCancelDialogButton2.click(); 
} 

} 

下面的網站有如何使用UI看守http://everybodytests.blogspot.com/2012/11/uiautomator-and-watchers-adding-async.html

6

Anvesh, 下面的網站有如何使用UI看守http://everybodytests.blogspot.com/2012/11/uiautomator-and-watchers-adding-async.html

FYI一個完整的例子是第一個結果,當我搜索在谷歌uiwatcher uiautomator

+1

非常感謝JulianHarty一個完整的例子..不當然,我錯過了那個.. :( – 2013-04-24 16:28:55

+2

高興地幫助。如果它幫助你,你能接受答案嗎?這有助於其他人認識到答案可能會對他們有所幫助。 – JulianHarty 2013-04-25 07:41:56

+0

爲了避免鏈接唯一的答案,重新發布您的答案! – 2014-11-28 16:20:41