簡體   English   中英

使用 appium java 長按 android 設備上的自定義物理按鈕

[英]Long press a custom physical button on android device with appium java

我有一部定制手機,其中有一個我需要長按的特定 SOS 按鈕。

我正在嘗試像這樣按鍵。

   driver.longPressKey(new KeyEvent( AndroidKey.HOME) );

這是有效的,但自定義鍵代碼 287。我如何發送它? 我試過這樣的事情

driver.longPressKey(new KeyEvent( AndroidKey.valueOf("287")) );

但這給出了一個枚舉錯誤

版本:java客戶端:7.5.1

錯誤原因

AndroidKey是 Enum 和valueOf方法的工作方式如下:

AndroidKey.valueOf("HOME");

而 HOME 是在枚舉中定義的。

public enum AndroidKey {
    UNKNOWN(0),
    ...
    HOME(3),
    ...

按自定義鍵碼

AndroidKey枚舉中不存在密鑰代碼 287。

但是KeyEvent構造函數需要它。

對於這種情況,我建議創建一個自定義KeyEvent子項 class。

import com.google.common.collect.ImmutableMap
import io.appium.java_client.android.nativekey.KeyEvent

import static java.util.Optional.ofNullable

class MyKeyEvent extends KeyEvent {

    private int keyCode;

    public MyKeyEvent(int keyCode) {
        this.keyCode = keyCode;
    }

    @Override
    public Map<String, Object> build() {
        final ImmutableMap.Builder<String, Object> builder = ImmutableMap.builder();
        final int keyCode = ofNullable(this.keyCode)
                .orElseThrow(() -> new IllegalStateException("The key code must be set"));
        builder.put("keycode", keyCode);
        return builder.build();
    }
}

長按:

driver.longPressKey(new MyKeyEvent(287));

免責聲明

正如我所見,這可能有效(因為 Appium 命令執行器將獲得長按命令的有效結構),但我無法在某些設備或模擬器上運行此代碼。 一旦它嘗試執行一些未知的關鍵代碼,我就不知道驅動程序的行為。

所以,如果它不起作用,請告訴我,我會嘗試改進/修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM