web-dev-qa-db-ja.com

カピバラ:xpathとcssで要素のTEXT値をチェックする方法は?

このテストが失敗して失敗するようにしようとしています。

私はこのHTMLを持っています:

<div id="navigation">
 <ul>
  <li>
   <a href="/url">TV</a>

そして、私はA要素のテキストを特定して、今のところそれを失敗させることを試みていました。

私はXpathで以下のすべての式を使用しましたが、比較のために別のテキストを使用している場合でも、それらはすべて合格し続けます:S

page.should have_xpath("//div[@id='navigation']//a", :content => 'Radio')
page.should have_xpath("//div[@id='navigation']//a", :text => 'Radio')
page.should have_xpath("//div[@id='navigation']//a[contains(string(),'Radio')]")
page.should have_xpath("//div[@id='navigation']//a[contains(text(),'Radio')]")
page.should have_xpath("//div[@id='navigation']//a[contains(.,'Radio')]")

カピバラで特定のHTML要素のテキストをどのように識別することができるかについてのアイデアはありますか?そして... CSSで同じことを達成することは可能ですか?

乾杯!

16
mickael

「ナビゲーション」DIVに「ラジオ」というテキストを含む別の要素があったため、テストが失敗したことがわかりました。

今後の参考のために、最初の要素を特定すると、期待どおりに動作し、テストに失敗します。

page.first('div#navigation a').text.should == 'Radio')
page.first('div#navigation a').text.should eq('Radio')
page.first('div#navigation a').text.should match('Radio')
page.first('div#navigation a').text.should be('Radio')
12
mickael

RSpec 2.11(2012年7月)以降、推奨される方法はexpect構文を使用することです。

expect(page).to have_css("#navigation a", text: "Radio")

configure RSpec を使用して、この新しい構文のみを受け入れ、コードベースの一貫性を保つことができます。

17
Jan Klimo

多分これを使うことができます:

expect(page).to have_xpath("//*[@href='']", text: 'TV')
0

これをここに置いて、次にこれに遭遇したときに見つけられるようにします。 :P

私のhtmlは次のようになります:

<a href="https://foo.com" id="foo-link">@foo</a>

テキストとURL値を見つけて、それらが正しいことを主張したいと思います。 Capybary 2.16を使用して、Rails 5.1とここでminitestを実行しました。

assert_selector 'a#foo-link[href="https://foo.com"]', text: '@foo'

ID、テキスト、またはhref値が変更された場合、テストは失敗します。

0
Donn Felker

それはあなたを助けるでしょう:

page.should have_css( 'div#navigation a'、:text == 'Radio')

これを試して。

0
NMKP