読者です 読者をやめる 読者になる 読者になる

Seleniumを使ったいくつかのコードサンプル

WebのUIテストを自動化するSelenium。
スクリーンショットとかも撮れるので、ボクは、ASPサービスの単体テストの内、アンカーの飛び先とか、画面の状態で動的にレイアウトが変わる部分の確認とかで使っている。
XMLに書かれた操作内容を読んで、その内容をSeleniumを使って操作していくようにプログラム化しているので、テスト仕様書からXMLを吐き出すマクロを作成すれば、あとはお任せ!って感じ。

いくらか、知っておくと便利なjavaコードサンプルを共有してみます。

ブラウザ非依存のコード

こんな感じで書けば、ブラウザ非依存のテストコードが書ける。

import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.safari.SafariDriver;
・
・
・
WebDriver drivers[] = { new ChromeDriver(), 
                        new FirefoxDriver(), 
                        new InternetExplorerDriver(), 
                        new SafariDriver() };

操作するフレームの選択

ボクがお仕事で関わっているシステムはヘッダフレーム、メインフレーム、たまにフッタフレームという感じで、ガッツリ分かれている。
そんなシステムでも、いい感じで操作できる。
例えばこう。

//こいつで操作フレーム移動
WebDriver header = driver.switchTo().frame(
                    driver.findElement(By.tagName("フレーム名"))
                   );
// 移動先フレームの要素ゲッツ 
WebElement link = header.findElement(
                  By.id("アンカー1")
                 );
// クリック!
link.click(); 
// トップレベルのフレームに操作対象を戻す。
driver.switchTo().defaultContent();

スクリーンショット取得

こいつ大事。
こいつで一杯テストエビデンスを取って、一杯印刷して、仕舞う所が無いほどのドキュメントの山を作って、あっちこっちに嫌がらせをしましょう!

import org.apache.commons.io.FileUtils;
・
・
・

File scrFile = null;
// スクリーンショットをゲッツ
scrFile = driver.getScreenshotAs(OutputType.FILE);
if (null==scrFile) { 
  return;
}

try {
  // ファイルに保存
  FileUtils.copyFile(scrFile, new File(path));
} catch (Exception e) {
  return;
}

XPathを使ったElementの選択

システムは自分だけで作るワケではない。なので、中には超イケてないHTMLコードがあったりする。
このElementをテストしたいけど、こんなクソコードだから取得しようがナイジャナイノ!
そんなときでも、XPathを駆使すれば何とかなることもある。

// テーブルの"ここだよ"と書かれている行の一番左列内のaタグ取得 
WebElement link = header.findElement(
                  By.xpath(
                    "//tr[td[contains(test(),'ここだよ')]]/td[0]/a"
                  )
                 );

ブラウザのサイズ最大化

とにかくデカイエビデンスを取りたい。
デカければファイルサイズも大きくなり、イッパイテストしました感が出る。
これ大事。

driver.manage().window().maximize();

こちらからは以上です!

© 2009-2017 Osajiru All Rights Reserved.