如何获得元素与PageObject CSS(How to get element with css

2019-09-22 18:04发布

在我的测试中添加这个项目,我有一些因素复杂,“搞定”。
我textarea的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)

我在哪里错了?

Answer 1:

当你这样做element(:quote_text, :css => ".quote textarea")它只会生成方法(见DOC ):

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选择器(参见问题124 ),您还需要改变定位。 两个替代声明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') 


Answer 2:

我不认为你需要self存在(但我可能是错的)。

尝试这个

quote_text = "text"

代替

self.quote_text = "text"


文章来源: How to get element with css in PageObject