如何使Selenium定位器唯一或内嵌HTML唯一

0 投票
1 回答
631 浏览
提问于 2025-04-17 09:42

有个简单的需求:我想修改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。也许如果你能分享一下你具体的任务,为什么需要把这些链接分开,我们可以给你更好的建议。

撰写回答