AndroidのUIテストを書くときのViewの指定の仕方

Native Driver/Robotiumともサンプルを触っただけだっので気付かなかったけど、その後使っていたら両方ともid/ラベルを指定が可能だった。

Native Driverでラベルを指定する場合

driver.startActivity("orz.yanagin.android.CalcActivity");

// 初期化
WebElement textView = driver.findElementByText("0");
assertNotNull(textView.getText());

// 1 + 3 = 4 になることを検証
driver.findElementByText("1").click();
textView = driver.findElementByText("1");
assertNotNull(textView.getText());

driver.findElementByText("+").click();
textView = driver.findElementByText("1");
assertNotNull(textView.getText());

driver.findElementByText("3").click();
textView = driver.findElementByText("3");
assertNotNull(textView.getText());

driver.findElementByText("=").click();
textView = driver.findElementByText("4");
assertNotNull(textView.getText());

// クリアボタンの検証
driver.findElementByText("C").click();
textView = driver.findElementByText("0");
assertNotNull(textView.getText());

Robotiumでidで指定する場合

// 初期化
assertTrue(solo.searchText("0"));

// 1 + 3 = 4 になることを検証
final Button button1 = Button.class.cast(solo.getView(R.id.button1));
getActivity().runOnUiThread(new Runnable() {
	@Override
	public void run() {
		button1.performClick();
	}
});
getInstrumentation().waitForIdleSync();
assertEquals("1", TextView.class.cast(solo.getView(R.id.textView1)).getText());

final Button buttonPlus = Button.class.cast(solo.getView(R.id.button_plus));
getActivity().runOnUiThread(new Runnable() {
	@Override
	public void run() {
		buttonPlus.performClick();
	}
});
getInstrumentation().waitForIdleSync();
assertEquals("1", TextView.class.cast(solo.getView(R.id.textView1)).getText());

final Button button3 = Button.class.cast(solo.getView(R.id.button3));
getActivity().runOnUiThread(new Runnable() {
	@Override
	public void run() {
		button3.performClick();
	}
});
getInstrumentation().waitForIdleSync();
assertEquals("3", TextView.class.cast(solo.getView(R.id.textView1)).getText());

final Button buttonResult = Button.class.cast(solo.getView(R.id.button_result));
getActivity().runOnUiThread(new Runnable() {
	@Override
	public void run() {
		buttonResult.performClick();
	}
});
getInstrumentation().waitForIdleSync();
assertEquals("4", TextView.class.cast(solo.getView(R.id.textView1)).getText());

// クリアボタンの検証
final Button buttonClear = Button.class.cast(solo.getView(R.id.button_clear));
getActivity().runOnUiThread(new Runnable() {
	@Override
	public void run() {
		buttonClear.performClick();
	}
});
getInstrumentation().waitForIdleSync();
assertEquals("0", TextView.class.cast(solo.getView(R.id.textView1)).getText());

正直、ラベルを指定して試験するシーンを思いつかない。
idを指定する場合の記述が、Native Driverだとかなりすっきりしているというのが改めて実感した。
テストの起動が高速だったり素のJUnitをベースにしていたりと、Native Driverのほうが使い勝手が良いと感じる。