关于键盘:如何在Sikuli中发送“Ctrl + c”?

How to send “Ctrl + c” in Sikuli?

这感觉应该很简单,但我找不到有关如何执行此操作的文档:

我只想让Sikuli键入ctrl+c将文本复制到剪贴板。

type(KEY_CTRL+'c')不起作用,type(KEY_CTRL,'c')也不起作用。

有什么建议吗?


尝试使用type("c",KEY_CTRL)

我写了一个简单的脚本,它在记事本中键入一行,双击它来标记它,然后再按ctrl+x ctrl+v将其再次输入到文档中。工作很好。

1
2
3
4
5
6
7
8
9
10
openApp("notepad.exe")

find("textfield.png" )
type("Some text")
doubleClick("theText.png")

type("x", KEY_CTRL)

click("theTextField.png" )
type("v",KEY_CTRL)


以下是Sikuli 0.9及更新版本的作品

1
type('x', KeyModifier.CTRL)


键对象是为几乎所有的修改键和num-pad键定义的。无论如何,它应该看起来像这样

keyDown(Key.CTRL)
type('c')
keyUp(Key.CTRL)


这里记录了type()的用法和可能的键名:

  • http://doc.sikuli.org/region.html region.type
  • http://doc.sikuli.org/keys.html key常量

如其他人所述,使用以下内容:

1
type('c', Key.CTRL) # Copy command

值得一提的是-不要使用大写字符,即:

1
type('C', Key.CTRL) # Does not copy, avoid this

我没有研究过Sikuli源代码,但我的最佳猜测是它隐式地将其作为Shift+C发送,这将导致完全不同的命令。


类型("x",key.ctrl)也可以工作。


我有一个自动化闪存内容的需求。以下代码对我有效。以下是作为自动化一部分执行的以下步骤:

  • 输入用户名和密码
  • 点击登录按钮
  • 单击将导航到应用程序的按钮
  • 我面临的挑战是关注没有占位符的用户名和密码。因此,对焦很困难。所以我用了ctrl键。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
        Pattern appLogo = new Pattern("C:\\images\\appLogo.png");
        StringSelection userNameText = new StringSelection("username");              
       Toolkit.getDefaultToolkit().getSystemClipboard().setContents(userNameText, null);//Copy the text into the memory  
            Screen s = new Screen();
                s.find(appLogo);
                s.click(appLogo);
                s.type(Key.TAB);//I had to enter tab twice to focus on user name textbox
                s.type(Key.TAB);
                s.type("V",KeyModifier.CTRL);

                StringSelection password = new StringSelection("password");              
                Toolkit.getDefaultToolkit().getSystemClipboard().setContents(password, null);
                s.type(Key.TAB);//I had to enter tab twice to focus on user name textbox
                s.type("V",KeyModifier.CTRL);

                Pattern loginButton =  new Pattern("C:\\images\\Login.png");
                s.find(loginButton);
                s.doubleClick(loginButton);

    您可以尝试下一个代码:

    1
    2
    3
    keyDown(Key.CTRL)
    type("c")
    keyUp(Key.CTRL)

    另外,确保num_锁已关闭。如果num_lock处于打开状态,则它可以使用keyModifier.ctrl或keyModifier.shift进行任何操作。


    这个场景就像我需要在完成测试后按键盘上的say键e,如何在sikuli-ide的脚本中添加它。