When you are using the #selector_for helper in Cucumber steps, as e.g. 
  Spreewald
  
    Show archive.org snapshot
  
 does, the following snippet will save you typing. It recognizes a prose BEM-style selector and maps it to the corresponding BEM class.
For a variation on this idea, see An auto-mapper for ARIA labels and BEM classes in Cucumber selectors.
Examples
"the main menu" -> '.main-menu'
"the item box's header" -> '.item-box--header'
Here are some examples of steps (using Spreewald, too):
Then I should see "Bruce Wayne" within the header's user name
# matches .header--user-name
When I click on the gallery image that is featured
# clicks on .gallery-image.is-featured
Code
Save this to features/support/selectors.rb, or update your file:
module HtmlSelectorsHelpers
  def selector_for(locator)
    case locator
    # Auto-mapper for BEM classes
    #
    # Usage examples:
    #   the main menu -> '.main-menu'
    #   the item box's header -> '.item-box--header'
    #   the slider's item that is current -> '.slider--item.is-current'
    when /^the (.+?)(?:'s (.+?)(?: that (.+))?)?$/
      selector = '.'
      selector << selectorify($1)
      selector << '--' << selectorify($2) if $2
      selector << '.' << selectorify($3) if $3
      selector
    
    else
      raise "Can't find mapping from \"#{locator}\" to a selector.\n" +
        "Now, go and add a mapping in #{__FILE__}"
    end
  end
  
  private
  def selectorify(string)
    string.gsub(/ /, '-')
  end
end
World(HtmlSelectorsHelpers)
Posted by Dominik Schöler to makandra dev (2015-02-20 16:51)