【问题标题】:How to get element with css in PageObject如何在 PageObject 中使用 css 获取元素
【发布时间】:2012-09-21 13:38:19
【问题描述】:

在我添加测试的项目中,我有一些复杂的元素要“获取”。
我的文本区域的 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)

我哪里错了?

【问题讨论】:

  • 当我尝试 self.quote_text_element.send_keys "test" 时出现另一个错误:(eval):1: syntax error, unexpected '(', expecting $end {:css=>".quote textarea "}(标识符)^(语法错误)

标签: watir page-object-gem


【解决方案1】:

当你做element(:quote_text, :css =&gt; ".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= 方法(请参阅doc)。

更新 - 由于 Watir-Webdriver 仅支持元素类的 css-selector(请参阅 Issue 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') 

【讨论】:

  • 另一个错误:invalid attribute: nil (Watir::Exception::MissingWayOfFindingObjectException) (eval):1:in `process_watir_call' 我再去搜索一下,这个解释让我感觉离目标更近了。
  • 对了。第二个例外是因为 Watir-Webdriver 目前不支持使用除元素类 Issue 124 之外的 css 定位器。
  • 完美更新。我不知道可以在 PAgeObject 定义中使用块。非常有用:)
【解决方案2】:

我认为你不需要self(但我可能错了)。

试试这个

quote_text = "text"

而不是

self.quote_text = "text"

【讨论】:

  • 我在我的页面对象代码中使用 self “无处不在”。如果我删除自我。 : 没什么变化。在quote_text = text上,效果不好而在其他地方,它照常工作
猜你喜欢
  • 2020-10-30
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 2021-12-21
  • 1970-01-01
相关资源
最近更新 更多