IeUnit を拡張する
IeUnitそのものについてはとりあえず省略。機会があれば紹介します。
普通はSeleniumだよねー。そうだよねー。いろいろ事情があるんだよねー。
ieunit本家。
http://code.google.com/p/ieunit/
ieunitは便利なんですが、使っていると機能を追加したりしたい場合も出てきます。
しかし、本体をいじるとかできるだけやりたくないんで、本体をいじらない別の形で拡張する方法を紹介します。
jstファイルをダブルクリックで起動した場合、jstと同じディレクトリにあるjsファイルは自動的にロードされます。
これを利用して、IeUnitクラスに新しい関数を追加します。
以下は拡張用jsのサンプルです。
拡張子がjsならファイル名はなんでもいいです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
IeUnit.prototype.require = function require(lib){ var ts = exports = {}; try{ var rt = ( ts = (new ActiveXObject("Scripting.FileSystemObject")) .OpenTextFile( lib.replace(/\//g, "\\") + ".jstlib")).ReadAll(); ts.close(); ts = null; eval(rt); }catch(e){ this.log('require "' + lib + '"' + e.message); try{ ts.close(); ts = null; }catch(ee){} throw e; } return exports; }; IeUnit.prototype.waitDocumentReady = function (){ this.waitForSuccess( function() { this.assertEquals("complete", this.doc.readyState) }); }; IeUnit.prototype.waitAsyncPostback = function(prm){ if (prm === undefined){ prm = this.win.Sys.WebForms.PageRequestManager.getInstance(); } while(prm.get_isInAsyncPostBack()){ // wait asp.net asyncpostback this.sleep(10); } return prm; }; IeUnit.prototype.loadJSON = function(filename){ var ts = ro = {}; var rt = (ts = (new ActiveXObject("Scripting.FileSystemObject")) .OpenTextFile(filename)).ReadAll(); ts.Close(); ts = null; return eval("ro = " + rt + ";"); }; |
この jsは、require, loadJSON, waitDocumentReady, waitAsyncPostback メソッドを追加します。
(IE6用にjson作るのにevalしてたりしますんであくまでサンプルとしてご覧ください)
このjsと以下の3ファイルすべて同じ場所において、jstを起動します。
前述の通り、IeUnitは自動でテストファイルと同じ場所にある jsファイルを自動起動します。
自動で読み込んでほしくない場合拡張子は js以外にしないとハマります。
なお、上の jsの requireメソッドは拡張子jstlib決め打ちです。
HelloWorldTest.jst
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
function HelloWorldTest() { assimilate(this, new IeUnit()); var myLib = this.require('myLib') this.setUp = function() { this.openWindow("http://localhost/HelloWorld.html"); }; this.tearDown = function() { this.closeWindow(); }; // Verify that the page contains only the text "Hello World!" this.testCheckText = function() { this.assertPageHasText("Hello World!"); var myjson = this.loadJSON('sample.json'); myLib.sampleRequire(); }; } |
myLib.jstlib
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function sampleRequire(){ _.log('sample out'); } function sampleCallOther(){ sampleCalled(); } function sampleCalled(){ _.log('sample Called'); } export.sampleRequire = sampleRequire; export.sampleCallOther = sampleCallOther; |
sample.json
1 2 3 |
{ 'test': 123 } |
ここに書いたコードは WinXP+IE6向けです。
投稿したコードはまだ未検証ですので、入力ミスがあるかも。その場合はご報告ください。
コメントはまだありません。