appium使用sendkeys输入银行卡卡号(每4个数字自动空一格)总是输入不正确的解决办法

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 15:53   1570   0

appium使用sendkeys输入银行卡卡号(每4个数字自动空一格)总是输入不正确的解决办法


方法一:

public static void inputComsumeInfo(WebElement element, String cardnum) throws Exception
 {
  String actual = "";
  int i = 0;
  do
  {
   element.click();
   String[] str = cardnum.split("");
   for (int j = 0; j < str.length; j++)
   {
    pressKeyCode(Integer.parseInt(str[j]) + 7);
    // 如果当前长度超过预期的值说明多输入了一个数字,需要回删一个字符
    if (element.getText().replace(" ", "").length() > (j + 1))
    {
     logger.info("长度输入超过预期,需要回删一个字符");
     pressKeyCode(67);
    }

    if (j == str.length / 2)
    {
     element.click(); // 点击元素,确保与Appium有交互,否则会超时自动关闭session
     pressKeyCode(123); // 将光标移动到末尾
    }
   }
   actual = element.getText().replace(" ", "");
   logger.info("第 " + (i + 1) + " 次输入,期望值为: " + cardnum + " 实际值为:" + actual + " " + cardnum.equals(actual));
   i++;
   if (!actual.equals(cardnum))
   {
    element.clear();
   }
  } while (!actual.equals(cardnum) && i < CommonSetting.RETRY_TIMES);
  assertEquals(actual, cardnum);
 }

 /**
  * 模拟键盘输入
  * 
  * @param keyCode
  */
 private static void pressKeyCode(int keyCode)
 {
  String cmdStr = "adb shell input keyevent " + keyCode + "";
  try
  {
   Runtime.getRuntime().exec(cmdStr);
   sleep(800);
  } catch (IOException e)
  {
   e.printStackTrace();
  }
 }

 private static void sleep(long time)
 {
  try
  {
   Thread.sleep(time);
  } catch (InterruptedException e)
  {
   e.printStackTrace();
  }
 }


方法二:

输入之前切换到latin输入法,输入完成之后再切换会appium输入法

public class SwitchTypewriting
{
 // 列出系统所有输入法
 private final static String LIST_ALL = "adb shell ime list -s";

 // 系统当前使用的输入法
 private final static String LIST_NOW = "adb shell settings get secure default_input_method";

 // Latin输入法
 private final static String LIST_LATIN = "adb shell ime set com.android.inputmethod.latin/.LatinIME";

 // Appium输入法
 private final static String LIST_APPIUM = "adb shell ime set io.appium.android.ime/.UnicodeIME";

 public static void switch2Latin()
 {
  execCmd(LIST_LATIN);
 }

 public static void switch2Appium()
 {
  execCmd(LIST_APPIUM);
 }

 /**
  * 模拟键盘输入
  * 
  * @param cmdStr
  */
 private static void execCmd(String cmdStr)
 {
  try
  {
   Runtime.getRuntime().exec(cmdStr);
   sleep(800);
  } catch (IOException e)
  {
   e.printStackTrace();
  }
 }

 private static void sleep(long time)
 {
  try
  {
   Thread.sleep(time);
  } catch (InterruptedException e)
  {
   e.printStackTrace();
  }
 }
}


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP