Ruby 为什么在使用该元素时测试通过?检查元素';谁的存在?

Ruby 为什么在使用该元素时测试通过?检查元素';谁的存在?,ruby,cucumber,watir-webdriver,page-object-gem,Ruby,Cucumber,Watir Webdriver,Page Object Gem,如何确定页面上是否存在元素 该页面有一个链接: <a class="twitter" href="h.....">twitter</a> 此页面正在Cucumber步骤定义中使用: Then /the elements should exist/ do on(Computer).element_exists? end 上面的:类是故意错误的,它实际上应该等于“twitter”(如上面的HTML),但是当我调用twitter\u link?时,这一步仍然通过,并且没

如何确定页面上是否存在元素

该页面有一个链接:

<a class="twitter" href="h.....">twitter</a>
此页面正在Cucumber步骤定义中使用:

Then /the elements should exist/ do
  on(Computer).element_exists?
end
上面的:类是故意错误的,它实际上应该等于“twitter”(如上面的HTML),但是当我调用
twitter\u link?
时,这一步仍然通过,并且没有失败

当我调用
twitter\u链接上的
exists?
时,测试失败,这是正确的:

def element_exists?
  puts @browser.url
  twitter_link.exists?
end  
当我这样做时,预期的结果也出现了:

def element_exists?
  puts @browser.url
  twitter_link?.should == true
end 

有人知道为什么我单独调用
twitter\u link?
时它会通过吗?根据页面对象gem docs,应该有一种方法来检查开箱即用的存在性。这是指检查页面类中是否存在,而不是检查实际页面本身吗?这就是它所做的。

问题在于
twitter\u link?
只返回true或false。像RSpec和Cucumber这样的测试框架不会因为返回了false而失败。只有当断言失败或发生异常时,它们才会失败

换句话说,不只是调用
twitter\u 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\u link]
。通过在数组中设置
twitter\u链接
,它将调用该方法来实际尝试单击该链接。这就是为什么需要使用字符串或符号之类的东西。存储页面对象元素也是一个选项:

elements = [twitter_link_element]
elements.each { |x| x.exists?.should == true }

您确定在测试中正确使用了该方法吗
twitter\u链接?
只返回
true
false
。像RSpec和Cucumber这样的测试框架不会因为
false
而失败。听起来你正在做一个
twitter\u链接。存在吗?
,该链接将失败,因为测试实际上正在尝试单击该链接。如果您使用
twitter\u-link\u元素。是否存在?
您将获得与
twitter\u-link?
相同的结果。您是正确的,那么如何正确地检查元素是否存在并在页面上可见?(使用Watir WEDBDRIVE)我不想单击像这样的链接。存在吗?正在做,但只是想确保它是可见的。贾斯汀,只是把方法放在问题中。Cucumber和使用页面对象gem,在我的步骤defs:on(UngatedPage)。元素存在?这给了我我想要的结果:twitter\u link?.should==trueThis为我工作:元素=[:twitter\u link]元素。每个{x| self.send({x.to\u}?).should==true}
elements = [twitter_link_element]
elements.each { |x| x.exists?.should == true }