我有一个JSF应用程序,它生成一个带有标签的页面:
<label for="_idJsp0:question" class="left">Question</label>
然后DOM中的其他地方是组件:
<td><textarea rows="7" cols="25" id="_idJsp0:question" name="_idJsp0:question">My Question.</textarea></td>
对于Selenium,我正在使用jQuery构建自定义位置策略,所以我的问题是如何返回标签的“for”属性的ID?我可以在标签上使用.attr(“for”)来返回ID的字符串,但我不知道如何实际返回格式正确的选择器输出。我尝试过这样的方法:
var inner = "label:contains('Question')";
$('#' + $(document).find(inner).attr('for'));
任何帮助将不胜感激!
答案 0 :(得分:1)
这是id上的冒号,使选择器无法工作。冒号后面的文本被解释为元类,而不是id的一部分。
你必须在选择器中转义冒号:
$('#' + $(document).find(inner).attr('for').replace(':', '\\:'))
为了完整;如果你想要转义选择器中的标识符中的任何特殊字符,你将使用像这样的替换
id.replace(/([!"#$%&'\(\)\*\+,\.\/:;<=>\?@\[\\\]\^`\{\|\}~])/g, '\\$1')
答案 1 :(得分:0)
您需要转义特殊的jQuery选择器。 尝试这样的事情:
function jqescape(str) {
return str.replace(/[#;&,\.\+\*~':"!\^\$\[\]\(\)=>|\/\\]/g, '\\$&');
}
var inner = "label:contains('Question')";
$('#' + jqescape( $(document).find(inner).attr('for') ) );
答案 2 :(得分:0)
这将打印“我的问题”:
alert($("textarea[id='" +
$("label:contains('Question')").attr('for') +
"']").html());
它正在寻找[id='xxx']
而不是#xxx
,因为ID中有:
。但是:
是jQuery selectors中的一个特殊字符。