2012-01-12 11 views
-1

私はカピバラでテストスイートを書いています。私はRubyのテキストボックスの長さをテストする必要があります。 255文字の制限があります。制限に達すると、もう入力できなくなります。だから私が探しているのは、255文字を超えないようにテキストボックスに入力された文字の数を数えることです。これはRubyで実行されています(私はコードを学習し始めたばかりなので、私にとって初めてのことです。どんな助けも素晴らしいでしょう)。ルビーのテキストボックスの文字数をカウントするには

:XPathの/ HTML /ボディ/ divの[4]/DIV [2]/divの[7]

私は多くのことを研究してきたと私は見つけることができるすべてのコードは、テキストボックスを作成する方法でありますと文字の制限を置くが、私はそれが動作することをテストできるコードを探しています。

スタッフa.countまたはcontent.countのようなものが見つかりましたが、うまく動作しません。

ご協力いただければ幸いです。前もって感謝します。

+0

私は少し混乱しています。クライアント側で入力を停止する場合は、JavaScriptでこれを行う必要があります。 (技術的には、はい、Ajax呼び出しで行うことができます)XPathが/ etcで使用されている/使用されていることについても明確ではありません。 –

+0

基本的に私は、255文字を保持することができるWebページ上のコメントボックスを持っています。その制限に達するともう一度cantタイプなので、コメントボックスにある文字の数をカウントできるいくつかのコードを探して、私はコメントボックスをテストしようとしていますが、すでに作成されていてテスト用に動作しています(rspec)。 – Ray

+0

あなたはRuby on Railsで働いていますか?そうであれば、Rubyのテキストフィールドにアクセスすることはできません。 Rubyはサーバー上で実行され、テキストボックスはクライアント側にのみ存在します。サーバーサイドを操作できるのは生のHTMLだけで、ユーザーが入力したテキストは含まれていません。そのテキストはクライアントによってサーバに送られ、 'params'配列に文字列としてしか存在しません。 – meagar

答えて

1

Rubyコードは、必要なテキストボックスを生成するのに役立ちますが、ユーザーが使用している方法を追跡することはありません。それは、ブラウザイベントを捕まえるために書くブラウザとJavaScriptの仕事です。そして、はい、あなたはそれぞれのキープレスをキャッチし、AJAXを使って結果をあなたのサーバに送り返すことができるので、あなたはそれをルビで処理することができますが、なぜこれをやりたいのですか?

Rubyヘルパーは、テキストボックス入力を特定の数に制限するようにブラウザに指示するためにいくつかのhtmlを生成できます。

おそらくこのような何か、このようなtext_area何かのために

<%= text_box 'some_model', 'some_attribute' , :maxlength=>"255" %> 

<%= text_area 'some_model', 'some_attribute', 
    :onchange => "if (this.value.length > 255){ this.value = this.value.substr(0,255); }" %> 

いっそ、ヘルパー.jsファイルにそのJavaScriptを置くとjQueryを使用して、それを追加したり、好き。

find(:xpath, "/html/body/div[4]/div[2]/div[7]/textbox").value.length.should_be 255 
+0

テキストエリア(標準の1行のテキストボックスではない)の場合、html maxlength属性は効果を持ちません。その時点で、他の人たちがこれを反映するように編集した答えとして、JavaScriptに頼らざるを得ません。 – PinnyM

+0

私は、テキストボックスに入力できるテキストの最大長が255文字であることを確認するRSpecテストを書こうとしています。 – Ray

+0

私はcapybaraを使用して実行時にクライアント側を確認しています – Ray

0

私は同様のソリューションを探していたとして、私は非常に遅く、このに来ている:

は、あなたが提供するXPathセレクタでRSpecの/カピバラを使用して、コンテンツの長さをテストするには

を更新しました。私は最終的に来た:

max_length = first(selector here).value 

if max_length.length > 255 
    puts 'Limit exceeds 255 characters - error' 
else 
    puts 'Limit is 255 characters - pass' 
    end 
end 

これは文字を数え、私のためにコンソールに正しいメッセージを出力します。あなたのテストに合うようにコンソールに出力する内容を修正することができます。

それとも、使用して、それを簡素化することができます:

max_length = first(selector here).value 

    expect(max_length.length). to eq 255 
end 
0

これは私のために働いていたものです

expect(find('#element_id').value.length).to eq(255) 
関連する問題