使用 appium java 在 android 设备上长按自定义物理按钮
Long press a custom physical button on android device with appium java
我有一个定制的 phone,其中有一个我需要长按的特定 SOS 按钮。
我正在尝试这样按键。
driver.longPressKey(new KeyEvent( AndroidKey.HOME) );
可以使用,但自定义键代码为 287。我该如何发送它?我试过这样的东西
driver.longPressKey(new KeyEvent( AndroidKey.valueOf("287")) );
但这给出了一个枚举错误
版本:java-客户端:7.5.1
错误原因
AndroidKey
是枚举,valueOf
方法的工作原理如下:
AndroidKey.valueOf("HOME");
而 HOME 是在 Enum 中定义的。
public enum AndroidKey {
UNKNOWN(0),
...
HOME(3),
...
按自定义键码
密钥代码 287 不存在于 AndroidKey 枚举中。
但是 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 命令执行器将获得 long-press 命令的有效结构),但我无法在某些设备上 运行 此代码或模拟器。一旦驱动程序尝试执行一些未知的关键代码,我就不知道驱动程序的行为了。
所以,如果它不起作用,请告诉我,我会尝试 improve/fix。
我有一个定制的 phone,其中有一个我需要长按的特定 SOS 按钮。
我正在尝试这样按键。
driver.longPressKey(new KeyEvent( AndroidKey.HOME) );
可以使用,但自定义键代码为 287。我该如何发送它?我试过这样的东西
driver.longPressKey(new KeyEvent( AndroidKey.valueOf("287")) );
但这给出了一个枚举错误
版本:java-客户端:7.5.1
错误原因
AndroidKey
是枚举,valueOf
方法的工作原理如下:
AndroidKey.valueOf("HOME");
而 HOME 是在 Enum 中定义的。
public enum AndroidKey {
UNKNOWN(0),
...
HOME(3),
...
按自定义键码
密钥代码 287 不存在于 AndroidKey 枚举中。
但是 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 命令执行器将获得 long-press 命令的有效结构),但我无法在某些设备上 运行 此代码或模拟器。一旦驱动程序尝试执行一些未知的关键代码,我就不知道驱动程序的行为了。
所以,如果它不起作用,请告诉我,我会尝试 improve/fix。