2012-01-06 18 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