1

これは、私が以前に尋ねたこの質問と同じ流れです - Watir webdriver; クラス名が変化する要素を数えます。クラス名の使用に基づいて、特定の数の要素を追加できましたasset-card selectable

現在、他の要素をクリックして既存のセットに追加しようとしています。ここに私のジレンマがあります:

  • 要素クリックされていない場合、クラス名は次のとおりです。
    image-card asset-card selectable
  • 要素がクリックselectedされると、クラス名に追加されます。
    image-card asset-card selectable selected

私の場合は、 を含むだけでを含まない追加の要素を探してimage-card asset-card selectableいますselected。それらを明示的に見つける方法がわかりません。

これにアプローチする方法について、正規表現の解決策やその他の考えはありますか?

4

1 に答える 1

2

特定のクラスを持たない要素を見つける最も簡単な方法は、:cssロケーターを使用することです。

browser.divs(css: 'div.image-card.asset-card.selectable:not(.selected)')

CSS セレクターの説明:

  • div- これは、一致させようとしている要素のタグ名です
  • .image-card.asset-card.selectable- これは、一致する要素に持たせたいクラスのリストです
  • :not(.selected)- これは、一致する要素に持たせたくないクラスのリストです

CSS セレクターに反対する場合は、要素を反復処理できます。ブラウザへの呼び出しを増やす必要があるため、これは遅くなることに注意してください。

selectable = browser.divs(class: 'image-card asset-card selectable')
unselected = selectable.reject { |e| e.class_name.split(' ').include?('selected') }

以前に正規表現を使用しようとしましたが (ブログ投稿を参照)、かなり面倒です。私はそのように行くことをお勧めしません。

于 2016-08-23T13:55:22.477 に答える