19

このテストを成功せずに失敗させようとしています。

私はこの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で同じことを達成することは可能ですか?

乾杯!

4

6 に答える 6

21

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

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

コードベースの一貫性を保つために、この新しい構文のみを受け入れるようにRSpecを構成できます。

于 2015-12-05T12:27:08.280 に答える
12

'navigation'DIVに'Radio'というテキストの別の要素があったため、テストが失敗したことが判明しました。

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

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')
于 2012-12-15T15:18:43.947 に答える
0

それはあなたを助けます:

page.should have_css('div#navigation a'、:text =='ラジオ')

これを試して。

于 2013-01-31T13:39:36.750 に答える
0

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

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

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

テキストとURLの値を見つけて、それらが正しいことを主張したいと思います。Capybary 2.16、Rails 5.1、およびミニテストを使用して、これを実行した方法は次のとおりです。

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

ID、テキスト、またはhref値を変更すると、テストは失敗します。

于 2018-02-10T11:45:16.700 に答える
0

多分あなたはこれを使うことができます:

expect(page).to have_xpath("//*[@href='']", text: 'TV')
于 2019-10-16T08:29:52.650 に答える
0

使用する have_selector

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

于 2021-02-28T18:37:30.130 に答える