appum+python自動化64-Uiatomart 2を使ってdriver.keyevent()を実行します.

5488 ワード

前言'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.404
python 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の関連方法
  • 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