Skip to content

Commit 67114d1

Browse files
authored
Improve performance for button/s and text/s (#442)
* don't use xpath for button and static text * ignore down or up cases
1 parent 2d1f30e commit 67114d1

File tree

4 files changed

+36
-9
lines changed

4 files changed

+36
-9
lines changed

ios_tests/lib/ios/specs/ios/element/button.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def gray
2929

3030
t 'buttons' do
3131
exp = ['Back', 'Back', 'Gray', 'Right pointing arrow']
32-
exp.concat ['Custom Text', 'More info', 'More info', 'More info', 'Add contact'] if UI::Inventory.xcuitest?
32+
exp.concat ['Add contact'] if UI::Inventory.xcuitest?
3333

3434
target_buttons = buttons('a')
3535
target_buttons.map(&:name).must_equal exp

lib/appium_lib/ios/element/button.rb

+6-4
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def button(value)
1818
return ele_index button_class, value if value.is_a? Numeric
1919

2020
if automation_name_is_xcuitest?
21-
find_ele_by_attr_include button_class, '*', value
21+
_raise_error_if_no_element buttons(value).first
2222
else
2323
ele_by_json_visible_contains button_class, value
2424
end
@@ -32,7 +32,8 @@ def buttons(value = false)
3232
return tags button_class unless value
3333

3434
if automation_name_is_xcuitest?
35-
find_eles_by_attr_include button_class, '*', value
35+
elements = tags button_class
36+
_elements_include elements, value
3637
else
3738
eles_by_json_visible_contains button_class, value
3839
end
@@ -57,7 +58,7 @@ def last_button
5758
# @return [UIAButton|XCUIElementTypeButton]
5859
def button_exact(value)
5960
if automation_name_is_xcuitest?
60-
find_ele_by_attr button_class, '*', value
61+
_raise_error_if_no_element buttons_exact(value).first
6162
else
6263
ele_by_json_visible_exact button_class, value
6364
end
@@ -68,7 +69,8 @@ def button_exact(value)
6869
# @return [Array<UIAButton|XCUIElementTypeButton>]
6970
def buttons_exact(value)
7071
if automation_name_is_xcuitest?
71-
find_eles_by_attr button_class, '*', value
72+
elements = tags button_class
73+
_elements_exact elements, value
7274
else
7375
eles_by_json_visible_exact button_class, value
7476
end

lib/appium_lib/ios/element/generic.rb

+23
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,28 @@ def finds_exact(value)
4343
eles_by_json_visible_exact '*', value
4444
end
4545
end
46+
47+
private
48+
49+
def _raise_error_if_no_element(element)
50+
raise ::Selenium::WebDriver::Error::NoSuchElementError if element.nil?
51+
element
52+
end
53+
54+
def _elements_include(elements, value)
55+
return [] if elements.empty?
56+
elements.select do |element|
57+
name = element.name
58+
name.nil? ? false : name.downcase.include?(value.downcase)
59+
end
60+
end
61+
62+
def _elements_exact(elements, value)
63+
return [] if elements.empty?
64+
elements.select do |element|
65+
name = element.name
66+
name.nil? ? false : name.casecmp(value).zero?
67+
end
68+
end
4669
end # module Ios
4770
end # module Appium

lib/appium_lib/ios/element/text.rb

+6-4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def text(value)
1717
return ele_index static_text_class, value if value.is_a? Numeric
1818

1919
if automation_name_is_xcuitest?
20-
find_ele_by_attr_include static_text_class, '*', value
20+
_raise_error_if_no_element texts(value).first
2121
else
2222
ele_by_json_visible_contains static_text_class, value
2323
end
@@ -31,7 +31,8 @@ def texts(value = false)
3131
return tags static_text_class unless value
3232

3333
if automation_name_is_xcuitest?
34-
find_eles_by_attr_include static_text_class, '*', value
34+
elements = tags static_text_class
35+
_elements_include elements, value
3536
else
3637
eles_by_json_visible_contains static_text_class, value
3738
end
@@ -54,7 +55,7 @@ def last_text
5455
# @return [UIAStaticText|XCUIElementTypeStaticText]
5556
def text_exact(value)
5657
if automation_name_is_xcuitest?
57-
find_ele_by_attr static_text_class, '*', value
58+
_raise_error_if_no_element texts_exact(value).first
5859
else
5960
ele_by_json_visible_exact static_text_class, value
6061
end
@@ -65,7 +66,8 @@ def text_exact(value)
6566
# @return [Array<UIAStaticText|XCUIElementTypeStaticText>]
6667
def texts_exact(value)
6768
if automation_name_is_xcuitest?
68-
find_eles_by_attr static_text_class, '*', value
69+
elements = tags static_text_class
70+
_elements_exact elements, value
6971
else
7072
eles_by_json_visible_exact static_text_class, value
7173
end

0 commit comments

Comments
 (0)