Selenium 2 (WebDriver) で input 項目に日本語を入力する方法ですが、そもそも前回のエントリの前提が間違っていました・・・WebElement#sendKey()で日本語送れますね・・・。
ただ、半角カナ(笑)が正しく入力できません。(たまたま事情があって半角カタカナでテストしてた。)
ちなみに、前回のエントリで無理やりな方法で実現しようとしていました。ただ、その後何度も試しているとどうにも挙動が安定しない・・・。
特に Selenium Grid(リモートノードにテストを配信してSeleniumテストを実行できる)を使って別ノードでテストを実行していると、WebDriver#get() で JavaScript スキームを送信したあと、テストが止まってしまうという現象が起きました。(HTTPステータスコードの関係かな・・・。)
前回の記事に追記した「クリップボードを経由する方法」は、よくよく調べてみると java.awt.Toolkit#getSystemClipboard() を使う方法だったので、ローカルテストであればOKでしたが、リモートでテストする Selenium Grid ではもちろんうまくいきませんでした。
・・・と困っていると、前回のエントリのコメント覧にずばり解決方法を書いて下さった方がいました。ありがとうございます。以下で解決です。(半角カナもOK。)
// input項目に日本語を入力 WebElement element = driver.findElement(By.id("foo")); JavascriptExecutor js = (JavascriptExecutor)driver; js.executeScript("arguments[0].value=arguments[1]", element, "テキスト入力");
しかしこの JavascriptExecutor#executeScript() メソッドの可能性は無限大ですね。これさえあればなんでもできそう。
ちなみに JavaDoc はここです。
と、ここまで書いたことろで、@IT の Selenium WebDriver の記事の後編(Selenium WebDriverのブラウザ自動テストを実践する)が出ていることに気が付きました。
サンプルコードで WebElement#sendKeys() の引数に日本語渡してますね。そりゃそうだ。