Hi Automation Experts,
网址:http://developer.android.com/tools/help/uiautomator/UiWatcher.html
如何实现此目的: 您可以使用此方法来处理阻止测试继续进行的已知阻止问题。例如,您可以检查是否出现阻止测试的对话框,然后关闭对话框或执行一些其他适当的操作以允许测试继续
请提供一个示例代码,说“弹出时按OK”无法播放此视频“尝试播放视频并继续我们的测试”?
答案 0 :(得分:6)
Anvesh, 以下网站提供了如何使用UI Watcher http://everybodytests.blogspot.com/2012/11/uiautomator-and-watchers-adding-async.html
的完整示例仅供参考,这是我在Google上搜索uiwatcher uiautomator
答案 1 :(得分:0)
您的观察者由UiDevice
类管理实现观察者的典型逻辑流程遵循以下模式:
代码:
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 Watcher http://everybodytests.blogspot.com/2012/11/uiautomator-and-watchers-adding-async.html
的完整示例