検索
リンク
タグ
SQL Server
AJAX
WebMatrix
AngularJS
Selenium
ASP.NET MVC
Azure
ASP.NET
jQuery
ライトニングトーク
JavaScript
.NET
Visual Studio
Plone
F#
ADO.NET Entity Framework
LINQ
ASP.NET Core
Fizz-Buzz
C#
カテゴリ
最新の記事
最新のコメント
記事ランキング
最新のトラックバック
以前の記事
2019年 11月 2019年 10月 2019年 09月 2019年 08月 2019年 07月 2019年 06月 2019年 05月 2019年 04月 2019年 03月 2019年 02月 2019年 01月 2018年 12月 2018年 11月 2018年 10月 2018年 09月 2018年 08月 2018年 07月 2018年 06月 2018年 05月 2018年 04月 2018年 03月 2018年 02月 2018年 01月 2017年 12月 2017年 11月 2017年 10月 2017年 09月 2017年 08月 2017年 07月 2017年 06月 2017年 05月 2017年 04月 2017年 02月 2017年 01月 2016年 12月 2016年 11月 2016年 10月 2016年 09月 2016年 08月 2016年 07月 2016年 06月 2016年 05月 2016年 04月 2016年 03月 2016年 02月 2016年 01月 2015年 12月 2015年 11月 2015年 10月 2015年 09月 2015年 08月 2015年 07月 2015年 05月 2015年 04月 2015年 03月 2015年 02月 2015年 01月 2014年 12月 2014年 11月 2014年 10月 2014年 09月 2014年 08月 2014年 06月 2014年 04月 2014年 03月 2014年 02月 2014年 01月 2013年 12月 2013年 10月 2013年 09月 2013年 08月 2013年 07月 2013年 06月 2013年 05月 2013年 04月 2013年 03月 2013年 02月 2013年 01月 2012年 12月 2012年 11月 2012年 10月 2012年 09月 2012年 08月 2012年 07月 2012年 06月 2012年 05月 2012年 04月 2012年 03月 2012年 02月 2012年 01月 2011年 12月 2011年 11月 2011年 10月 2011年 09月 2011年 08月 2011年 07月 2011年 06月 2011年 05月 2011年 04月 2011年 03月 2011年 02月 2011年 01月 2010年 12月 2010年 11月 2010年 10月 2010年 09月 2010年 08月 2010年 07月 2010年 06月 2010年 05月 2010年 04月 2010年 03月 2010年 02月 2010年 01月 2009年 12月 2009年 10月 2009年 09月 2009年 07月 2009年 06月 2009年 05月 2009年 04月 2009年 03月 2009年 02月 2009年 01月 2008年 12月 2008年 11月 2008年 10月 2008年 09月 2008年 08月 2008年 07月 2008年 06月 2008年 05月 2008年 04月 2008年 03月 2008年 02月 2008年 01月 2007年 12月 2007年 11月 2007年 04月 2007年 03月 2007年 02月 2007年 01月 2006年 11月 2006年 10月 2006年 09月 2006年 08月 2006年 07月 ファン
ブログジャンル
画像一覧
|
2013年 12月 24日
※本稿は Selenium Advent Calendar 2013 の投稿記事です。
起 - SeleniumSelenium は言わずと知れた(?)、Webアプリケーションに対する自動化テストを実現するための様々なソフトウェア群。とくにここでは、各種OS・各種プログラミング言語からWebブラウザを "自動操縦" する、一般に Selenium WebDriver と呼ばれる機能に焦点を当てた話題をとりあげる。 さてその Selenium。 自分の実際の業務においては、C# で記述した品質検査用プログラムが Web ブラウザを自動操縦するところで活用している。 承 - SpecFlowしかしながら、品質検査用プログラム、すなわちテストコード、テストスクリプトは、生の C# コードでゴリゴリ書いてはいない。C# でまずまずのボリュームの "部品" をそろえておく必要はあるのだが、それら "部品" を礎に、Gherkin 構文と呼ばれる文法によるテストシナリオ記述実装・技法を用いているのだ。 .NET Framework 環境では、このような仕組みを実現するために、「SpecFlow」というオープンソース製品を用いて品質検査用プログラムをビルドする。 具体的には、Gherkin 構文に則ったスクリプトを、下記サンプルのように、拡張子 .feature のテキストファイルとして保存しておく。 https://github.com/sample-by-jsakamoto/How-to-test-webapp-with-BJD/blob/master/BehaviorTest/SpecFlowFeature1.feature 尚、.feature ファイルに書く "手順" は日本語で記述するように実装することもできる。 下記のような具合。 Scenario: 参加者の登録その上で「SpecFlow」でこの .feature ファイルを "コンパイル" すると、MSTest や NUnit などをはじめとしたお好みのテストフレームワーク用の C# ソースコードに変換されて出力されるのだ。 x.feature -- SpecFlow --> x.feature.csVisual Studio の有償エディションである Professional 以上であれば、SpecFlow 用の Visual Studio アドインが使えるので、.feature ファイルを上書き保存するたびに、バックグランドで自動で C# ソースコードへの変換が行なわれる。 この Visual Studio 用 SpecFlow アドインは、さらに .feature ファイル編集時のインテリセンス機能も提供するため、仕事でバリバリ .feature ファイルを記述するなら、有償エディションの Visual Studio を購入しても十二分に元が取れるくらいだと思う。 ※無償で利用可能な Visual Studio は、アドインをインストールできないという無償ならではの制限がある...。 承 - セレクタ指定さて、そのように、Gherkin 構文による .feature ファイルにて、「あの要素をクリックせよ」 「この要素に 15 と入力せよ」 「あの要素には FizzBuzz と表示されているか点検せよ」 といった "命令" を並べていく。 ということで、当然、「あの要素」「この要素」を指定するための "セレクタ" 構文を .feature ファイルに記述せざるをえなくなる。 しかし、Selenium Driver の API を直接たたいているわけではなく、先に書いたように、.feature ファイルに書かれた1行1行は、C# でかかれたメソッドに対応づけられ、その C# メソッドの呼び出しとして実行される。 すなわち、 .feature ファイルに記述された処理 ↓ 自作の C# コード ↓ Selenium WebDriver API という構造になっている。 このため、 独自のセレクタ構文を編み出して、.feature ファイルにてその独自セレクタ構文を記述 するようにできるのだ。 これを活かして、以下のような .feature 構文を書けるようにしてある。 When 要素 #id をクリック When 要素 .cssClassName をクリックご推察いただけると思うが前者は要素の id 属性値をもとに要素を特定する ID セレクタ、後者は CSS クラス名をもとに要素を特定するクラスセレクタとしての構文だ。 前者は最終的に FindElemet(By.Id(x)) に、後者は FindElement(By.ClassName(x)) にたどり着くように、中間の自作 C# コードをあつらえてある。 だがしかし、である。 IDセレクタやクラスセレクタだけでは、正直、.feature ファイルを量産しにくい。 とくにシステムテスト、結合テストとして、上記で紹介したような自動化テストを実践する場合は、基本的にテスト対象の Web アプリはブラックボックスなのが大抵である。 「あのボタンをクリックする処理を .feature ファイルに書きたい」となると、 いちいちブラウザの開発者ツールを開いて、DOMインスペクタで目的のボタンの ID 値を調べなくてはならない。 おまけに、せっかく .feature ファイルは日本語で記述でき、流し読みできるようになっているのに、いきなり ID 値や CSS クラス名がでてくるわけで、いったい何をクリックしたかったのか、一見してわかりにくいという面もある。 キャプションセレクタを発明そこで。「キャプションセレクタ」というのを発明(?)した。 なにかというと、 ブラウザの表示上に見えている文言で要素を選択 するのだ。 具体定期には、[caption] と書いたら、以下のどれかの条件に該当する要素を特定するのである。
実装時の協力も必要だが、 <label for="co-operator">協力者氏名</for>というようにビューを実装しておけば、.feature ファイルには、 When 要素 [協力者氏名] に「太郎」と入力というように記述できるのだ。 これでいちいち開発者ツールを広げたり要素の ID 値を調べたりすることなく、テスト対象の Web アプリ画面を横目に、.feature ファイルを記述していける。 結SpecFlow を用いることで、生の Selenium WebDriver API の上に、Gherkin 構文用の追加レイヤーを C# で記述することになる。その独自の C# コードのレイヤー上に独自のセレクタ構文を編み出すことができ、そして "キャプションセレクタ" はなかなか便利だという話であった。 ちなみに、この仕組みのせいかどうかははっきりしないが、今のところ「ページオブジェクトパターン」は用いていないけれども、書きためたテストコードの保守にあたって、要素の id 値や name 値の変更で大変な目に遭った、という経験が未だない。 ひとつご参考まで。
by developer-adjust
| 2013-12-24 23:01
| Selenium
|
Comments(0)
|
ファン申請 |
||