Module: HtmlSelectorsHelpers

Defined in:
lib/testing/selectors.rb

Constant Summary collapse

Word =

Maps a name to a selector. Used primarily by the

When /^(.+) within (.+)$/ do |step, scope|

step definitions in web_steps.rb

/[a-z_\-]+/

Instance Method Summary collapse

Instance Method Details

#selector_for(locator) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/testing/selectors.rb', line 9

def selector_for(locator)
  case locator

  when /the page/
    "html > body"

  when /([a-z ]+) form/
    name = $1.gsub(' ', '_') #.gsub(/edit_/, '')
    "form.#{name}, form##{name}"

    #  I follow "View" within the "Blog" row
    #                         ^^^^^^^^^^^^^^
    #  selects the rows in which the given text shows up
  when /the "([^"]*)" row/
    having_text = %Q~contains( text(), "#{$1}")~
    row = "//table//tr[ descendant::*[#{having_text}] ]"
    [:xpath, row]

    #  I should see "Categories" within tabs
    #                                   ^^^^
  when /^(?:a?n )?(#{Word})$/
    ".#{$1}"

  when 'the title'
    "h1,h2,h3"

  when 'the top menu'
    "#top"

  when 'the main menu'
    "ul.main.menu"

  when /^the actions? menu$/
    "#actions"

  when /^the (#{Word})$/
    "##{$1}"

  # Add more mappings here.
  # Here is an example that pulls values out of the Regexp:
  #
  #  when /the (notice|error|info) flash/
  #    ".flash.#{$1}"
  
  # You can also return an array to use a different selector
  # type, like:
  #
  #  when /the header/
  #    [:xpath, "//header"]

  # This allows you to provide a quoted selector as the scope
  # for "within" steps as was previously the default for the
  # web steps:
  when /"(.+)"/
    $1

  else
    raise "Can't find mapping from \"#{locator}\" to a selector.\n" +
      "Now, go and add a mapping in #{__FILE__}"
  end
end