appium_lib 6.0.0 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +28 -0
  4. data/.travis.yml +10 -0
  5. data/Rakefile +9 -1
  6. data/android_tests/Gemfile +1 -1
  7. data/android_tests/Rakefile +20 -13
  8. data/android_tests/lib/android/specs/android/element/alert.rb +1 -1
  9. data/android_tests/lib/android/specs/android/element/button.rb +2 -2
  10. data/android_tests/lib/android/specs/android/element/generic.rb +1 -2
  11. data/android_tests/lib/android/specs/android/element/text.rb +2 -3
  12. data/android_tests/lib/android/specs/android/element/textfield.rb +2 -2
  13. data/android_tests/lib/android/specs/android/helper.rb +5 -3
  14. data/android_tests/lib/android/specs/android/patch.rb +2 -2
  15. data/android_tests/lib/android/specs/common/device.rb +16 -9
  16. data/android_tests/lib/android/specs/common/device_touchaction.rb +5 -2
  17. data/android_tests/lib/android/specs/common/element/window.rb +1 -1
  18. data/android_tests/lib/android/specs/common/helper.rb +14 -15
  19. data/android_tests/lib/android/specs/common/patch.rb +11 -9
  20. data/android_tests/lib/android/specs/common/version.rb +3 -3
  21. data/android_tests/lib/android/specs/common/web_context.rb +2 -3
  22. data/android_tests/lib/android/specs/driver.rb +38 -29
  23. data/android_tests/lib/android/specs/install.rb +3 -3
  24. data/android_tests/lib/format.rb +6 -8
  25. data/android_tests/lib/run.rb +25 -17
  26. data/android_tests/readme.md +4 -2
  27. data/appium_lib.gemspec +13 -11
  28. data/contributing.md +1 -1
  29. data/docs/android_docs.md +358 -274
  30. data/docs/ios_docs.md +333 -270
  31. data/docs/migration.md +10 -0
  32. data/docs_gen/make_docs.rb +3 -1
  33. data/ios_tests/Gemfile +1 -1
  34. data/ios_tests/Rakefile +17 -10
  35. data/ios_tests/appium.txt +1 -1
  36. data/ios_tests/lib/common.rb +8 -4
  37. data/ios_tests/lib/format.rb +5 -7
  38. data/ios_tests/lib/ios/specs/common/element/window.rb +1 -1
  39. data/ios_tests/lib/ios/specs/common/helper.rb +40 -39
  40. data/ios_tests/lib/ios/specs/common/patch.rb +15 -11
  41. data/ios_tests/lib/ios/specs/common/version.rb +3 -3
  42. data/ios_tests/lib/ios/specs/common/web_context.rb +1 -2
  43. data/ios_tests/lib/ios/specs/device/device.rb +7 -7
  44. data/ios_tests/lib/ios/specs/device/multi_touch.rb +6 -8
  45. data/ios_tests/lib/ios/specs/device/touch_actions.rb +12 -12
  46. data/ios_tests/lib/ios/specs/driver.rb +23 -22
  47. data/ios_tests/lib/ios/specs/ios/element/alert.rb +6 -2
  48. data/ios_tests/lib/ios/specs/ios/element/button.rb +2 -2
  49. data/ios_tests/lib/ios/specs/ios/element/generic.rb +1 -1
  50. data/ios_tests/lib/ios/specs/ios/element/text.rb +4 -1
  51. data/ios_tests/lib/ios/specs/ios/element/textfield.rb +6 -6
  52. data/ios_tests/lib/ios/specs/ios/helper.rb +5 -5
  53. data/ios_tests/lib/ios/specs/ios/patch.rb +2 -2
  54. data/ios_tests/lib/run.rb +1 -1
  55. data/ios_tests/readme.md +3 -3
  56. data/ios_tests/upload/sauce_storage.rb +8 -8
  57. data/ios_tests/upload/upload.rb +1 -1
  58. data/lib/appium_lib/android/client_xpath.rb +7 -7
  59. data/lib/appium_lib/android/element/alert.rb +2 -2
  60. data/lib/appium_lib/android/element/button.rb +16 -16
  61. data/lib/appium_lib/android/element/generic.rb +12 -13
  62. data/lib/appium_lib/android/element/text.rb +5 -5
  63. data/lib/appium_lib/android/element/textfield.rb +5 -5
  64. data/lib/appium_lib/android/helper.rb +82 -52
  65. data/lib/appium_lib/android/mobile_methods.rb +2 -2
  66. data/lib/appium_lib/android/patch.rb +3 -3
  67. data/lib/appium_lib/common/element/window.rb +1 -1
  68. data/lib/appium_lib/common/helper.rb +30 -35
  69. data/lib/appium_lib/common/patch.rb +22 -20
  70. data/lib/appium_lib/common/version.rb +3 -3
  71. data/lib/appium_lib/common/wait.rb +9 -10
  72. data/lib/appium_lib/device/device.rb +39 -33
  73. data/lib/appium_lib/device/multi_touch.rb +5 -7
  74. data/lib/appium_lib/device/touch_actions.rb +14 -15
  75. data/lib/appium_lib/driver.rb +97 -76
  76. data/lib/appium_lib/ios/element/alert.rb +1 -1
  77. data/lib/appium_lib/ios/element/button.rb +5 -5
  78. data/lib/appium_lib/ios/element/generic.rb +5 -6
  79. data/lib/appium_lib/ios/element/text.rb +5 -5
  80. data/lib/appium_lib/ios/element/textfield.rb +15 -15
  81. data/lib/appium_lib/ios/helper.rb +103 -90
  82. data/lib/appium_lib/ios/mobile_methods.rb +2 -2
  83. data/lib/appium_lib/ios/patch.rb +4 -4
  84. data/lib/appium_lib/logger.rb +7 -5
  85. data/lib/appium_lib/rails/duplicable.rb +3 -1
  86. data/readme.md +7 -1
  87. data/release_notes.md +152 -0
  88. metadata +28 -54
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5ee9efbaa5fd39661d0f04c19166a319ce4b35d4
4
- data.tar.gz: 64a681103bbef3049e6f5625eb33cb5261100897
3
+ metadata.gz: 153536702ca868791ca4c3172f16b930d353bf9c
4
+ data.tar.gz: 950e645ff01a061f5353655e26703e0d92f69086
5
5
  SHA512:
6
- metadata.gz: 49e11eb8cb100fcbf9b063e2068a53673aab09db120111716cab54f39ac9858bb340bd9fdba3552b4a052c57d42447443f1fd4d6e89c380defbedbc339b4b812
7
- data.tar.gz: c583f8ec7817165d3a2d1085356a6154b89db9c95280029c4a554d8b558c814c9c6b32f0e5eb9b44cbedb6f551f6963e65599f07b2af4220ab271c3b78e396d1
6
+ metadata.gz: 7be0973ccbe79716693065e2c4068d40f9f3811cc128af6fde909982a6e846f5855e4fe8e7ad3b6bbf6fd000b02ab874a0e795560d4b36c1f740072eb069ed9b
7
+ data.tar.gz: 6ec9bc433e1dbd7e6c4bc0b04772ef8f1e7dc384febf08b5b6b000a7cd9df9800ff5fc8eb2595499712bb9e0b0b1ab1b54ac0a5d2613e2232c890bc6f32e4595
@@ -0,0 +1,2 @@
1
+ *.gem
2
+ *.lock
@@ -0,0 +1,28 @@
1
+ # Custom config for RuboCop static code analysis
2
+ Metrics/LineLength:
3
+ Max: 125
4
+ Metrics/MethodLength:
5
+ Enabled: false
6
+ Metrics/ClassLength:
7
+ Enabled: false
8
+ Metrics/CyclomaticComplexity:
9
+ Enabled: false
10
+ Metrics/PerceivedComplexity:
11
+ Enabled: false
12
+ Metrics/AbcSize:
13
+ Enabled: false
14
+ Style/Documentation:
15
+ Enabled: false
16
+ Style/RegexpLiteral:
17
+ Enabled: false
18
+ Style/ConstantName:
19
+ Enabled: false
20
+ # blocked on https://github.com/appium/ruby_lib/issues/312
21
+ Style/GlobalVars:
22
+ Enabled: false
23
+ Style/AccessorMethodName:
24
+ Enabled: false
25
+ Style/DoubleNegation:
26
+ Enabled: false
27
+ Style/EachWithObject:
28
+ Enabled: false
@@ -0,0 +1,10 @@
1
+ sudo: false
2
+ cache: bundler
3
+ language: ruby
4
+ rvm:
5
+ - 2.2.2
6
+ before_install: gem update --remote bundler
7
+ install:
8
+ - bundle install --retry=3
9
+ script:
10
+ - bundle exec rake rubocop
data/Rakefile CHANGED
@@ -3,6 +3,7 @@ require 'rubygems'
3
3
  require 'rake'
4
4
  require 'date'
5
5
  require 'posix/spawn'
6
+ require 'rubocop/rake_task'
6
7
 
7
8
  # Defines gem name.
8
9
  def repo_name
@@ -226,4 +227,11 @@ end
226
227
  desc 'Remove non-ascii bytes'
227
228
  task :byte do
228
229
  remove_non_ascii
229
- end
230
+ end
231
+
232
+ desc 'Execute RuboCop static code analysis'
233
+ RuboCop::RakeTask.new(:rubocop) do |t|
234
+ t.patterns = %w(lib ios_tests android_tests)
235
+ t.options = %w(-D)
236
+ t.fail_on_error = true
237
+ end
@@ -1,2 +1,2 @@
1
1
  source 'https://rubygems.org'
2
- gemspec path: File.expand_path('../../', __FILE__) # __dir__ fails on 1.9
2
+ gemspec path: File.expand_path('../../', __FILE__) # __dir__ fails on 1.9
@@ -1,22 +1,22 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
+ require 'rubocop/rake_task'
3
4
 
4
- task :default => :android
5
+ task default: :android
5
6
 
6
7
  # Run sh and ignore exception
7
- def run_sh cmd
8
- begin
9
- sh cmd
10
- rescue
11
- end
8
+ # rubocop:disable Lint/HandleExceptions
9
+ def run_sh(cmd)
10
+ sh cmd
11
+ rescue
12
12
  end
13
13
 
14
14
  # Run cmd. On failure run install and try again.
15
- def bash cmd
15
+ def bash(cmd)
16
16
  sh cmd do |successful, result|
17
17
  # exitstatus 7 means bundle install failed
18
18
  # exitstatus 1 means the test failed
19
- if !successful && result.exitstatus === 7
19
+ if !successful && result.exitstatus == 7
20
20
  Rake::Task['install'].execute
21
21
  run_sh cmd
22
22
  end
@@ -33,10 +33,10 @@ end
33
33
 
34
34
  # rake android['single_text_name']
35
35
  # rake android
36
- def run_android test_file=nil
36
+ def run_android(test_file = nil)
37
37
  wait_for_valid_device
38
38
  cmd = 'bundle exec ruby ./lib/run.rb android'
39
- cmd += %Q( "#{test_file}") if test_file
39
+ cmd += %( "#{test_file}") if test_file
40
40
  bash cmd
41
41
  end
42
42
 
@@ -46,16 +46,23 @@ end
46
46
  # Run all tests with:
47
47
  # rake android
48
48
  desc 'Run the Android tests'
49
- task :android, :args, :test_file do |args, test_file|
49
+ task :android, :args, :test_file do |_args, test_file|
50
50
  run_android test_file[:args]
51
51
  end
52
52
 
53
53
  desc 'Run the Android tests without uninstalling'
54
- task :droid, :args, :test_file do |args, test_file|
54
+ task :droid, :args, :test_file do |_args, test_file|
55
55
  run_android test_file[:args]
56
56
  end
57
57
 
58
58
  desc 'Run bundle install'
59
59
  task :install do
60
60
  sh 'bundle install'
61
- end
61
+ end
62
+
63
+ desc 'Execute RuboCop static code analysis'
64
+ RuboCop::RakeTask.new(:rubocop) do |t|
65
+ t.patterns = %w(**/*.rb)
66
+ t.options = %w(-D)
67
+ t.fail_on_error = false
68
+ end
@@ -45,4 +45,4 @@ describe 'android/element/alert' do
45
45
  # nav to start activity
46
46
  2.times { back }
47
47
  end
48
- end
48
+ end
@@ -28,7 +28,7 @@ describe 'android/element/button' do
28
28
 
29
29
  t 'buttons' do
30
30
  exp = ['Zoom in', 'Modern zoom in', 'Thumbnail zoom']
31
- wait { buttons('zoom').map { |e| e.text }.must_equal exp }
31
+ wait { buttons('zoom').map(&:text).must_equal exp }
32
32
  wait { buttons.length.must_equal 6 }
33
33
  end
34
34
 
@@ -49,4 +49,4 @@ describe 'android/element/button' do
49
49
  end
50
50
 
51
51
  t { after_last }
52
- end
52
+ end
@@ -1,6 +1,5 @@
1
1
  # rake android['android/element/generic']
2
2
  describe 'android/element/generic' do
3
-
4
3
  def content
5
4
  'Content'
6
5
  end
@@ -45,4 +44,4 @@ describe 'android/element/generic' do
45
44
  # back to start activity
46
45
  back
47
46
  end
48
- end
47
+ end
@@ -1,7 +1,6 @@
1
1
  # rake android['android/element/text']
2
2
  describe 'android/element/text' do
3
-
4
- def must_raise_no_element &block
3
+ def must_raise_no_element(&block)
5
4
  proc { block.call }.must_raise Selenium::WebDriver::Error::NoSuchElementError
6
5
  end
7
6
 
@@ -33,4 +32,4 @@ describe 'android/element/text' do
33
32
  t 'texts_exact' do
34
33
  wait { texts_exact('API Demos').length.must_equal 1 }
35
34
  end
36
- end
35
+ end
@@ -1,5 +1,5 @@
1
1
  describe 'android/element/textfield' do
2
- def must_raise_no_element &block
2
+ def must_raise_no_element(&block)
3
3
  proc { block.call }.must_raise Selenium::WebDriver::Error::NoSuchElementError
4
4
  end
5
5
 
@@ -59,4 +59,4 @@ describe 'android/element/textfield' do
59
59
  end
60
60
 
61
61
  t { after_last }
62
- end
62
+ end
@@ -1,3 +1,5 @@
1
+ # rubocop:disable Metrics/LineLength
2
+
1
3
  # rake android[android/helper]
2
4
  describe 'android/helper' do
3
5
  t 'tags' do
@@ -84,8 +86,8 @@ describe 'android/helper' do
84
86
  ['mFocusedApp=AppWindowToken{b40af858 token=Token{b3e2ce38 ActivityRecord{b3eb47d8 u0 io.appium.android.apis/.ApiDemos t6}}}',
85
87
  'io.appium.android.apis',
86
88
  '.ApiDemos'
87
- # api 16 selendroid
88
89
  ],
90
+ # api 16 selendroid
89
91
  ['mFocusedApp=AppWindowToken{4157a2c8 token=Token{41582628 ActivityRecord{415821f0 com.android.launcher/com.android.launcher2.Launcher}}}',
90
92
  'com.android.launcher',
91
93
  'com.android.launcher2.Launcher'
@@ -94,10 +96,10 @@ describe 'android/helper' do
94
96
 
95
97
  expected.each do |line, package, activity|
96
98
  parsed = _parse_current_app_line(line)
97
- raise "failed to parse #{line}" if parsed.nil?
99
+ fail "failed to parse #{line}" if parsed.nil?
98
100
  parsed.package.must_equal package
99
101
  parsed.activity.must_equal activity
100
102
  parsed.am_start.must_equal package + '/' + activity
101
103
  end
102
104
  end
103
- end
105
+ end
@@ -9,7 +9,7 @@ describe 'android/patch.rb' do
9
9
  wait { first_textfield.type 'ok' }
10
10
  wait { first_textfield.text.must_equal 'ok' }
11
11
 
12
- # todo: how to invoke random am start commands?
12
+ # TODO: how to invoke random am start commands?
13
13
  # nav to start activity
14
14
  # io.appium.android.apis/.ApiDemos
15
15
 
@@ -24,4 +24,4 @@ describe 'android/patch.rb' do
24
24
  back
25
25
  wait { find('app') }
26
26
  end
27
- end
27
+ end
@@ -2,13 +2,13 @@
2
2
  describe 'common/device' do
3
3
  # Not yet implemented
4
4
  t 'shake' do
5
- # todo: write test
5
+ # TODO: write test
6
6
  end
7
7
 
8
8
  t 'remove & install' do
9
- # todo: write test
10
- #remove 'com.example.android.apis'
11
- #install ENV['APP_PATH']
9
+ # TODO: write test
10
+ # remove 'com.example.android.apis'
11
+ # install ENV['APP_PATH']
12
12
  end
13
13
 
14
14
  t 'background_app' do
@@ -24,8 +24,8 @@ describe 'common/device' do
24
24
  wait { current_activity.include?('Settings').must_equal true }
25
25
  end
26
26
 
27
- t 'is_installed' do
28
- wait { is_installed?('fake_app').must_equal false }
27
+ t 'installed' do
28
+ wait { app_installed?('fake_app').must_equal false }
29
29
  end
30
30
 
31
31
  t 'reset' do
@@ -33,6 +33,13 @@ describe 'common/device' do
33
33
  wait { text(1).text.must_equal 'API Demos' }
34
34
  end
35
35
 
36
+ t 'device_locked?' do
37
+ lock 5
38
+ wait { device_locked?.must_equal true }
39
+ press_keycode 82
40
+ wait { device_locked?.must_equal false }
41
+ end
42
+
36
43
  t 'close & launch' do
37
44
  close_app
38
45
  launch_app
@@ -43,10 +50,10 @@ describe 'common/device' do
43
50
  end
44
51
 
45
52
  t 'app_strings' do
46
- wait_true { app_strings.has_key? 'activity_save_restore' }
53
+ wait_true { app_strings.key? 'activity_save_restore' }
47
54
  end
48
55
 
49
- def must_return_element element
56
+ def must_return_element(element)
50
57
  element.class.must_equal Selenium::WebDriver::Element
51
58
  end
52
59
 
@@ -103,4 +110,4 @@ describe 'common/device' do
103
110
  data = pull_folder '/data/local/tmp'
104
111
  data.length.must_be :>, 100
105
112
  end
106
- end
113
+ end
@@ -3,7 +3,7 @@ describe 'common/device_touchaction' do
3
3
  t 'action_chain' do
4
4
  wait do
5
5
  e = find_element(:name, 'Accessibility')
6
- Appium::TouchAction.new.press(:element => e, x: 0.5, y: 0.5).release(:element => e).perform
6
+ Appium::TouchAction.new.press(element: e, x: 0.5, y: 0.5).release(element: e).perform
7
7
  end
8
8
  wait { find_element(:name, 'Custom View') }
9
9
  back
@@ -13,6 +13,7 @@ describe 'common/device_touchaction' do
13
13
  t 'swipe' do
14
14
  wait { Appium::TouchAction.new.swipe(start_x: 0.75, start_y: 0.25, end_x: 0.75, end_y: 0.5, duration: 1.5).perform }
15
15
  wait { !exists { text_exact 'NFC' } }
16
+ wait { text_exact 'Bouncing Balls' }
16
17
  back
17
18
  wait { text_exact 'NFC' }
18
19
  end
@@ -25,5 +26,7 @@ describe 'common/device_touchaction' do
25
26
  zoom 200
26
27
  pinch 75
27
28
  end
29
+ 2.times { back }
30
+ wait { text_exact 'NFC' }
28
31
  end
29
- end
32
+ end
@@ -6,4 +6,4 @@ describe 'common/element/window' do
6
6
  size.height.class.must_equal Fixnum
7
7
  end
8
8
  end
9
- end
9
+ end
@@ -1,12 +1,10 @@
1
1
  describe 'common/helper' do
2
2
  wait_opts = { timeout: 0.2, interval: 0.2 } # max_wait, interval
3
3
 
4
- =begin
5
- There's no `must_not_raise` as the opposite of must_raise
4
+ # There's no `must_not_raise` as the opposite of must_raise
6
5
 
7
- By default code is expected to not raise exceptions.
8
- must_not_raise is a no-op.
9
- =end
6
+ # By default code is expected to not raise exceptions.
7
+ # must_not_raise is a no-op.
10
8
 
11
9
  # wait is a success unless an error is raised
12
10
  # max_wait=0 is infinity to use 0.1
@@ -17,12 +15,12 @@ must_not_raise is a no-op.
17
15
  wait(wait_opts) { nil }
18
16
 
19
17
  # failed wait should error
20
- proc { wait(wait_opts) { raise } }.must_raise Selenium::WebDriver::Error::TimeOutError
18
+ proc { wait(wait_opts) { fail } }.must_raise Selenium::WebDriver::Error::TimeOutError
21
19
 
22
20
  # regular rescue will not handle exceptions outside of StandardError hierarchy
23
21
  # must rescue Exception explicitly to rescue everything
24
- proc { wait(wait_opts) { raise NoMemoryError } }.must_raise Selenium::WebDriver::Error::TimeOutError
25
- proc { wait(timeout: 0.2, interval: 0.0) { raise NoMemoryError } }.must_raise Selenium::WebDriver::Error::TimeOutError
22
+ proc { wait(wait_opts) { fail NoMemoryError } }.must_raise Selenium::WebDriver::Error::TimeOutError
23
+ proc { wait(timeout: 0.2, interval: 0.0) { fail NoMemoryError } }.must_raise Selenium::WebDriver::Error::TimeOutError
26
24
 
27
25
  # invalid keys are rejected
28
26
  proc { wait(invalidkey: 2) { true } }.must_raise RuntimeError
@@ -33,8 +31,8 @@ must_not_raise is a no-op.
33
31
  ignore { true }
34
32
  ignore { false }
35
33
  ignore { nil }
36
- ignore { raise }
37
- ignore { raise NoMemoryError }
34
+ ignore { fail }
35
+ ignore { fail NoMemoryError }
38
36
  end
39
37
 
40
38
  # wait_true is a success unless the value is not true
@@ -47,12 +45,13 @@ must_not_raise is a no-op.
47
45
  proc { wait_true(wait_opts) { nil } }.must_raise Selenium::WebDriver::Error::TimeOutError
48
46
 
49
47
  # raise should error
50
- proc { wait_true(wait_opts) { raise } }.must_raise Selenium::WebDriver::Error::TimeOutError
48
+ proc { wait_true(wait_opts) { fail } }.must_raise Selenium::WebDriver::Error::TimeOutError
51
49
 
52
50
  # regular rescue will not handle exceptions outside of StandardError hierarchy
53
51
  # must rescue Exception explicitly to rescue everything
54
- proc { wait_true(wait_opts) { raise NoMemoryError } }.must_raise Selenium::WebDriver::Error::TimeOutError
55
- proc { wait_true(timeout: 0.2, interval: 0.0) { raise NoMemoryError } }.must_raise Selenium::WebDriver::Error::TimeOutError
52
+ proc { wait_true(wait_opts) { fail NoMemoryError } }.must_raise Selenium::WebDriver::Error::TimeOutError
53
+ proc { wait_true(timeout: 0.2, interval: 0.0) { fail NoMemoryError } }
54
+ .must_raise Selenium::WebDriver::Error::TimeOutError
56
55
 
57
56
  # invalid keys are rejected
58
57
  proc { wait_true(invalidkey: 2) { true } }.must_raise RuntimeError
@@ -72,7 +71,7 @@ must_not_raise is a no-op.
72
71
  end
73
72
 
74
73
  t 'session_id' do
75
- wait { session_id.must_match /\h{8}-\h{4}-\h{4}-\h{4}-\h{12}/ }
74
+ wait { session_id.must_match(/\h{8}-\h{4}-\h{4}-\h{4}-\h{12}/) }
76
75
  end
77
76
 
78
77
  t 'xpath' do
@@ -110,4 +109,4 @@ must_not_raise is a no-op.
110
109
  get_source.class.must_equal String
111
110
  end
112
111
  end
113
- end
112
+ end
@@ -1,11 +1,13 @@
1
- =begin
2
- Skip:
3
- status # status patches are already tested in driver.rb
4
- raw_execute # debug output for Pry
5
- =end
1
+ # rubocop:disable Lint/RescueException
2
+ # rubocop:disable Metrics/LineLength
3
+
4
+ # Skip:
5
+ # status # status patches are already tested in driver.rb
6
+ # raw_execute # debug output for Pry
7
+
6
8
  describe 'common/patch' do
7
- # Attributes are busted in Android.
8
- # Blocked on https://github.com/appium/appium/issues/628
9
+ # Attributes are busted in Android.
10
+ # Blocked on https://github.com/appium/appium/issues/628
9
11
  describe 'Selenium::WebDriver::Element methods' do
10
12
  # Android supports exactly two string Attributes
11
13
  # .name and .text
@@ -35,7 +37,7 @@ describe 'common/patch' do
35
37
  begin
36
38
  set_wait 0
37
39
  find_element(:id, 'ok')
38
- rescue Exception => e;
40
+ rescue Exception => e
39
41
  value = e.message
40
42
  ensure
41
43
  set_wait 30
@@ -66,4 +68,4 @@ describe 'common/patch' do
66
68
  end
67
69
  end
68
70
  end
69
- end
71
+ end