五、SogouInputUtil搜狗输入法连接器
SogouInputUtil是连接Monkey和SogouInput键盘布局的连接器:
1.SogouInputKeybard主要专注于维护输入法各个控件的坐标,例如拼音26键的qwery等按键的位置。
2.SogouInputUtil将要执行的动作转换为坐标值,然后告诉给monkey模块去执行。
3.如果希望有更多复杂的随机动作,可以派生SogouInputUtil进行编写即可,例如执行打字功能:
public class SogouInputTypeUtil extends SogouInputUtil{ private static String MSG_TAG = "SogouInputTypeUtil"; private InputDataProvider mInputDataProvider; public SogouInputTypeUtil() { super(); mInputDataProvider = InputDataProvider.getInstance(); } // 9键输入单个字符 public void tap9Key_Onekey(String key ){ Point pt = mSogouInputMethodKeyboard.getPoint( key ); if ( pt != null ){ pressXY( pt.getX() , pt.getY()); } } // 9键输入字符串 public void tap9Key_LangString(String str ){ String[] onekey; onekey = str.split(""); for ( int i = 0; i < onekey.length; i++ ) { tap9Key_Onekey( onekey[i]); } } // 26键输入单个字符 public void tap26Key_Onekey(String key ){ Point pt = mSogouInputMethodKeyboard.getPoint( key ); if ( pt != null ){ pressXY( pt.getX() , pt.getY()); } } // 26键输入字符串 public void tap26Key_LangString(String str ){ String[] onekey; onekey = str.split(""); for ( int i = 0; i < onekey.length; i++ ) { tap26Key_Onekey( onekey[i]); } } // 随机点击 public void randomTap() { int[] xy = mSogouInputMethodKeyboard.getRandomXY(); pressXY(xy[0], xy[1]); } // 点击空格键 public void tapBlank(){ int []xy = mSogouInputMethodKeyboard.getBlankSpaceXY(); pressXY(xy[0], xy[1]); } // 随机点击字符串并上屏 public void tapRandomString(){ tap9Key_LangString(mInputDataProvider.ReadInputData_9Key()); // tap9Key_LangString("76468"); } public void tapRandomString_Blank(){ tapRandomString(); tapBlank(); } public void tapRandomString_Candidate(){ tapRandomString(); //Toolbar的位置其实也是候选词的位置 pressXY(mSogouInputMethodKeyboard.getKeyboardSwitchBtnX(), mSogouInputMethodKeyboard.getKeyboardSwitchBtnY()); } } |
该模块中的执行动作,最终会调用基类SogouInputUtil中的pressXY坐标,将坐标值告诉monkey去执行。
六、SogouInputKeyboard搜狗输入法键盘布局
该模块主要用于维护搜狗输入法键盘各个控件的坐标值,目前实现的方法是从配置文件中读取坐标位置:
1.配置文件保存位置:哆啦A梦assets的inputConfig目录。
2.配置文件的格式为:
[PY26] 1=300,1320 2=540,1320 3=780,1320 4=300,1490 5=540,1490 6=780,1490 7=300,1650 8=540,1650 9=780,1650 q=70,1300 w=170,1300 e=280,1300 r=380,1300 t=500,1300 y=600,1300 u=700,1300 i=810,1300 o=920,1300 p=1020,1300 a=120,1470 s=220,1470 d=330,1470 f=440,1470 g=540,1470 h=650,1470 j=750,1470 k=850,1470 l=960,1470 z=230,1640 x=330,1640 c=430,1640 v=540,1640 b=640,1640 n=750,1640 m=860,1640 del9=990,1320 space9=540,1835 del=995,1640 space=550,1810 |
七、InputDataProvider输入法测试数据提供类
该模块主要用于向随机稳定性动作提供测试数据。
public class InputDataProvider { private static final String NINE_SCRIPT_PATH = "/KPITestDir/Source/9key.txt";//九键语料路径 private static final String TWSIX_SCRIPT_PATH = "/KPITestDir/Source/26key.txt"; private static BufferedReader m_bufferedReader = null; private static InputDataProvider _instance = null; public void InputDataProvider(){ } public static InputDataProvider getInstance() { if (_instance == null) { _instance = new InputDataProvider(); } return _instance; } private void OpenInputData_9Key(){ if ( (m_bufferedReader != null) ){ return; } File sdRoot = CommonFuncClass.getSdDir(); if (sdRoot == null) return; try { String path = StateValue.getDoraemonDir() + File.separator + NINE_SCRIPT_PATH; File file = new File(path); m_bufferedReader = new BufferedReader(new FileReader(file)); } catch (IOException e) { e.printStackTrace(); } } private void CloseInputData_9Key(){ try { if ( m_bufferedReader != null ){ m_bufferedReader.close(); } }catch (IOException e){ e.printStackTrace(); } } public String ReadInputData_9Key( ){ OpenInputData_9Key(); String sLine = null; try { if ( m_bufferedReader != null ){ sLine = m_bufferedReader.readLine(); sLine = sLine.substring( 0 , sLine.indexOf("\t")); } }catch (IOException e ){ e.printStackTrace(); } return sLine; } } |
读取的数据文件位置为:哆啦A梦assets目录下的KPITestDir/Source数据,该数据内容为线上的用户输入语料。
相关推荐: