@@ -129,6 +129,52 @@ def test_backdoor
129
129
'No public method noMethod definded on class io.appium.android.apis.view.TextSwitcher1'
130
130
end
131
131
132
+ # @since Appium 1.12.0 (Espresso driver 1.8.0~)
133
+ def test_webatom
134
+ skip unless @core . automation_name == :espresso
135
+
136
+ caps = Caps . android 'io.appium.android.apis.view.WebView1'
137
+ @core = ::Appium ::Core . for ( caps )
138
+ @driver = @core . start_driver
139
+
140
+ el = @driver . find_element :id , 'wv1'
141
+
142
+ @driver . execute_script 'mobile: webAtoms' , {
143
+ webviewElement : el . ref ,
144
+ forceJavascriptEnabled : true ,
145
+ methodChain : [
146
+ { name : 'withElement' , atom : { name : 'findElement' , locator : { using : 'ID' , value : 'i_am_a_textbox' } } } ,
147
+ { name : 'perform' , atom : { name : 'webKeys' , args : 'Hello world' } } ,
148
+ { name : 'withElement' , atom : { name : 'findElement' , locator : { using : 'ID' , value : 'i am a link' } } } ,
149
+ { name : 'perform' , atom : 'webClick' }
150
+ ]
151
+ }
152
+
153
+ # Can use `atom` defined in https://developer.android.com/reference/android/support/test/espresso/web/webdriver/DriverAtoms
154
+ # Locator: https://developer.android.com/reference/androidx/test/espresso/web/webdriver/Locator
155
+ @driver . execute_script 'mobile: webAtoms' , {
156
+ webviewElement : el . ref ,
157
+ forceJavascriptEnabled : true ,
158
+ methodChain : [ {
159
+ name : 'withElement' ,
160
+ atom : { name : 'findElement' , locator : { using : 'XPATH' , value : '/html/body' } }
161
+ } ]
162
+ }
163
+
164
+ # Raises an error if the method cannot find any DriverAtoms or necessary arguments
165
+ error = assert_raises ::Selenium ::WebDriver ::Error ::WebDriverError do
166
+ @driver . execute_script 'mobile: webAtoms' , {
167
+ webviewElement : el . ref ,
168
+ forceJavascriptEnabled : true ,
169
+ methodChain : [ {
170
+ name : 'withElement' ,
171
+ atom : { name : 'findElement' , locator : { using : 'ERROR' , value : '/html/body' } }
172
+ } ]
173
+ }
174
+ end
175
+ assert error . message . include? "Cannot execute method on 'androidx.test.espresso.web.webdriver.DriverAtoms'."
176
+ end
177
+
132
178
private
133
179
134
180
def assert_mobile_command_error ( command , args , expected_message )
0 commit comments