在Appium Testing中输入“Enter key”

时间:2017-08-08 14:07:51

标签: android selenium automation appium android-testing

如何在Android自动化测试中从Appium中的软键盘发送/按输入键?
我尝试了几个选项,但它们都没有工作 - 而不是按键,它们正在清除在文本区域中输入的文本。下面是代码(用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.

如果有人能帮助我实现它吗?

12 个答案:

答案 0 :(得分:3)

使用前

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

设置以下所需功能

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

答案 1 :(得分:0)

您可以使用Robot类: -

     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://caolan.github.io/async/docs.html#mapLimit

希望它会对你有所帮助:)。

答案 2 :(得分:0)

这对我有用:

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

答案 3 :(得分:0)

您可以尝试一下,它可以在所有设备上使用

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

答案 4 :(得分:0)

@akash和@LuckyLikey的回答使我想到了JavaScript中的此解决方案:

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

这使我能够找到文本字段,输入一些文本并提交搜索命令(与单击键盘中的搜索图标相同)。当然,您必须用适当的值替换<elementId><text to type>。有关“移动设备:performEditorAction”的详细信息,请参见http://appium.io/docs/en/commands/mobile-command/

答案 5 :(得分:0)

尝试以下代码。它对我有用:

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));
  

使用回车键之前,必须先单击文本输入字段。

答案 6 :(得分:0)

因此您可以发送以下指定的字母:

按Enter键的sendKeys('\ n')

在其他编程语言中引用更多sendKeys API

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

所以您可以喜欢在过去的某些情况下为我工作的它,而且它真正简单

按Enter键

sendKeys('\n') 

答案 9 :(得分:0)

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));

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

答案 10 :(得分:0)

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

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

答案 11 :(得分:0)

试试这个..

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