在 Appium 测试中输入“回车键”

Posted

技术标签:

【中文标题】在 Appium 测试中输入“回车键”【英文标题】:Enter "Enter key" in Appium Testing 【发布时间】: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.

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

【问题讨论】:

【参考方案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();

【讨论】:

以上是关于在 Appium 测试中输入“回车键”的主要内容,如果未能解决你的问题,请参考以下文章

在 Angular 单元测试中使用回车键提交表单

JS中如何判断他输入了回车键~!!!

UC浏览器input文本框输入文字回车键自动提交

手机回车键怎么设置?

Linux测试环境部署相关命令和步骤

Java中怎么把一个回车键当做字符输入