class Selenium::WebDriver::Remote::Bridge::LocatorConverter

Constants

ESCAPE_CSS_REGEXP
UNICODE_CODE_POINT

Public Instance Methods

convert(how, what) click to toggle source

Converts a locator to a specification compatible one. @param [String, Symbol] how @param [String] what

# File lib/selenium/webdriver/remote/bridge/locator_converter.rb, line 34
def convert(how, what)
  how = SearchContext.finders[how.to_sym] || how

  case how
  when 'class name'
    how = 'css selector'
    what = ".#{escape_css(what.to_s)}"
  when 'id'
    how = 'css selector'
    what = "##{escape_css(what.to_s)}"
  when 'name'
    how = 'css selector'
    what = "*[name='#{escape_css(what.to_s)}']"
  end

  if what.is_a?(Hash)
    what = what.each_with_object({}) do |(h, w), hash|
      h, w = convert(h.to_s, w)
      hash[h] = w
    end
  end

  [how, what]
end

Private Instance Methods

escape_css(string) click to toggle source

Escapes invalid characters in CSS selector. @see mathiasbynens.be/notes/css-escapes

# File lib/selenium/webdriver/remote/bridge/locator_converter.rb, line 66
def escape_css(string)
  string = string.gsub(ESCAPE_CSS_REGEXP) { |match| "\\#{match}" }
  string = "\\#{UNICODE_CODE_POINT + Integer(string[0])} #{string[1..]}" if string[0]&.match?(/[[:digit:]]/)

  string
end