2

テストを追加するプロジェクトでは、「取得」するのが複雑な要素がいくつかあります。
私のテキストエリアのhtml:

<div class="quote">        
 <div class="clearfix">          
  <div class="icon"></div>            
   <div class="text">
    <span class="yui3-widget yui3-inputwidget yui3-textareawidget yui3-textareawidget-focused" style="">
     <span class="yui3-textareawidget-content">
      <textarea name="" placeholder=""></textarea>
     </span>
    </span>
   </div>        
   <div class="author">
    (...) other text_field 
   </div>
  </div>        
 </div>    
</div>

今のところ、この行を使用して値を設定します

@browser.element(:css => ".quote textarea").send_keys "test"

PageObjectで、要素を宣言して使用する必要があります。

# declaration at the top
element(:quote_text, :css => ".quote textarea") 
# use it where I need
self.quote_text = "text"

しかし、使用するとこのエラーが発生します:

undefined method `quote_text=' for #<PublishPage:0x33843c0> (NoMethodError)

私はどこが間違っていますか?

4

2 に答える 2

5

を実行element(:quote_text, :css => ".quote textarea")すると、メソッドのみが生成されます(ドキュメントを参照)。

quote_text #Returns the text of the element
quote_text_element #Returns the element
quote_text? #Returns if the element exists

これがテキスト領域であり、テキスト領域メソッドが必要なことがわかっているので、次のように宣言する必要があります。

text_area(:quote_text, :css => ".quote textarea") 

これにより、quote_text=期待する方法が得られます(ドキュメントを参照)。

更新-Watir-Webdriverは要素クラスのcss-selectorsのみをサポートしているため(Issue 124を参照)、ロケーターも変更する必要があります。そのための2つの代替宣言が機能しquote_textているようです。

#Using a block to locate the element:
text_area(:quote_text){ div_element(:class => "quote").text_area_element }

#Using xpath:
text_area(:quote_text, :xpath => '//div[@class="quote"]//textarea') 
于 2012-09-21T14:52:30.267 に答える
0

私はあなたがそこに必要だとは思いませんself(しかし私は間違っているかもしれません)。

これを試して

quote_text = "text"

それ以外の

self.quote_text = "text"
于 2012-09-21T13:51:25.583 に答える