如何测试Android主屏幕小部件的最佳方法?很难找到任何示例代码:/
哪些框架支持这些测试?
- Espresso
- Robotium
- 其他
如何测试Android主屏幕小部件的最佳方法?很难找到任何示例代码:/
哪些框架支持这些测试?
尝试使用UIAutomator,使用android-sdk/tools/uiautomatorviewer获取小部件属性。
import android.test.InstrumentationTestCase;
import android.support.test.uiautomator.UiDevice;
import android.support.test.uiautomator.By;
public class CalculatorUiTest extends InstrumentationTestCase {
private UiDevice mDevice;
public void setUp() {
// Initialize UiDevice instance
mDevice = UiDevice.getInstance(getInstrumentation());
// Start from the home screen
mDevice.pressHome();
UiObject widgetButton = mDevice.findObject(new UiSelector()
.text("OK"))
.className("android.widget.Button"));
widgetButton.clickAndWaitForNewWindow();
}
}
这是我在项目中的做法。
添加测试依赖项。
//Testing
testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
androidTestImplementation 'androidx.test:core:1.3.0-beta01';
androidTestImplementation 'androidx.test:runner:1.3.0-beta01';
// UiAutomator Testing
androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0';
androidTestImplementation 'org.hamcrest:hamcrest-integration:1.3'
findObject
方法获取小部件的视图。一旦您拥有了 RemoteView
的视图对象,您就可以随心所欲地进行操作。import androidx.test.filters.SdkSuppress;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.uiautomator.By;
import androidx.test.uiautomator.UiDevice;
import androidx.test.uiautomator.UiObject2;
import androidx.test.uiautomator.Until;
import org.junit.Before;
import org.junit.Test;
import static org.hamcrest.core.IsNull.notNullValue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
@SdkSuppress(minSdkVersion = 18)
public class WidgetAddedTest {
private static final String APP_PACKAGE_NAME = "com.example.myweather";
private static final int LAUNCH_TIMEOUT = 5000;
private UiDevice device;
@Before
public void startMainActivityFromHomeScreen() {
// Initialize UiDevice instance
device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
// Start from the home screen
device.pressHome();
// Wait for launcher
final String launcherPackage = device.getLauncherPackageName();
assertThat(launcherPackage, notNullValue());
device.wait(Until.hasObject(By.pkg(launcherPackage).depth(0)),
LAUNCH_TIMEOUT);
}
@Test
public void widgetAddedTest() {
//Check text on Widget
UiObject2 titleTextView = device.findObject(By.res(APP_PACKAGE_NAME, "title"));
assertEquals("Weather", titleTextView.getText());
//CHeck correct value on Widget
UiObject2 temperatureTextView = device.findObject(By.res(APP_PACKAGE_NAME, "temperatureTextView"));
assertEquals("20", temperatureTextView.getText());
//Launch App From Widget Test
temperatureTextView.click();
// Wait for the app to appear
device.wait(Until.hasObject(By.pkg(APP_PACKAGE_NAME).depth(0)),
LAUNCH_TIMEOUT);
//Check if the app is launched from the widget
UiObject2 toolBar = device.findObject(By.res(APP_PACKAGE_NAME, "toolBar"));
assertEquals("My Weather", toolBar.getText());
}
}