4

2 つの状態class="icon"またはのいずれかになる要素がありますclass="icon active"

アクティブでない最初のボタンをクリックすると思ったのです$browser.element(:class => /^icon$/).clickが、「アクティブ」が含まれているかどうかに関係なく、最初に見つかったボタンをクリックするだけです。

正規表現は間違っていますか?またはさらに良いことに、それを行う非正規表現の方法はありますか?

4

3 に答える 3

3

コメントで述べたように、使用した正規表現は watir-webdriver で機能するはずです。ただし、watir-classic と watir-webdriver の両方で機能するソリューションが必要な場合は、find.

b.elements.find{ |e| e.class_name == 'icon'}.click

これは、'class' 属性が正確に 'icon' である要素にのみ一致します。

これは遅くて読みにくいですが、watir-classic の方法をバイパスしてクラスを一致させることができます。以下に示すように、watir-classic は正規表現が要素のクラスのいずれかと一致することを確認します。

def match_class? element, what
  classes = element.class_name.split(/\s+/)
  classes.any? {|clazz| what.matches(clazz)}
end
于 2013-04-15T16:39:45.407 に答える
1

正規表現を使用できない場合、別のオプションとして、一致するアイテムのコレクションを取得し、それらをより詳細に調べて、機能するアイテムを見つけたらクリックし、その時点でコレクションを破棄します。

browswer.elements(:class => "icon").each do |possible|
  unless possible.attribute_value("class").include? "active"
    possible.click
    break
  end
end

私は常に の大ファンというわけではありませんunlessが、この場合は読みやすいコードになるので、それを使用しました

トラブルシューティングのために、そのコレクション内の要素のクラス情報に何が表示されているかを見てみましょう

browswer.elements(:class => "icon").each do |possible|
  puts possible.attribute_value("class")
end
于 2013-04-15T16:47:08.983 に答える