Appium pressKeyCode генерирует действие IME - PullRequest
0 голосов
/ 03 июля 2018

В версии 1.8.1 Appium сказано, что он может генерировать действия IME. Appium 1.8.1 Release

Как сгенерировать событие IME, введите с идентификатором действия 5 / Создать действие Готово или Далее.

Также возможно ли запустить его через ADB?

Я знаю, что могу запустить команду adb shell keyevent 66 для получения события ввода. Что я хочу, чтобы добавить к этой команде actionId.

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Вы можете использовать driver.pressKeyCode(int key, Integer metastate) для генерации IME-действий.

Коды ключей можно найти здесь: io.appium.java_client.android.AndroidKeyCode

Убедитесь, что вы используете UIAutomator2, выполнив desiredCapabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "uiautomator2");

Чтобы сделать это через adb, вы можете запустить команду оболочки или использовать расслабленную защиту appium (запустите ваш appium с помощью CL arg --relaxed-security) и команды mobile: shell.

Например: driver.executeScript("mobile:shell", "adb shell input keyevent 66");

Вот полный пример:

@Test
public void testKeyEvent() {
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("platformName", "Android");
    capabilities.setCapability("deviceName", "Android Emulator");
    capabilities.setCapability("automationName", "UiAutomator2");
    capabilities.setCapability("appPackage", "com.your.app.package");
    capabilities.setCapability("appActivity", ".your.Activity");

    AndroidDriver driver = new AndroidDriver<>(new URL("http://localhost:4723/wd/hub"), capabilities);

    // Press enter
    driver.pressKeyCode(AndroidKeyCode.ENTER);

    // Press Editor action
    driver.pressKeyCode(AndroidKeyCode.FLAG_EDITOR_ACTION);

    // Send adb command
    driver.executeScript("mobile:shell", "adb shell input keyevent 66");

    // Switch ime using adb shell
    driver.executeScript("mobile:shell", "adb shell ime set 5");
}
0 голосов
/ 23 августа 2018

Это модульный тест, написанный Appium для генерации IMEAction.

Этот тест написан для APIDemos.apk, который можно найти здесь

public class KeyCodeTest {

  final By PRESS_RESULT_VIEW = By.id("io.appium.android.apis:id/text");
  final Activity activity;   

    @Test
    public void pressKeyAndGenerateIMEActionTest() {
        activity = new Activity(driver.getCurrentPackage(), ".text.KeyEventText");
        driver.startActivity(activity);
        driver.pressKey(new KeyEvent()
                .withKey(AndroidKey.ENTER)
                .withFlag(KeyEventFlag.SOFT_KEYBOARD)
                .withFlag(KeyEventFlag.KEEP_TOUCH_MODE)
                .withFlag(KeyEventFlag.EDITOR_ACTION));
        final String state = driver.findElement(PRESS_RESULT_VIEW).getText();
        // This event won't update the view
        assertTrue(state.isEmpty());
    }

Я полагаю, что если мы сможем запустить это, он должен показать подробности команды adb в логах сервера appium. Определение различных KeyEventFlag можно прочитать здесь

...