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のほうが使い勝手が良いと感じる。