【问题标题】:How to validate the visibility using Page Object?如何使用页面对象验证可见性?
【发布时间】:2014-09-02 02:50:50
【问题描述】:

我的覆盖层和一些元素很少,我应该检查这些元素的可见性。这可以通过页面对象来实现吗?我的意图是我的页面中有一个方法,它应该返回可见性真或假。 这是我的页面文件

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'

我希望在控制台上打印 true 或 false。
简而言之,我期待页面对象的实现方式

@browser.span(:text => "text1").visible?


建议我一些解决方法

问候,
阿维纳什

【问题讨论】:

  • @JustinKo 已按推荐编辑。

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


【解决方案1】:

问题在于:

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

页面对象正在寻找一个名为“text1.visible?”的方法,但该方法不存在。 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 

【讨论】:

  • 按我的需要完美工作
【解决方案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 元素,因此请务必考虑到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-12
    • 2011-08-01
    • 1970-01-01
    • 2022-08-18
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    相关资源
    最近更新 更多