我几乎没有叠加和一些元素,我应该检查这些元素的可见性。这是否可以通过页面对象实现?我的意图是我的页面中有一个方法,它应该返回可见性为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;)。可见?
建议我做一些工作
问候,
阿维纳什
答案 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元素,因此验证不是很精细,因此请务必考虑这一点。