Class: Watir::ElementLocator
- Inherits:
-
Object
- Object
- Watir::ElementLocator
- Includes:
- Exception
- Defined in:
- lib/watir-webdriver/locators/element_locator.rb
Direct Known Subclasses
ButtonLocator, ChildCellLocator, ChildRowLocator, TextAreaLocator, TextFieldLocator
Constant Summary collapse
- WD_FINDERS =
[ :class, :class_name, :css, :id, :link, :link_text, :name, :partial_link_text, :tag_name, :xpath ]
- WILDCARD_ATTRIBUTE =
/^(aria|data)_(.+)$/
- CONVERTABLE_REGEXP =
Regular expressions that can be reliably converted to xpath ‘contains` expressions in order to optimize the locator.
%r{ \A ([^\[\]\\^$.|?*+()]*) # leading literal characters [^|]*? # do not try to convert expressions with alternates ([^\[\]\\^$.|?*+()]*) # trailing literal characters \z }x
Instance Method Summary collapse
-
#initialize(wd, selector, valid_attributes) ⇒ ElementLocator
constructor
A new instance of ElementLocator.
- #locate ⇒ Object
- #locate_all ⇒ Object
Constructor Details
#initialize(wd, selector, valid_attributes) ⇒ ElementLocator
Returns a new instance of ElementLocator.
31 32 33 34 35 |
# File 'lib/watir-webdriver/locators/element_locator.rb', line 31 def initialize(wd, selector, valid_attributes) @wd = wd @selector = selector.dup @valid_attributes = valid_attributes end |
Instance Method Details
#locate ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/watir-webdriver/locators/element_locator.rb', line 37 def locate e = by_id and return e # short-circuit if :id is given if @selector.size == 1 element = find_first_by_one else element = find_first_by_multiple end # This actually only applies when finding by xpath/css - browser.text_field(:xpath, "//input[@type='radio']") # We don't need to validate the element if we built the xpath ourselves. # It is also used to alter behavior of methods locating more than one type of element # (e.g. text_field locates both input and textarea) validate_element(element) if element rescue Selenium::WebDriver::Error::NoSuchElementError, Selenium::WebDriver::Error::StaleElementReferenceError nil end |
#locate_all ⇒ Object
55 56 57 58 59 60 61 |
# File 'lib/watir-webdriver/locators/element_locator.rb', line 55 def locate_all if @selector.size == 1 find_all_by_one else find_all_by_multiple end end |