2012-01-06 57 views
0

一个简单的需求:如何修改HTML源,以便每个innerHTML为特定的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"]' 

硒会发现两个元素。 在Python 2.7中使用Selenium RC Client,我希望简单地添加一个随机数作为ID属性以便将它们分开。我的问题是,如何循环遍历所有常见的innerHTML并添加一个随机数字?

据我所知,

get_css_count(loc) 

只会让你数= 2。我需要的是每个那些为了插入一个独特的属性内HTML?

长话短说,硒有get_attribute(attributeLocator),我想知道是否有set_attribute(attributeLocator, value)

+0

你可以通过执行一些JS来改变html。将使用xpath – malletjo 2012-01-06 21:11:15

+0

你能更具体地说“一些JS”吗?为什么我不能使用css? – abarik 2012-01-06 21:17:28

+0

使用xpath选择器而不是css: http://stackoverflow.com/questions/8764856/selenium-css-locator-all-attribute-options-with-and-without-being-strict/8772313#8772313 – 2012-01-07 19:23:32

回答

0

你真的需要使用硒修改DOM吗?使用页面JS作为@racar建议(例如jQuery的),你可以改变DOM:

$(function() { 
    var i = 1; 
    $('a[href="/hello/doit.do"]').each(function() { 
     $(this).attr('id', 'link_' + i); 
     i += 1; 
    }); 
}); 

这将增加ID为 “LINK_1”, “LINK_2”,...您的所有链接。

或者,如果您自己渲染,则可以在呈现HTML时添加该ID。可能是如果你分享你的真实任务,为什么你需要分开这些链接,我们可以建议一个更好的解决方案。

+0

“你可以在渲染HTML时添加这些ID“为什么我没有想到这个?太好了,谢谢!! 任何情况下,这对我来说都是实实在在的: 因此,让我先详细解释一下我想要实现的目标,以便您能够为我提供更好的方法。有一个网页有所有的HTML元素,如:mayukhbose.com/elements.html继续...在下一个评论 – abarik 2012-01-09 17:05:57

+0

续...我想要做的是,从Python制作简单的方法/函数,可以自动化交互与HTML元素。例如:click_button(button_name ='发送数据')。我可以使用Selenium的Python Client轻松编写这些方法。但是,Selenium的Python客户端仅将元素定位器作为参数。现在,我需要基于网页上的文本创建这些定位器。这可以通过解析网页(BeautifulSoup真正有用)来完成。我希望你能明白我的想法。谢谢,阿米特 – abarik 2012-01-09 17:06:09

+0

您是否生成该html页面?如果是这样,那么添加像id这样的独特参数将是我认为的最佳解决方案,那么选择器将会很小并且清晰,并且不会有歧义(一个选择器可以匹配很多元素)。但是你也可以在''contains()'函数中找到XPath选择器中的文本:'// a [contains(text(),'一些区分大小写的文本')]'或'a [contains(。,'另一文字)]'。您可以使用[许多其他功能](http://www.w3schools.com/xpath/xpath_functions.asp)。 – demalexx 2012-01-10 00:50:56