断言与Ruby中的Selenium :: Webdriver :: Element对象

时间:2016-01-23 17:10:46

标签: ruby selenium selenium-webdriver cucumber

我对使用Selenium Webdriver(和Cucumber)非常陌生,但他们需要的技能我现在对我非常感兴趣的职位需要,所以I&I #39;我真的想知道他们的工作方式。

这是我目前正在尝试测试的功能部分(使用Selenium与Cucumber一起使用):

Background:
  Given I am on the Shoe Store's home page

Scenario: Display New Releases for January
  When I click on the link "January"
  Then I should see a small blurb for each shoe
  And I should see an image for each shoe
  And I should see a suggested price for each shoe

以下是相关步骤:

When(/^I click on the link "(.*?)"$/) do |month|
  step %[I click on link having text "#{month}"]
end

Then(/^I should see a small blurb for each shoe$/) do
  blurbs = $driver.find_elements(:class_name, 'shoe_description')
  if blurbs
    blurbs.each do |blurb|
      # Need to assert that blurb elements exist / have text
    end
  end
end

第二步是我无法找到明确的答案。如果我抛出一个binding.pry,我可以看到我有所有需要迭代的对象(blurb是一个webdriver对象,当我调用blurb.text时它会显示我想要的确切文本断言存在)。

看起来这应该很简单。

2 个答案:

答案 0 :(得分:0)

如果blurb没有文本,一个简单的解决方案就是失败。这将使你的模糊循环成为以下内容:

blurbs.each do |blurb|
  fail 'blurb contains no text' if blurb.text == ''
end

如果文本为空,这将使步骤和方案失败。您还可以通过将文本与正确的值进行比较来扩展此项以检查文本是否与预期文本匹配。

答案 1 :(得分:0)

一个简单的断言可以解决问题,你可以验证blurb.text不是空白的,如:

Then(/^I should see a small blurb for each shoe$/) do
  blurbs = $driver.find_elements(:class_name, 'shoe_description')
  if blurbs
    blurbs.each do |blurb|
      # Need to assert that blurb elements exist / have text
      blurb.text.should_not eq ""
    end
  end
end.

希望这会有所帮助:)