您如何确定页面上是否存在元素?
该页面有一个链接:
<a class="twitter" href="h.....">twitter</a>
我的页面对象类是:
class Computer
include PageObject
link(:twitter_link, :class => "twitterrrrr")
def element_exists?
puts @browser.url
twitter_link?
end
end
该页面正在黄瓜步骤定义中使用:
Then /the elements should exist/ do
on(Computer).element_exists?
end
上面的:class故意是错误的,它实际上应该等于“ twitter”(就像上面的HTML一样),但是当我调用twitter_link?
该步骤时,该步骤仍然可以通过并且不会失败。
当我打电话.exists?
时twitter_link
测试失败,这是正确的:
def element_exists?
puts @browser.url
twitter_link.exists?
end
当我这样做时,也发生了预期的结果:
def element_exists?
puts @browser.url
twitter_link?.should == true
end
有人知道我twitter_link?
自己打电话时为什么会过去吗?根据page-objects gem文档,应该有一种开箱即用地检查是否存在的方法。这是指在页面类中检查是否存在,而不是在实际页面本身上进行检查吗?这就是它正在做的事情。
问题在于,twitter_link?
仅返回true或false。诸如RSpec和Cucumber之类的测试框架不会因为某些错误返回而失败。它们仅在断言失败或发生异常时失败。
换句话说,twitter_link?
您不仅需要调用该方法,还需要在一个断言中对其进行检查。例如:
# Examples using should syntax
page.twitter_link?.should == true
page.twitter_link_element.should exist
# Examples using expect syntax
expect(page.twitter_link?).to be_true
expect(page.twitter_link_element).to exist
如果要检查一系列元素,则可以创建元素名称的数组,然后遍历它们。
elements = [:twitter_link]
elements.each { |x| self.send( "#{x.to_s}?").should == true }
请注意,在创建元素数组时,您不想使用elements = [twitter_link]
。通过twitter_link
进入数组,它将调用该方法以实际尝试单击链接。这就是为什么您需要使用诸如字符串或符号之类的东西来代替的原因。存储页面对象元素也是一种选择:
elements = [twitter_link_element]
elements.each { |x| x.exists?.should == true }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句