2011-03-05 3 views
1

de label j'ai une application JSF qui produit une page avec une étiquette sur elle:accès id "pour" attribut

<label for="_idJsp0:question" class="left">Question</label> 

Et puis ailleurs dans le DOM est le composant:

<td><textarea rows="7" cols="25" id="_idJsp0:question" name="_idJsp0:question">My Question.</textarea></td> 

Pour Selenium, je construis une stratégie de localisation personnalisée en utilisant jQuery, et donc ma question est de savoir comment retourner l'ID de l'attribut "for" de l'étiquette? Je peux utiliser .attr ("for") sur l'étiquette pour retourner la chaîne de l'ID, mais il me manque comment retourner correctement la sortie du sélecteur formaté. J'ai essayé des approches comme:

var inner = "label:contains('Question')"; 
$('#' + $(document).find(inner).attr('for')); 

Toute aide serait appréciée!

Répondre

1

C'est le signe deux-points sur l'identifiant qui empêche le sélecteur de fonctionner. Le texte après le signe deux-points est interprété comme une méta-classe plutôt que comme une partie de l'identifiant.

Vous devez vous échapper du côlon dans le sélecteur:

$('#' + $(document).find(inner).attr('for').replace(':', '\\:')) 

Pour être complet; si vous voulez échapper à un caractère spécial dans un identifiant dans un sélecteur que vous utilisez un remplacement comme celui-ci

id.replace(/([!"#$%&'\(\)\*\+,\.\/:;<=>\[email protected]\[\\\]\^`\{\|\}~])/g, '\\$1') 
+0

Cela a fonctionné! Merci pour les réponses rapides! :) – doc

0

Vous devez échapper aux sélecteurs de jQuery spéciaux. Essayez quelque chose comme ceci:

function jqescape(str) { 
    return str.replace(/[#;&,\.\+\*~':"!\^\$\[\]\(\)=>|\/\\]/g, '\\$&'); 
} 
var inner = "label:contains('Question')"; 
$('#' + jqescape($(document).find(inner).attr('for'))); 
0

Ce imprimera "Ma question":

alert($("textarea[id='" + 
    $("label:contains('Question')").attr('for') + 
    "']").html()); 

Il cherche [id='xxx'] au lieu de #xxx parce qu'il ya une : dans l'ID. Mais : est un caractère spécial dans jQuery selectors.

Questions connexes