超簡単なサンプル(seleniumでテストを書くためにちょっと作成)
関Java2012年10月に参加してきました。
最初のセッションでブラウザテストの自動化に興味があったのと、seleniumを実際使ったことがなかったので挑戦することに、まずテスト対象の画面を作成。
NetBean7.2, JDK7を使用しています。コードはtomoTaka01/HelloSample: JaveEE6 project wit... - GitHubにあります。
とりあえず簡単に最初の画面でnameテキストボックスに名前を入力してgreetボタンをクリック
画面遷移し、入力した名前を使って挨拶の文字を画面のh1タグに表示。
- 最初の画面
- 遷移後の画面
この画面を作成するのにJavaEEを使用したかったので、寺田さんのここから始める Java EE 6 | 寺田 佳央 - Yoshio Teradaを参考にしました。
本当にとっても簡単でした。(作成する画面自体が簡単すぎるし・・・)
netBeans7.2を使って、以下の順にプロジェクトを作成
1.メニューより新規プロジェクト作成を選択し、[JavaWeb][Webアプリケーション]を選択し[次へ]
2.プロジェクト名を入力し[次へ]
3.サーバーにGlassFishを選択し[次へ]
4.JSFを使うので[JavaServerFaces]をチェックし[終了]
5.これでプロジェクトが作成、最初に[index.xhtml]ファイルが自動で作成されます。
サンプル画面では、DB接続とかしないので必要なファイルは以下の3ファイルのみ
1.Managed Bean
package mbean; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; @ManagedBean(name="HelloCtl") @SessionScoped public class HelloController { public HelloController() { } private String name; // ★1ここに最初の画面で入力したnameを保持 public String getName() { return name; } public void setName(String name) { this.name = name; } public String doGreet(){ return "GreetingPage.xhtml"; // ★2[Greet]ボタンクリック時の遷移先を指定 } public String getGreeting(){ return "Hello " + name; // ★3遷移先のh1タグに表示する文言 } }
2.JSFページ(サンプルの最初の画面:Hello)
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>Hello</title> </h:head> <h:body> <h:form id="form1"> <h:outputLabel value="name:"></h:outputLabel> <h:inputText id="name" value="#{HelloCtl.name}"></h:inputText> // ★1nameテキストボックス <h:commandButton id="greet" value="greet" action="#{HelloCtl.doGreet()}"></h:commandButton> //★2遷移先指定 </h:form> </h:body> </html>
3.JSFページ(遷移後の画面:Greeting)
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>Greeting</title> </h:head> <h:body> <h1><h:outputLabel value="#{HelloCtl.greeting}"></h:outputLabel></h1> // ★3挨拶表示 </h:body> </html>
実際WebProjectを作成するより、このブログ書く方が時間掛かっているし・・・
この画面をseleniumを使ってテストを書くのに挑戦!
初めてのselenium
関Java2012年10月で@jyukutyoさんの発表を見てseleniumに挑戦することにしました。
まずはテスト対象のweb画面を作成。
1.ここでnameテキストに「selenium」と入力して、「greet」ボタンをクリック
2.この画面でh1タグに「Hello selenium」と表示
とりあえず、これだけのことをテストコードを書いて実行する。
web画面の作成は、ここに記事(メモ)を書きました。
職場で使いたいのでEclipseを使用することに、まず必要な環境作成
Downloads - selenium - Browser automation framework - Google Project Hostingよりselenium-java.zipファイルをdownload
EclipseでJavaProjectを作成して、downloadしたjarファイルをクラスパスに追加
JUnit Test Caseのファイルを新規作成して、以下の内容を実装(@jyukutyoさんはTestNGを使用していましたが、とりあえず今回はJUnitを使用)
import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.junit.Assert; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class TestHello2 { @Test public void test() throws IOException { WebDriver driver = new FirefoxDriver(); driver.get("http://localhost:8080/HelloSample/faces/Hello.xhtml"); // ★1最初の画面起動 final int timeoutInSeconds = 5; WebDriverWait wait = new WebDriverWait(driver, timeoutInSeconds); wait.until(ExpectedConditions.titleIs("Hello")); WebElement name = driver.findElement(By.id("form1:name")); name.sendKeys("selenium"); // ★2ここでnameテキストに「selenium」と入力 WebElement greetBtn = driver.findElement(By.id("form1:greet")); greetBtn.click(); // ★3「greet」ボタンをクリック wait.until(ExpectedConditions.titleIs("Greeting")); // ★4画面遷移をtitleで確認 WebElement element = driver.findElement(By.tagName("h1")); Assert.assertEquals(element.getText(), "Hello selenium"); // ★5h1タグの内容を検証 // ★この時点の画面をスクリーンショットをとって保存 File file = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(file, new File("test.png")); driver.close(); } }
テストで作成した画面のスクリーンショット
テストも無事グリーンに
コードはmy first selenium (for HelloSample) · GitHubにあります。
次はできればこのテストをGroovy,Gebでも挑戦したい、eclipseを使って、、、
同じテストをGebで試したかったが、エラーが発生中、><、初めてGebに挑戦 - tomoTakaの日記
同じテストをGebで再度挑戦
初めてGebに挑戦2 - tomoTakaの日記
関Javaに行ってきました。
関Java2012年10月に行ってきました。
- 最初は@jyukutyoさんのブラウザテスト、スライドはデブサミ関西2012 B-3 - SSSSLIDEです。
- 次に@isspas2009さんのHTML5
- 最後に@daiksyさんのgitについて、スライドはgit gitにされたオレの屍を超えていけ - SSSSLIDEです。
いずれの内容もとっても勉強になりました。
最初のブラウザテストは、今の業務でwebの開発のテストをなんとかseleniumを使って自動化するように説得したいので、挑戦してみました。初めてのselenium - tomoTakaの日記
HTML5、gitもいつか業務で使うことができればと思います。
gitは、自宅で一人でしか使ったことがないので、チームで使う場合の問題点とかがとても解りやすく、楽しく解説されていました。
本当に皆さんとても勉強されていて、頭の下がる思いです。
次回はJavaOne2012SanFranciscoの報告もあるので今からとても楽しみにしています!
来年こそは、JavaOne行きたい!