如何使用Page Object验证可见性?

时间:2014-09-02 02:50:50

标签: ruby cucumber watir watir-webdriver page-object-gem

我几乎没有叠加和一些元素,我应该检查这些元素的可见性。这是否可以通过页面对象实现?我的意图是我的页面中有一个方法,它应该返回可见性为true或false。 这是我的页面文件

class HomePage   
include PageObject   
span(:text1, :text=>'text1') #this has 10+matches on my page

  def getAvailabilityOf text
    return send("#{text}.visible?")
  end    
end

这就是我从步骤定义中调用的方式。

Then(/^I should verify the visibility of "(.*?)" on images$/) do |text|
  puts on(HomePage).getAvailabilityOf text
end

以下是HTML。

<div class="box col2 review-box featured masonry-brick" style="height: 360px; background-image: url("https://stagingfiles.gamestakers.com/images/204/medium.jpg?1408991647"); background-repeat: no-repeat; position: absolute; top: 0px; left: 0px;">
    <a href="/interviews/jeremy-spillmann">
        <div class="gradient-fade">
            <div class="featured-box">Featured</div>
                <div class="title">
                    <span>text1</span>
                    <h2>Jeremy Spillmann</h2>
                </div>
        </div>
    </a>
</div>

以下是我得到的错误。

Then I should verify the visibility of "text1" on images
  undefined method `text1.visible?' for #<HomePage:0x35798b8> (NoMethodE rror)
  ./features/support/pages/HomePage_page.rb:67:in `getAvailabilityOf'
  ./features/step_definitions/homepage.rb:45:in `/^I should verify the visib ility of "(.*?)" on images$/'
  features\RINavigation.feature:6:in `Then I should verify the visibility of  "interview" on images'

我希望在控制台上打印是真还是假 简而言之,我期待页面对象的实现方式

  

@ browser.span(:text =&gt;&#34; text1&#34;)。可见?


建议我做一些工作

问候,
阿维纳什

2 个答案:

答案 0 :(得分:2)

问题在于:

return send("#{text}.visible?")

页面对象正在查找名为&#34; text1.visible?&#34;的单个方法,该方法不存在。 send用于进行单个方法调用。它不会评估字符串 - 即它不会确定您实际上想要调用方法然后使用返回值调用第二个方法。

您可以执行以下操作:

def getAvailabilityOf text
  return send("#{text}_element").visible?
end 

请注意send("text1")只会返回span元素的文本。 send("#{text}_element")返回页面对象元素,该元素具有visible?方法。

根据您将如何使用该方法,您可能实际上需要以下内容,这样可以查找文本而无需另外创建访问者。

def getAvailabilityOf text
  return span_element(:text => text).visible?
end 

答案 1 :(得分:2)

我注意到你的问题有些微妙。

您在示例代码的评论中指出:

span(:text1, :text=>'text1') #this has 10+matches on my page

您还添加了此要求:

  

我应该检查这些元素的可见性

Justin的答案正是您需要做的验证单个唯一元素的方法,但是当您有多个具有相同属性和文本的元素时,您要使用的定位器是span_elements,就像这样:

def getAvailabilityOf text
    return span_elements(:text => text)            
end

据推测,你会对此进行某种验证

Then /^I should verify the visibility of (.*?) on images$/ do |text|
    spans = getAvailabilityOf text
    spans.each do |s|
        #Your validation code goes here
    end
end

由于您不确切知道要验证哪个span元素,因此验证不是很精细,因此请务必考虑这一点。