引き続きSeleniumとGoogle翻訳というページを使って翻訳機を作っています。Google翻訳は以下のリンクにありますので使ってみてください。
要素を指定する
操作に必要な各要素を指定する方法を決めます。
1)翻訳前の言語を選択する
下向き三角のボタンを特定します。要素を調べると以下のようなノードでした。不要な部分は適宜略しています。
<div id="gt-sl-gms"></div>
ここはidが振られているのでidで指定します。取得した要素をクリックするにはclickメソッドを呼びます。
WebElement srcTriangle = driver.findElement(By.id("gt-sl-gms")); srcTriangle.click();
つぎにこの三角のボタンを押した後出現する言語を選択するモーダルダイアログからEnglishを選択します。このEnglishのラベルは以下のようになっていました。xpathによる指定をします。
<div class="goog-menuitem-content" style="-webkit-user-select: none;">English</div>
以下のように選択すれば良いように思いますが問題はEnglishというテキストのタグは画面上に他にもあることです。
//div[text()=’English’]
実は翻訳後の言語選択のダイアログも同じような作りになっているので被らないようにしなければなりません。明らかに違うと明示されているタグまで上の層に上がっていくと以下のようなノードがありました。
<div id="gt-sl-gms-menu"></div>
ちなみに翻訳後はidがgt-tl-gms-menuとslとtlの部分がちがうものになっていました。おそらくsはsourceでtはtargetの略でしょう。ということで以下のような指定で選択します。
//div[@id=’gt-sl-gms-menu’]//div[text()=’English’]
これは「idがgt-sl-gms-menuのdivタグの下にあるテキストがEnglishであるdivタグ」という意味です。今回もクリックをします。
WebElement srcLang = driver.findElement(By.xpath("//div[@id='gt-sl-gms-menu']//div[text()='English']")); srcLang.click();
2) 翻訳前のテキストエリアにテキストを入力する
まずテキストエリアは見たところidが振られていました。
<textarea id="source" name="text"></textarea>
要素を指定しテキストを入力します
String text = "All day work and no play makes Jack a dull boy."; WebElement srcTextArea = driver.findElement(By.id("source")); srcTextArea.sendKeys(text);
3) 翻訳後の言語を選択する
翻訳後の言語選択は翻訳前とほぼ同じです。下向き三角ボタンは以下のようになっています。
<div id="gt-tl-gms"></div>
また翻訳後の言語選択するダイアログは以下のノードになります。
<div id="gt-tl-gms-menu"></div>
実装もほぼ同じです。まずは下三角をクリックします。
WebElement trgTriangle = driver.findElement(By.id("gt-tl-gms")); trgTriangle.click();
次にJapaneseを選択します。
WebElement trgLang = driver.findElement(By.xpath("//div[@id='gt-tl-gms-menu']//div[text()='Japanese']")); trgLang.click();
4) Translateとかいてボタンをクリック
こちらもidがあったのでid指定で要素を取得しクリックします。
WebElement submit = driver.findElement(By.id("gt-submit")); submit.click();
5) テキストを取得する
最後に結果を取得します。取得するにはgetTextメソッドを使います。
WebElement result = driver.findElement(By.id("result_box")); String translate = result.getText();
おおよそ実装の目どころはたちました。次回実際に動かしたいと思います。