元ネタはTim BrayのIntroducing Android WebDriverという記事。
■準備
テストプロジェクトで右クリックし「propaties> Java Build Path > Libraries > Add External JARs」で以下のjarをインポートする。
- android_webdriver_library-srcs.jar
- android_webdriver_library.jar
- guava-10.0.1.jar
■コード
Tim様の記事ではgoogle.comが使用されているが以下のような理由によってテストにパスしない。
- ロケールが違うので日本語表示される
- 結果がリッチすぎて上手くdomを抽出できない
テストコード内でgoogle.comのリンクをクリックするようにできると思うが、html構造を把握するのが大変なので以下のようなコードでmozillaのサイトでテストすることにした。
package bootcamp2011.android.test; import java.util.List; import bootcamp2011.android.Bootcamp2011Activity; import android.test.ActivityInstrumentationTestCase2; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.android.AndroidWebDriver;; public class Bootcamp2011ActivityTest extends ActivityInstrumentationTestCase2<Bootcamp2011Activity> { private AndroidWebDriver driver; public Bootcamp2011ActivityTest() { super("bootcamp2011.android.bootcamp2011activity", Bootcamp2011Activity.class); } @Override protected void setUp() throws Exception { driver = new AndroidWebDriver(getActivity()); } @Override protected void tearDown() { driver.quit(); } public void testGoogleShouldWork() { // mozillaのサイトを訪問 driver.get("https://developer.mozilla.org/ja/JavaScript"); // 検索boxを抽出して文字入力し送信 WebElement searchBox = driver.findElement(By.id("q")); searchBox.sendKeys("querySelector"); searchBox.submit(); // 検索結果にquerySelectorという文字列が含まれているかテスト(仮) WebElement resultSection = driver.findElement(By.id("search-results")); List<WebElement> searchResults = resultSection.findElements(By.tagName("table")); WebElement result = searchResults.get(0); assertTrue(result.getText().contains("querySelector")); } }
By.cssSelector()というメソッドがあるのだが上手く働かない…一応、動作するサンプルが「android-sdk-mac_x86/extras/google/webdriver/TestAnAndroidWebApp/src/simple/app/test/SimpleGoogleTest.java」にある。