如何使Selenium定位器唯一或内嵌HTML唯一
有个简单的需求:我想修改HTML源代码,让某个HTML元素里的内容都是独一无二的。下面这个简单的例子可以更清楚地说明这个问题:
<html>
<a href="/hello/doit.do"><img src="Button.bmp" border="0"></a>
<a href="/hello/doit.do">A Real Link</a>
</html>
如果你注意到,用户会看到它作为文本链接和图片链接。如果我想仅通过属性来找到这个元素,构建一个这样的CSS定位器:
loc = 'css=a[href="/hello/doit.do"]'
那么Selenium会找到两个元素。
我在用Python 2.7的Selenium RC客户端,想简单地给它们加一个随机数字作为ID属性,以便区分它们。我的问题是,怎么才能遍历所有相同的innerHTML,并添加一个随机数字呢?
据我所知,
get_css_count(loc)
这样做只能得到数字2。我需要的是每个元素的inner HTML,以便插入一个独特的属性。
长话短说,Selenium有个方法叫get_attribute(attributeLocator)
,我想知道有没有set_attribute(attributeLocator, value)
这个方法?
1 个回答
0
你真的需要用Selenium来修改DOM吗?其实你可以像@racar建议的那样,直接用页面的JavaScript来改变DOM,比如用jQuery:
$(function() {
var i = 1;
$('a[href="/hello/doit.do"]').each(function() {
$(this).attr('id', 'link_' + i);
i += 1;
});
});
这样就会给你所有的链接添加上“link_1”、“link_2”等ID。
或者,如果你自己生成HTML的话,也可以在生成的时候就添加这些ID。也许如果你能分享一下你具体的任务,为什么需要把这些链接分开,我们可以给你更好的建议。