2

注文ごとに変化する要素をクリックしようとしています

edit_div_123

edit_div_124

edit_div_xxx

xxx = any three numbers

次のように正規表現を使用してみました:

@driver.find_element(:css, "#edit_order_#{\d*} > div.submit > button[name=\"commit\"]").click 

@driver.find_element(:xpath, "//*[(@id = "edit_order_#{\d*}")]//button").click  

これは可能ですか?これを行う他の方法はありますか?

4

4 に答える 4

4

他の回答が示しているように、正規表現は使用できません。

代わりに、気の利いた CSS セレクターのトリックを使用できます。

@driver.find_element(:css, "[id^=\"edit_order_\"] > div.submit > button[name=\"commit\"]").click

使用:

  • ^= は、条件で始まる値を持つ要素を検索することを示します。

  • *= は、基準が要素の値内のどこにでもあることを示します

  • $= は、値の末尾に条件を付けて要素を検索することを示します。

  • ~= を使用すると、実際の値にスペースで区切られた値のリストが複数ある場合に、単一の基準に基づいて要素を見つけることができます。

あなたがあなたユーティリティベルト!

于 2013-04-14T04:41:09.263 に答える
2

作業中の html フラグメントが提供されていません。したがって、私の答えは、あなたの質問に提供された限られた情報に基づいています。

WebDriver API が要素を見つけるための正規表現をサポートしているとは思いません。ただし、次のように単純な XPath を使用して目的を達成できます。

//*[starts-with(@id, 'edit_div_')]//button

説明: 上記の xpath は、属性が文字列で始まる <button>すべての要素の下に存在するすべてのノードを検索しようとします。idedit_div_

starts-with()つまり、次のように要素を id 形式と一致させるために xpath 関数を使用できます。edit_div_ followed by any number of characters

于 2012-07-20T16:31:44.670 に答える
0

いいえ、あなたがすることはできません。

ただし、次のようにする必要があります。

function hasClass(element, className) {
  var re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)');
  return re.test(element.className);
}
于 2012-07-20T16:30:41.187 に答える