0

私は
テスト自動化エンジニアであり、Selenium テストと連携して Web ブラウザーで実行する JSON を利用した「キーワード駆動型」のテスト システムを作成しています。

「キーワード」は XML ファイルとして保存されます。これらのキーワードを配列にロードし、そのキーワードのインデックスも保存する JavaScript 関数があります。paf.keywordIndex へ


$.get("getSteps.php", function(keywords) {
            paf.keywords = eval(keywords); // stores into an array...

            paf.keywordIndex = -1;
            for ( var i = 0 ; i < paf.keywords.length ; i++ ) {

                // for each path...
                /* alert(paf.keywords[i]); */

                $.ajax({url: "./_keywords/" + paf.keywords[i], success: function(xml) {         
                    paf.xml = xml;

                    paf.keywordIndex++;
                    var title = $(xml).find("keyword").attr("title");
                    //var name = $(xml).find("keyword").attr("name");

                    paf.buffer += ("<option value=\"./_keywords/"+paf.keywords[paf.keywordIndex]+"\">"+title+"</option>");
                },
                async: false
                //cache: false
                });

            }

            $(stepSelectionLocator).html(paf.buffer);
        });

getSteps.phpjson 配列ですべての xml キーワードを返す php サービスです。例えば ["Login.xml","EndSession.xml", "SelectResult.xml", etc...]


現在、この関数は機能していますが、唯一の問題は、どのような方法でもソートされていないことです。したがって、出力は次のようになります-

  • ログイン (Login.xml)
  • 結果を選択する (SelectResult.xml)
  • セッションを終了する (EndSession.xml)

この問題を解決するために、追加の属性を my に追加した<keyword>ので<keyword area="basic">、これが基本的な手順であることを示します。そして今、私の機能は -

$.get("getSteps.php", function(keywords) {
            paf.keywords = eval(keywords); // stores into an array...

            paf.keywordIndex = -1;
            for ( var i = 0 ; i < paf.keywords.length ; i++ ) {

                // for each path...
                /* alert(paf.keywords[i]); */



                $.ajax({url: "./_keywords/" + paf.keywords[i], success: function(xml) {         
                    paf.xml = xml;

                    paf.keywordIndex++;
                    var title = $(xml).find("keyword").attr("title");
                    var area = $(xml).find("keyword").attr("area");
                    //var name = $(xml).find("keyword").attr("name");

                    paf.buffer.push(area.toUpperCase() + ": " + title);
                },
                async: false
                //cache: false
                });

            }

            paf.buffer.sort(); // array is sorted...



            paf.buffer2 = "";
            paf.keywordIndex = -1;
            for ( var a in paf.buffer ) {
                paf.keywordIndex++;
                paf.buffer2 += "<option value=\"./_keywords/"+paf.keywords[paf.keywordIndex]+"\">"+ paf.buffer[a] + "</option>"; 
            }

            $(stepSelectionLocator).html(paf.buffer2.toString().replace(",", ""));
        });

今、出力は

  • BASIC: セッションを終了します (Login.xml)
  • BASIC: ログイン (SelectResult.xml)
  • 結果: 結果を選択します (EndSession.xml)


したがって、インデックスが問題であるとすでに判断しています。ただし、これを修正する方法がわかりません..

私は代替案を受け入れるので、これをインデックス化するためのより簡単な方法を見つけたら、私に知らせてください!

4

1 に答える 1

1

まず最初に、最初のリクエストから取得したデータを正確に把握しておくとよいでしょう。

$.get("getSteps.php", function (keywords) {
    paf.keywords = JSON.parse(keywords); // eval is bad! Use JSON.parse instead.
    console.log(paf.keywords); // what does it output in the console?
    ...

次に、i変数だけを使用して現在のインデックスを参照できます。他の場所で使用しない場合はpaf.keywordIndex、冗長なので削除できます。

第三に、あなたの ajax リクエストが*S * 同期であることを絶対に、確実に、100% 確信していますか? そうでない場合、応答はランダムに到着し、全体として別のアプローチが必要になります。

最後に、キーワードをすべて取得した後にソートを適用する場合は、それらをオブジェクトとしてバッファ配列にプッシュすることをお勧めします。

buffer.push({
    keyword: keywordName, // this is the keyword name
    keywordIndex: i, // this is the initial index
    keywordArea: areaObtainedFromXML // this is the area you get from xml
});

上記のアプローチを使用すると、最初の順序を保持しながら、さまざまな方法でバッファーを並べ替えることができます。

この jsfiddleで不自然な例を見てください。

于 2012-12-17T19:57:50.053 に答える