Je suis d'essayer d'utiliser le moteur de sélection Sizzle jQuery comme Sélénium personnalisé localiser API, comme dans cet article: http://johnjianfang.blogspot.com/2009/04/how-to-use-jquery-to-create-custom.htmlcomportement étrange lors de l'application méthode Array.prototype.slice pour résultat de querySelectorAll
Unfortunatly, quand j'utilise selenium.click('jquery=a.mylink')
, Rien ne se passe.
selenium.click('css=a.mylink')
fonctionne parfaitement. J'ai fait un peu de recherche, et a trouvé que le problème est dans la façon dont jQuery convertit le résultat de l'API querySelectorAll
. Voici l'extrait de 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;
};
Quand je change makeArray
comme ceci:
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;
};
Il permet de résoudre ce problème étrange.
Des idées pour lesquelles ce correctif fonctionne?!
Qu'en est-'ARRAYA [0] === arrayB [0]'? – palswim
true, pair pour (var p dans tableauA [0]) { if (arrayA [0] [p]! == arrayB [0] [p]) { alert ('diff'); } } never alerts :) –
Dans quels navigateurs avez-vous testé? –