【问题标题】:Enter "Enter key" in Appium Testing在 Appium 测试中输入“回车键”
【发布时间】:2018-01-16 03:47:48
【问题描述】:

如何在 Android 自动化测试中从 Appium 的软键盘发送/按下 Enter 键?
我尝试了几个选项,但它们都不起作用 - 他们没有按下键,而是清除在文本区域中输入的文本。以下是代码(JAVA 语言):

String app_package_name = "abc.xyz.android";

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("deviceName", "Nexus_5X_API_23");
capabilities.setCapability("platformVersion", "6.0");
capabilities.setCapability("appPackage", app_package_name);
capabilities.setCapability("appActivity", app_package_name + ".activity.StartupActivity_");

String url = "http://127.0.0.1:4723/wd/hub";
AndroidDriver driver = new AndroidDriver(new URL(url), capabilities);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

By password = By.id(app_package_name_with_id + "et_password");
WebElement enterPassword = driver.findElement(password);
enterPassword.click();
driver.getKeyboard().sendKeys("12345");

driver.getKeyboard().sendKeys(Keys.ENTER); // THIS IS NOT WORKING.
driver.getKeyboard().sendKeys(Keys.RETURN); // THIS IS ALSO NOT WORKING.
driver.pressKeyCode(AndroidKeyCode.ENTER); // THIS IS ALSO NOT WORKING.
driver.pressKeyCode(AndroidKeyCode.KEYCODE_NUMPAD_ENTER); // SAME HERE.
enterPassword.sendKeys(Keys.ENTER); // SAME HERE.

请问有人可以帮我实现吗?

【问题讨论】:

    标签: android selenium automation appium android-testing


    【解决方案1】:

    使用前

    ((AndroidDriver)driver).pressKeyCode(AndroidKeyCode.ENTER);
    

    设置以下所需的功能

    capabilities.setCapability("unicodeKeyboard", "true");                                     
    capabilities.setCapability("resetKeyboard", "true");
    

    【讨论】:

    • pressKeyCode 和 AndroidKeyCode 已被弃用。还有其他想法/解决方案吗?
    • ((AndroidDriver) driver).pressKey(new KeyEvent(AndroidKey.ENTER));
    【解决方案2】:

    你可以试试这个,它适用于所有设备

    driver.executeScript("mobile:performEditorAction", ImmutableMap.of("action", "done"));
    

    【讨论】:

    • 唯一适用于我的解决方案。甚至, ImmutableMap 也可以用普通的 Map 代替。例如。地图 地图 = 新的 HashMap(); map.put("动作", "完成"); driver.executeScript("mobile:performEditorAction", map);
    【解决方案3】:

    使用 keyevent 发送 要么使用: driver.press_keycode(66) 要么 采用 adb shell input keyevent 66

    【讨论】:

    • 它也适用于 Java。方法是driver.pressKeyCode(66)。
    【解决方案4】:

    你可以使用机器人类:-

         Robot robot;
        try {
            robot = new Robot();
             robot.keyPress(KeyEvent.VK_ENTER);
             robot.keyRelease(KeyEvent.VK_ENTER);
        } catch (AWTException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    

    如果您的测试用例要在后台执行,不建议这样做。机器人框架只是不做任何断言就随便进入。

    或者你可以试试下面的代码:-

    driver.pressKeyCode(AndroidKeyCode.KEYCODE_NUMPAD_ENTER );
    

    来源:-(它还有其他方法可以按回车键):-

    https://discuss.appium.io/t/how-to-click-enter-after-entering-some-text/3136/4

    希望对你有帮助:)

    【讨论】:

    • 您的两种解决方案都不适用于我。您在此处提供的链接以及我在此处发布问题之前发表的评论。但没有运气。
    • 尝试像 thread.sleep(4000);首先......我这么说是因为机器人应该工作......它可能会按下回车键并释放,但可能是你的元素还没有准备好
    • 我看到 Robot 不适用于 Appium。这不是 Selenium!
    【解决方案5】:

    这对我有用:

    try {
        driver.hideKeyboard();
    } catch (Exception e) {
        e.printStackTrace();
    }
    

    【讨论】:

      【解决方案6】:

      @akash 和 @LuckyLikey 的回答让我在 JavaScript 中找到了这个解决方案:

      return driver.waitForElementById(<elementId>).type(<text to type>).click().execute( "mobile: performEditorAction", { "action": "search" } );

      这让我可以找到一个文本字段,输入一些文本,然后提交一个搜索命令(与单击键盘上的搜索图标相同)。当然,您必须将<elementId><text to type> 替换为正确的值。有关“mobile: performEditorAction”的详细信息,请参阅http://appium.io/docs/en/commands/mobile-command/

      【讨论】:

        【解决方案7】:

        试试下面的代码。它对我有用:

        import io.appium.java_client.MobileElement;
        import io.appium.java_client.android.AndroidDriver;
        import org.openqa.selenium.remote.DesiredCapabilities;
        import io.appium.java_client.android.nativekey.AndroidKey;
        import io.appium.java_client.android.nativekey.KeyEvent;
        
        ((AndroidDriver<MobileElement>) driver).pressKey(new KeyEvent(AndroidKey.ENTER));
        

        在使用回车键之前,你必须先点击文本输入框。

        【讨论】:

          【解决方案8】:

          所以你可以发送以下指定的信件:

          sendKeys('\n') for press Enter

          在其他编程语言中参考更多sendKeys API

          【讨论】:

            【解决方案9】:

            你可以使用动作类,它对我有用

            Actions action = new Actions(driver);
            action.sendKeys(Keys.ENTER).perform();
            

            【讨论】:

              【解决方案10】:

              所以你可以喜欢这个在过去的某些情况下对我有用的方法,它真的很简单

              按回车

              sendKeys('\n') 
              

              【讨论】:

                【解决方案11】:

                API 文档:https://appium.github.io/java-client/constant-values.html#io.appium.java_client.android.AndroidKeyCode.ENTER

                输入代码是66

                Python

                self.driver.press_keycode(66)
                

                Java

                ((AndroidDriver<MobileElement>) driver).pressKey(new KeyEvent(AndroidKey.ENTER));
                

                我使用 Youtube 搜索在 Android 9 上进行了测试。

                【讨论】:

                  【解决方案12】:

                  我遇到了同样的问题,而单独自动化亚马逊 ((AndroidDriver)driver).pressKeyCode(AndroidKeyCode.ENTER); 对我不起作用。但是当我首先单击搜索框时它起作用了。

                  searchBox.click();
                  searchBox.sendKeys("Example Input");
                  ((AndroidDriver) driver).pressKey(new KeyEvent(AndroidKey.ENTER));
                  

                  【讨论】:

                    【解决方案13】:

                    试试这个..

                    element.sendKeys("一些文本"); driver.pressKey(new KeyEvent(AndroidKey.ENTER));

                    【讨论】:

                      【解决方案14】:

                      我找到了一个更好的解决方案,而不是按 ENTER 按钮。

                      我写了以下命令:

                      driver.hideKeyboard();
                      

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2014-03-21
                        • 2021-10-13
                        • 2011-05-24
                        • 1970-01-01
                        • 1970-01-01
                        • 2021-02-27
                        • 1970-01-01
                        相关资源
                        最近更新 更多