lib/appium_lib/ios/element/generic.rb in appium_lib-9.2.0 vs lib/appium_lib/ios/element/generic.rb in appium_lib-9.3.0
- old
+ new
@@ -3,68 +3,88 @@
# Find the first element containing value
# @param value [String] the value to search for
# @return [Element]
def find(value)
if automation_name_is_xcuitest?
- find_ele_by_attr_include '*', '*', value
+ raise_error_if_no_element finds(value).first
else
ele_by_json_visible_contains '*', value
end
end
# Find all elements containing value
# @param value [String] the value to search for
# @return [Array<Element>]
def finds(value)
if automation_name_is_xcuitest?
- find_eles_by_attr_include '*', '*', value
+ elements = find_eles_by_attr_include '*', '*', value
+ select_visible_elements elements
else
eles_by_json_visible_contains '*', value
end
end
# Find the first element exactly matching value
# @param value [String] the value to search for
# @return [Element]
def find_exact(value)
if automation_name_is_xcuitest?
- find_ele_by_attr '*', '*', value
+ raise_error_if_no_element finds_exact(value).first
else
ele_by_json_visible_exact '*', value
end
end
# Find all elements exactly matching value
# @param value [String] the value to search for
# @return [Array<Element>]
def finds_exact(value)
if automation_name_is_xcuitest?
- find_eles_by_attr '*', '*', value
+ elements = find_eles_by_attr '*', '*', value
+ select_visible_elements elements
else
eles_by_json_visible_exact '*', value
end
end
private
- def _raise_error_if_no_element(element)
- raise ::Selenium::WebDriver::Error::NoSuchElementError if element.nil?
+ def raise_error_if_no_element(element)
+ error_message = 'An element could not be located on the page using the given search parameters.'
+ raise(::Selenium::WebDriver::Error::NoSuchElementError, error_message) if element.nil?
element
end
- def _elements_include(elements, value)
+ # Return all elements include not displayed elements.
+ def elements_include(elements, value)
return [] if elements.empty?
elements.select do |element|
+ # `text` is equal to `value` if value is not `nil`
+ # `text` is equal to `name` if value is `nil`
name = element.name
- name.nil? ? false : name.downcase.include?(value.downcase)
+ text = element.value
+ name_result = name.nil? ? false : name.downcase.include?(value.downcase)
+ text_result = text.nil? ? false : text.downcase.include?(value.downcase)
+ name_result || text_result
end
end
- def _elements_exact(elements, value)
+ # Return all elements include not displayed elements.
+ def elements_exact(elements, value)
return [] if elements.empty?
elements.select do |element|
+ # `text` is equal to `value` if value is not `nil`
+ # `text` is equal to `name` if value is `nil`
name = element.name
- name.nil? ? false : name.casecmp(value).zero?
+ text = element.value
+ name_result = name.nil? ? false : name.casecmp(value).zero?
+ text_result = text.nil? ? false : text.casecmp(value).zero?
+ name_result || text_result
end
+ end
+
+ # Return visible elements.
+ def select_visible_elements(elements)
+ elements.select(&:displayed?)
end
end # module Ios
end # module Appium