2016-07-25 6 views
7

Кто-нибудь знает, как увеличить элемент в android через appium python client?Действия масштабирования в android с помощью appium-python-client

настоящее время я использую

self.driver.zoom(self.element, percent) но это дает ошибку

self.driver.zoom(self.element, percent) 
File "/usr/local/lib/python2.7/site-packages/appium/webdriver/webdriver.py", line 308, in zoom 
self.execute_script('mobile: pinchOpen', opts) 
File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 461, in execute_script 
{'script': script, 'args':converted_args})['value'] 
File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 233, in execute 
self.error_handler.check_response(response) 
File "/usr/local/lib/python2.7/site-packages/appium/webdriver/errorhandler.py", line 29, in check_response 
raise wde 
WebDriverException: Message: Method has not yet been implemented 

Я также попытался через MultiAction.

loc = self.element.location 
print loc 
xx, yy = loc["x"], loc["y"] 
xx=700 
action1 = TouchAction(self.driver) 
action1.long_press(x=xx, y=yy).move_to(x=0, y=1000).release() 
action2 = TouchAction(self.driver) 
action2.long_press(x=xx, y=yy).move_to(x=0, y=-1000).release() 
m_action = MultiAction(self.driver) 
m_action.add(action1, action2) 
m_action.perform() 

Но опять-таки это не выполняет zoom.Instead она прокручивается вниз list.Does кого есть какие-либо идеи о том, что здесь не так.

Appium Logs

[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {"cmd":"action","action":"element:getLocation","params":{"elementId":"83"}} 
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command of type ACTION 
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command action: getLocation 
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Returning result: {"status":0,"value":{"x":0,"y":1225}} 
[debug] [AndroidBootstrap] Received command result from bootstrap 
[MJSONWP] Responding to client with driver.getLocation() result: {"x":0,"y":1225} 
[HTTP] <-- GET /wd/hub/session/c1a4d17f-0dc6-4445-bfad-776ec65bddb5/element/83/location 200 26 ms - 88 
[HTTP] --> POST /wd/hub/session/c1a4d17f-0dc6-4445-bfad-776ec65bddb5/touch/multi/perform {"sessionId":"c1a4d17f-0dc6-4445-bfad-776ec65bddb5","actions":[[{"action":"longPress","options":{"y":1225,"x":700,"duration":1000}},{"action":"moveTo","options":{"y":1000,"x":0}},{"action":"release","options":{}}],[{"action":"longPress","options":{"y":1225,"x":700,"duration":1000}},{"action":"moveTo","options":{"y":-1000,"x":0}},{"action":"release","options":{}}]]} 
[MJSONWP] Calling AppiumDriver.performMultiAction() with args: [[[{"action":"longPress","o... 
[debug] [AndroidBootstrap] Sending command to android: {"cmd":"action","action":"performMultiPointerGesture","params":{"actions":[[{"action":"longPress","time":0.005,"touch":{"y":1225,"x":700,"duration":1000}},{"action":"moveTo","time":0.01,"touch":{"y":2225,"x":700}}],[{"action":"longPress","time":0.005,"touch":{"y":1225,"x":700,"duration":1000}},{"action":"moveTo","time":0.01,"touch":{"y":225,"x":700}}]]}} 
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {"cmd":"action","action":"performMultiPointerGesture","params":{"actions":[[{"action":"longPress","time":0.005,"touch":{"y":1225,"x":700,"duration":1000}},{"action":"moveTo","time":0.01,"touch":{"y":2225,"x":700}}],[{"action":"longPress","time":0.005,"touch":{"y":1225,"x":700,"duration":1000}},{"action":"moveTo","time":0.01,"touch":{"y":225,"x":700}}]]}} 
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command of type ACTION 
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command action: performMultiPointerGesture 
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Returning result: {"status":0,"value":"OK"} 
[debug] [AndroidBootstrap] Received command result from bootstrap 
[MJSONWP] Responding to client with driver.performMultiAction() result: "OK" 
[HTTP] <-- POST /wd/hub/session/c1a4d17f-0dc6-4445-bfad-776ec65bddb5/touch/multi/perform 200 133 ms - 76 
[HTTP] --> DELETE /wd/hub/session/c1a4d17f-0dc6-4445-bfad-776ec65bddb5 {} 

ответ

4

Попытка MultiAction выглядит хорошо, но после тестирования немного на родное приложение камеры моего телефона, я был в состоянии получить хороший жест увеличения путем добавления 500мс ожидания() после MoveTo() :

# Zoom 
action1.long_press(x=xx, y=yy).move_to(x=0, y=50).wait(500).release() 
action2.long_press(x=xx, y=yy).move_to(x=0, y=-50).wait(500).release() 
m_action.add(action1, action2) 

# Pinch 
action3.long_press(x=xx, y=yy-50).move_to(x=0, y=50).wait(500).release() 
action4.long_press(x=xx, y=yy+50).move_to(x=0, y=-50).wait(500).release() 
m_action2.add(action3, action4) 

m_action.perform() 
m_action2.perform() 

Это привело к хорошему и медленному приближению к приложению камеры. Без ожидания() жесты были слишком быстрыми и на самом деле не сильно помогли. Он упоминается в документации Appium по адресу Github, что ожидание() может быть использовано для управления синхронизацией жеста: https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/touch-actions.md

Я установил xx и yy к середине экрана в моем приложении камеры с:

xx = self.driver.get_window_size()['width']/2 
yy = self.driver.get_window_size()['height']/2 

Пожалуйста, помните, что координаты никогда не должны выходить за пределы экрана устройства, поэтому проверка границ экрана может быть полезна, если вы хотите сделать это в функцию повторного использования.

Я также не мог использовать жесты MultiAction при автоматизации Chrome (даже при изменении контекста NATIVE_APP. Жесты не влияли.), Поэтому вполне возможно, что использование MultiActions в сценариях WebView не поддерживается.

+1

Я думаю, что в большинстве случаев 500 мс будут работать нормально. Я добавил ссылку на документы, где упоминается 'wait', чтобы иметь в виду именно для целей выбора жестов. Не могли бы вы пометить мой ответ, если он вам помог? – Domestus

+0

Добавлен щепотный жест ответа. Казалось, что он работает с противоположным жестом, регулируя начальную координату и направление. – Domestus

 Смежные вопросы

  • Нет связанных вопросов^_^