appum+python自動化64-Uiatomart 2を使ってdriver.keyevent()を実行します.
5488 ワード
前言
python V 3.6 selenium V 2.3.6 Apium-Python-Client V 0.26 appum server V 1.7.1 Uiatomart 2
問題にぶつかる
presskeycodeとkeyevent
press_を見るkeycodeとkeyeventのソースコードは、この2つの方法には違いがないことが分かりました.keyeventの上にはNeed for Selendroidという備考があります.古いバージョンの中の機能かもしれません.新バージョンはUiatomart 2でpress_を使用できます.keycodeの方法 driver.press_keycode(4)菗送keycode,機能:ボタンUiatomart 2使用keyeventイベントエラー driver.keyevent(4)菗送keycode、機能:ボタン、press_keycodeの違いはありません.Uiatomart 2は正常に を使います. driver.hide_keyboard()噫iOSはkey_を使用します.name隠し、Androidはパラメータを使わない、機能:隠しキーボード driver.long_presskeycode(4)菗送keycode、機能:長ボタン appumQQ交流群:779429633
'automationName': 'Uiautomator2'
パラメータを追加していません.Uiatomatorを使用すると、driver.keyevent()方法が正常に使用できます.Uiatomart 2を使用すると、driver.keyevent()メソッドエラー:selenium.co.mmon.exceptions.WebDriver Exception:Message:An unknown server-side error cred while processing the command.Original error:Could not proxy.Proxy error:Could profied noxymorever.404python V 3.6 selenium V 2.3.6 Apium-Python-Client V 0.26 appum server V 1.7.1 Uiatomart 2
問題にぶつかる
'automationName': 'Uiautomator2'
パラメータを追加していない場合、Uiatomatorを使用すると、driver.keyevent()の方法が正常に使用できます.Uiatomart 2を使用すると、driver.keyevent()の方法でエラーが発生します.from appium import webdriver
import time
desired_caps = {
"platformName": "Android",
"deviceName": "emulator-5554", #
"platformVersion": "5.1.1", # android
"appPackage": "com.yipiao", # app
"appActivity": "com.yipiao.activity.LaunchActivity", # launch Activity
"noReset": True, #
'automationName': 'Uiautomator2' # toast Uiautomator2
}
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
time.sleep(10) # ,
# Uiautomator2 keyevent
driver.keyevent(4) # back code 4
keyeventメソッドを呼び出して、backイベントを実行します.対応するコードの値は4です.エラーが発生しました.Traceback (most recent call last):
File "D:/apptest/ke10/t_start.py", line 25, in
driver.keyevent(4) # back code 4
File "E:\python36\lib\site-packages\appium\webdriver\webdriver.py", line 411, in keyevent
self.execute(Command.KEY_EVENT, data)
File "E:\python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
self.error_handler.check_response(response)
File "E:\python36\lib\site-packages\appium\webdriver\errorhandler.py", line 29, in check_response
raise wde
File "E:\python36\lib\site-packages\appium\webdriver\errorhandler.py", line 24, in check_response
super(MobileErrorHandler, self).check_response(response)
File "E:\python36\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Could not proxy. Proxy error: Could not proxy command to remote server. Original error: 404 - undefined
主な原因はUiatomart 2でkeyeventがサポートされなくなりました.driver.press_を使います.keycode()の方法は解決できます.presskeycodeとkeyevent
press_を見るkeycodeとkeyeventのソースコードは、この2つの方法には違いがないことが分かりました.keyeventの上にはNeed for Selendroidという備考があります.古いバージョンの中の機能かもしれません.新バージョンはUiatomart 2でpress_を使用できます.keycodeの方法
# Needed for Selendroid
def keyevent(self, keycode, metastate=None):
"""Sends a keycode to the device. Android only. Possible keycodes can be
found in http://developer.android.com/reference/android/view/KeyEvent.html.
:Args:
- keycode - the keycode to be sent to the device
- metastate - meta information about the keycode being sent
"""
data = {
'keycode': keycode,
}
if metastate is not None:
data['metastate'] = metastate
self.execute(Command.KEY_EVENT, data)
return self
def press_keycode(self, keycode, metastate=None):
"""Sends a keycode to the device. Android only. Possible keycodes can be
found in http://developer.android.com/reference/android/view/KeyEvent.html.
:Args:
- keycode - the keycode to be sent to the device
- metastate - meta information about the keycode being sent
"""
data = {
'keycode': keycode,
}
if metastate is not None:
data['metastate'] = metastate
self.execute(Command.PRESS_KEYCODE, data)
return self
press_を使うkeycodeがkeyeventを交替すれば問題を解決できます.from appium import webdriver
import time
desired_caps = {
"platformName": "Android",
"deviceName": "emulator-5554", #
"platformVersion": "5.1.1", # android
"appPackage": "com.yipiao", # app
"appActivity": "com.yipiao.activity.LaunchActivity", # launch Activity
"noReset": True, #
'automationName': 'Uiautomator2' # toast Uiautomator2
}
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
time.sleep(10) # ,
# Uiautomator2 keyevent
# driver.keyevent(4) # back code 4
# Uiautomator2 press_keycode
driver.press_keycode(4)
keycodeの関連方法