#!/usr/bin/env python # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import textwrap import httpretty from test.unit.helper.test_helper import ( android_w3c_driver, appium_command, get_httpretty_request_body ) class TestWebDriverExecuteDriver(object): @httpretty.activate def test_batch(self): driver = android_w3c_driver() httpretty.register_uri( httpretty.POST, appium_command('/session/1234567890/appium/execute_driver'), body='{"value": {"result":[' '{"element-6066-11e4-a52e-4f735466cecf":"39000000-0000-0000-D39A-000000000000",' '"ELEMENT":"39000000-0000-0000-D39A-000000000000"},' '{"y":237,"x":18,"width":67,"height":24}],"logs":{' '"error":[],"warn":["warning message"],"log":[]}}}' ) script = """ console.warn('warning message'); const element = await driver.findElement('accessibility id', 'Buttons'); const rect = await driver.getElementRect(element.ELEMENT); return [element, rect]; """ response = driver.execute_driver(script=textwrap.dedent(script)) # Python client convert an element item as WebElement in the result assert response.result[0].id == '39000000-0000-0000-D39A-000000000000' assert response.result[1]['y'] == 237 assert response.logs['warn'] == ['warning message'] d = get_httpretty_request_body(httpretty.last_request()) assert d['script'] == textwrap.dedent(script) assert d['type'] == 'webdriverio' assert 'timeout' not in d @httpretty.activate def test_batch_with_timeout(self): driver = android_w3c_driver() httpretty.register_uri( httpretty.POST, appium_command('/session/1234567890/appium/execute_driver'), body='{"value": {"result":[' '{"element-6066-11e4-a52e-4f735466cecf":"39000000-0000-0000-D39A-000000000000",' '"ELEMENT":"39000000-0000-0000-D39A-000000000000"},' '{"y":237,"x":18,"width":67,"height":24}],"logs":{' '"error":[],"warn":["warning message"],"log":[]}}}' ) script = """ console.warn('warning message'); const element = await driver.findElement('accessibility id', 'Buttons'); const rect = await driver.getElementRect(element.ELEMENT); return [element, rect]; """ response = driver.execute_driver(script=textwrap.dedent(script), timeout_ms=10000) assert response.result[0].id == '39000000-0000-0000-D39A-000000000000' assert response.result[1]['y'] == 237 assert response.logs['error'] == [] d = get_httpretty_request_body(httpretty.last_request()) assert d['script'] == textwrap.dedent(script) assert d['type'] == 'webdriverio' assert d['timeout'] == 10000