发送密钥Java代码无法在Mac上运行

时间:2016-11-11 00:22:48

标签: java macos automation robotframework

此代码用于机器人框架中的自动化目的。在取景器窗口上单击鼠标右键后,我想发送像" e"," d"等,然后从上下文菜单中选择一个项目。这是Java代码:

    public void sendKeys(String text) throws Exception {
    int len = text.length();
    char curr;
    for (int index=0; index<len; index++) {
      curr = text.toUpperCase().charAt(index);
      assertTrue(
        String.format("'%c' is not an alphanumeric character", curr),
        (curr>=KeyEvent.VK_A && curr<=KeyEvent.VK_Z) || (curr>=KeyEvent.VK_0 && curr<=KeyEvent.VK_9)
      );
      robot.keyPress(curr);
      robot.keyRelease(curr);
    }
    System.out.println("Send Keys "+text);
  }  

在Windows(几乎所有版本)上,我完全能够发送密钥,但在Mac Sierra / El Capitan上它不会抛出错误但实际上它会选择文件。我尝试了不同的发送键输入组合,如&#34; e&#34;,&#34; d&#34;,&#34; o&#34;等等,使用所有这些输入,文件被选中,而不是实际选择上下文菜单上的项目。

PS:上下文菜单中包含我在输入中用于发送密钥的项目。

1 个答案:

答案 0 :(得分:0)

这就是我使用的:

public static void enterString(String value)
    {   
        String Keyvalue=value.toUpperCase();
        //System.out.println(Keyvalue);
        for (int i=0;i<Keyvalue.length();i++)
        {
            //System.out.println(Keyvalue.charAt(i));
            if(Keyvalue.charAt(i) == ':')
            {
                System.out.println("its a colon");
                RoboKey.keyPress(KeyEvent.VK_SHIFT);
                RoboKey.keyPress(KeyEvent.VK_SEMICOLON);
                RoboKey.keyRelease(KeyEvent.VK_SEMICOLON);
                RoboKey.keyRelease(KeyEvent.VK_SHIFT);

            }
            else if (Keyvalue.charAt(i) == '.')
            {
                RoboKey.keyPress(KeyEvent.VK_PERIOD);
            }
            else if (Keyvalue.charAt(i) == '_')
            {
               RoboKey.keyPress(KeyEvent.VK_SHIFT);
               RoboKey.keyPress(KeyEvent.VK_MINUS);
               RoboKey.keyRelease(KeyEvent.VK_MINUS);
               RoboKey.keyRelease(KeyEvent.VK_SHIFT);
            }
            else
            {
               RoboKey.keyPress((int)Keyvalue.charAt(i));
            }
        }
    }