我正在尝试使用jQuery的Sizzle选择器引擎作为自定义的Selenium定位API,就像这篇文章中所说:http://johnjianfang.blogspot.com/2009/04/how-to-use-jquery-to-create-custom.html。不幸的是,当我使用
当我把
selenium.click('jquery=a.mylink')
时,没有任何反应。而selenium.click('css=a.mylink')
却完美地工作了。我进行了一些研究,并发现问题出在jQuery如何转换querySelectorAll
API的结果上。以下是来自jQuery 1.4.2的代码片段:Sizzle = function(query, context, extra, seed){
context = context || document;
// Only use querySelectorAll on non-XML documents
// (ID selectors don't work in non-HTML documents)
if ( !seed && context.nodeType === 9 && !isXML(context) ) {
try {
return makeArray( context.querySelectorAll(query), extra );
} catch(e){}
}
return oldSizzle(query, context, extra, seed);
};
var makeArray = function(array, results) {
array = Array.prototype.slice.call( array, 0 );
if ( results ) {
results.push.apply( results, array );
return results;
}
return array;
};
当我把
makeArray
修改成这样时:var makeArray = function(arrayLikeObject, results) {
var array = new Array(arrayLikeObject.length);
for (var i = 0, n = arrayLikeObject.length; i < n; i++) {
array[i] = arrayLikeObject[i];
}
if ( results ) {
results.push.apply( results, array );
return results;
}
return array;
};
它解决了这个奇怪的问题。
有任何想法为什么这个修复方法有效吗?!
arrayA[0] === arrayB[0]
怎么样? - palswim