2012-01-06 2 views
0

単純な必要性:特定のHTML要素のすべてのinnerhtmlが一意になるようにHTMLソースを変更する方法。簡単な例では、より明確に同じことを説明できる:Selenium Locatorを一意にする方法またはInner 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"]' 

セレンには2つの要素があります。 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

+0

「some JS」についてもっと具体的に教えてください。なぜCSSを使用できないのですか? – abarik

+0

CSSの代わりにxpathセレクタを使用します。 http://stackoverflow.com/questions/8764856/selenium-css-locator-all-attribute-options-with-and-without-being-strict/8772313#8772313 –

答えて

0

本当にSeleniumを使用してDOMを変更する必要がありますか? @racar(例えばjQueryのために)示唆されているようにあなたがページのJSを使用してDOMを変更することができます:すべてのリンクのID "link_1"、 "link_2"、...が追加されます

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

HTMLをレンダリングするときに、そのIDを追加することもできます。本当の仕事を分かち合って、なぜリンクを分けなければならないのか、もっと良い解決策を提案することができます。

+0

" HTMLをレンダリングするときにそのIDを追加することができます。「なぜ私はそれを考えなかったのですか?素晴らしいです、ありがとう!! これは私にとって本当の意味です: 私はより良い方法を提案できるように、私が達成しようとしていることを詳しく説明しましょう。 mayukhbose.com/elements.html Cont ...次のコメント – abarik

+0

ここに続く...私がやりたいことは、Pythonから、インタラクションを自動化できる簡単なメソッド/関数を作ることですHTML要素を使用します。例:click_button(button_name = 'Send Data')。 SeleniumのPython Clientを使用してこれらのメソッドを簡単に記述できます。しかし、SeleniumのPython Clientは要素ロケータをパラメータとして受け取るだけです。今、私はどういうわけかウェブページにあるテキストに基づいてこれらのロケータを作成する必要があります。これは、Webページを解析することによって行うことができます(BeautifulSoupは本当に便利です)。あなたが私の考えを得ることを願っています。ありがとう、Amit – abarik

+0

あなたはそのHTMLページを生成しますか?もしそうなら、idのようなユニークなパラメータを追加することが私が思う最良の解決策になり、セレクタは小さく明瞭になり、あいまいさがなくなります(セレクタは多くの要素にマッチします)。しかし、XPathセレクタでは、contains()関数を使ってテキストを見つけることもできます:// a [contains(text()、 'Some case-sensitive text')] 'または' // a [contains(。、 '別のテキスト)] '。あなたが使うことができる[他の多くの機能](http://www.w3schools.com/xpath/xpath_functions.asp)があります。 – demalexx

関連する問題