2017-05-16 22 views
1

オートメーションテストでjavascriptファイル内のURLを変更しようとしています。これは私がサービスのスタブ・バージョンを指摘できるようにするためです。私はテストのために使用していますフレームワークは(分度器を使って)セレニティ-jsからであるjavascriptを使用してjavascriptファイルのURLを変更する方法オートメーションテスト

私のHTML DOMで私が持っている:

<script type="text/javascript" src="main.js"></script>

main.js

var DataService = (function() { 
    function DataService(http) { 
     this.http = http; 
    } 
    DataService.prototype.getStudentDetails = function (id) { 
     var parcel = this.http 
      .get('http://127.0.0.1/endpoint/' + id) 
      .map(function (res) { 
      return __WEBPACK_IMPORTED_MODULE_2__student_model__["a"].createStudent(res.json()); 
     }); 
     return student; 
    }; 
    return DataService; 
}()); 

私がする必要がある部分を変更は127.0.0.1/endpoint

$.document.writeまたは$().appendを使用してHTML DOMをコールドチェンジしますが、わかりませんどのようにDOM要素を変更/上書きするか。

+0

JS変数または '入力隠し'フィールドを使用できます。 – alok

+1

main.jsファイルは既存の実動システムです。私は、他のユーザーからの脆弱性を引き起こす可能性のあるソースコードを変更したくないです。むしろ、私はむしろ「オンザフライ」で変えようとしています。 –

+0

ああ!それはあなたが来るところです!私は完全に誤解して申し訳ありません。 – alok

答えて

0

これは非常に簡単ですが、それを行う方法はとてもたくさんあります!テストを実行する前に、セットアップフェーズの一環として

  1. 、あなたがsedawkスクリプトを使用しただけで前処理main.jsファイル可能性があり、何か他のものと127...文字列の出現をすべて置き換えます。
  2. すべてのURLエンドポイントを含む構成変数から読み取るように運用システムのコードを変更します。その場合、テストスクリプトでそのオブジェクトを変更することができます。
  3. テストスクリプトを使用して、関数を別のものに置き換えます。これは@alokはコメントで示唆するものであるが、コメントはprototypeがありませんでした、そして方法も呼び出されていないはずなので、コードは次のようなものになります。第3位の

例:

const newFnString = DataService.prototype.getStudentDetails.toString() 
         .replace("127.0.0.1", "something.com"); 
DataService.prototype.getStudentDetails = new Function(newFnString); 

もちろん、DataService.prototype.getStudentDetailsを完全にコントロールしているので、(関数がクロージャーに隠されていない限り)任意の関数に置き換えてもかまいません。

P.S. JavaScriptを改ざんすることを難しくすることでシステムを保護しようとすると、あいまいさによるセキュリティだけであり、本当のことではありません。何らかの攻撃者がネットワークの要求を読み込んで、curlまたは郵便番号で再生することができます。

+0

働いた歓迎 –

+0

@AndrewEvans素晴らしいです。 3つのアプローチのどちらを実行しましたか? – oligofren

関連する問題