所以我会直接跳到它...... 我是一名测试自动化工程师,我正在制作一个由JSON驱动的“关键字驱动”测试系统,它与Selenium测试相结合,可以在网络浏览器上运行。
“关键字”存储为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.php
是一个php服务,它返回json数组中的所有xml关键字。例如
["Login.xml","EndSession.xml", "SelectResult.xml", etc...]
现在这个功能有效,但唯一的问题是,它没有以任何方式排序。所以输出将是 -
要解决此问题,我在<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(",", ""));
});
现在输出
所以我已经确定索引是问题所在。但是,我无法找到解决这个问题的方法..
我愿意接受其他选择,所以如果你找到一种更简单的方法来索引这个,请告诉我!
答案 0 :(得分: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
,则可以删除它,因为它是多余的。
第三,你绝对肯定是100%确定你的ajax请求 * S * ynchronous? 如果不是 - 响应将随机到达,整个过程将需要采用不同的方法。
最后,如果您希望在完成所有关键字之后对您的关键字应用排序,我建议将它们作为对象推送到缓冲区数组中:
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
});
通过使用上述方法,您可以在保留初始订单的同时以多种方式对缓冲区进行排序。
请在 this jsfiddle 上查看一个人为的例子。