2016-09-13 17 views
1

キュウバーとRSpecを使用して、黄色のdivがクラスcard-selectedを持っているかどうかを確認しました。Rails Capybara RSpec XPath CSSセレクターは子供を使用しています

asdf

私が書いているコードは

node = page.find(:css, '.card-selected') 
#<Capybara::Node::Element tag="div" path="//HTML[1]/BODY[1]/DIV[3]/DIV[1]/DIV[2]/DIV[1]/DIV[2]/DIV[1]/DIV[1]/DIV[1]/DIV[7]"> 

である私はChromeでretured XPathをコピーすると、予想通り、私は、黄色のdivを選択し得ます。

問題はノードにCSS属性を問い合わせることで発生します。私が理解したように、これは予想される動作ではありません。私はこの振る舞いから、ノード

# Checking for parent node contents 
node.find(:xpath, '..').has_css?('.card-selected') 
true 

node.find(:xpath, '..').has_css?('.card-deselected') 
true 

node.find(:xpath, '..').has_css?('.card-contents') 
true 

の親を照会すると

# Checking for current node contents 
node.has_css?('.card-selected') 
false 

node.has_selector?(:css, '.card-selected') 
false 

node.has_css?('.card-contents') 
true 

しかし、has_css?方法は、子供たちだけの内容をチェックしているようですノード自体ではない。私は、親に問い合わせるとあまりにも複雑になるため、回避策を見つけることができないようです。

私はここで何を理解していませんか?

+0

、node.visible期待matches_selector?は何がしたいのですか? trueを返します –

答えて

1

あなたが見ている動作が予想されます - findersは現在のスコープ要素内にあり、has_xxx?方法は同じです。現在のscope要素に渡されたセレクタに一致する要素が含まれているかどうかをチェックします。

node.matches_selector?(:css, '.card-selected') # the :css is optional if it's the default selector type 

かのフォームはまた

expect(node).to match_css('.card-selected') 
+0

findersが現在のスコープ内で見つかった場合、代わりに最初の 'node.has_css?( 'card-selected')'が 'true'を返すべきではありませんか? '.card-selected'は' node'に属します –

+0

@EstebanBouzaいいえ - 内包されている子孫、子供、孫など –

+0

Capybaraドキュメントはこう言っています: 'http://www.rubydoc.info/github/jnicklas/capybara/Capybara%2FNode%2FMatchers%3Ahas_css%253F' '#has_css?(path、options = {})⇒ブール' '指定されたCSSセレクタがページまたは現在のノードにあるかどうかを確認します。 私が理解しているように、現在の 'node'は' .card-selected' cssを持っていますので、動作は期待できません。 –

関連する問題