好きなことを好きなぶんだけ

podcast もやっています http://lean-agile.fm/

Selenium 2 (WebDriver) でinput項目に日本語を入力する

<後日追記>
解決しました。
Selenium 2 (WebDriver) でinput項目に半角カナを入力する

以下元記事
--------
テスト自動化を本気でやらねばと思って、Selenium 2 (Selenium WebDriver) の検証をはじめてみました。

@ITの記事(iPhone/Android含むブラウザ自動テストの最終兵器Selenium WebDriverとは)を参考にインストールして、「ブラウザ勝手に起動したすげー」「画面勝手に操作してくれるすげー!」「スクリーンショット自動でとれるすげー!!」って無邪気に感動していたのですが、一瞬で壁にぶち当たりました。


テスト対象Webページのinput項目(テキストボックス)にどうやって日本語入力すればいいの??


WebDriver.sendKeys() はメソッド名のとおり、キーシーケンスを送るだけなので日本語は送れません。
つまりこれ↓はダメ。

driver.findElement(By.id("foo")).sendKey("テキスト入力");



ググってみてもなぜか同じ悩みを持つ人が見つからなかったので、ええい、ということで「Webdriver.get() メソッドjavascriptスキームを渡して、JavaScriptを無理やり送る(いわゆるブックマークレット)」という無茶な方法を思い立って、試してみました。
つまりこう。

driver.get("javascript:(function(){document.getElementById('foo').value='テキスト入力'})();");
// jQueryが入ってるページならこれ↓でも。
driver.get("javascript:(function(){$('#foo').val('テキスト入力')})();");



思いの外ちゃんといける。

こんな感じで↓メソッド化して、、、

protected void inputTextById(WebDriver driver, String id, String inputText) {
    driver.get("javascript:(function(){$('input[type=text]#" + selector + "').val('"+ inputText + "')})();");
}


よしおk!
ってほんとにいいのかな??この方法、これはこれで色々応用できそうなのでいいですが、日本語入力については、もっとちゃんとしたやり方があるような気が・・・。うーむ。


<30分後追記>
と思って改めて調べてたら、クリップボードを経由する方法があるみたい。明日試してみよう。