1

私は現在、ユーザー入力に基づいてページのCSSを更新するWebアプリを作成しています。すべて正常に機能していますが、CSSが実際に更新されていることを確認するための自動テストを取得するのに問題があります。

<style>基本的には、ドキュメント内のタグの内容が<head>特定の値に更新されていることを確認したいだけです。私はテストにカピバラ(セレンドライバーを使用)を使用しています。次のコードを使用します。

styles = page.all('style')
styles.length.should == 1
styles[0].text.should == style

最終行まではすべて期待どおりに機能しますが、styles[0].text常に「」であるように見えますが失敗します。私も試しまし.valueたが、いつもnilです。テストが実行されているFirefoxウィンドウで変更を確認できるので、CSSが実際に更新されていると確信しています。

それで、<style>カピバラを使ってタグの内容を取得する方法はありますか?

4

2 に答える 2

2

Capybara (少なくとも Selenium では、他のドライバーは試していません) ではこれが表示されないようです。スタイル コンテンツが HTML コメントでラップされているため、無視されると思われます。

<STYLE type="text/css">
    <!--
    .newfont { color:red; font-style:italic }
    -->
</STYLE>

ただし、 を使用してページのソースにアクセスpage.sourceできるので、それを使用してスタイル コンテンツを取得できます。ソースは単なる大きな文字列なので、それを掘り下げる 1 つの方法は Nokogiri を使用して解析することです (これは Capybara で必要なため、既に取得済みです)。

page = Nokogiri::HTML.parse(page.source)
page.css('style').first.text

# => "\n&lt;!--\n.newfont { color:red; font-style:italic }\n--&gt;\n"

カスタマイズ可能なスタイルに対してアサートし、とにかく Selenium を使用している場合、別の解決策として Javascript を使用して要素の計算されたスタイルを決定することができます。これに関する情報は不足していないようです。Capybara のpage.evaluate_script方法を使用して、特定の要素が実際にどのように見えるかを示す Javascript を呼び出すことができます。これは、CSS テキストを比較するよりも堅牢である可能性があります (たとえば、アプリによって縮小された場合)。

于 2012-08-26T15:44:51.170 に答える
1
page.should have_css ".selector", :text => "Some Text"
page.should have_css ".selector", :value => "Some Value"
page.should have_css ".selector", :count => 1

または

find('.selector').value
find('.selector:nth-child(1)').value

あなたがしようとしていることについては、いくつかの方法があります。ドキュメントを詳しく見てみたいと思います。

また、イベント後にこれらの変更にアクセスしようとしている場合はjavascript、これを Selenium (または同等のもの) で実行する必要があります。または、これにも Jasmine.js を使用することができます。

于 2012-08-26T14:58:32.950 に答える