如何使用Java代码和Sikuli单击菜单项

如何使用Java代码和Sikuli单击菜单项,java,sikuli,Java,Sikuli,我有一个应用程序,我需要能够注销,唯一的方法是点击下拉菜单中的注销选项,但我有很多问题 我已经使用Sikuli IDE捕获了屏幕截图,当我从IDE运行代码时,它工作得非常好。(代码单击菜单,然后注销) 然而,当我尝试从Java运行代码时,它似乎选择了菜单,然后当它尝试单击注销时,菜单消失了 我的猜测是,出于某种原因,Java在鼠标移动到“注销”按钮之前将焦点放在鼠标上,当焦点移到鼠标上时,菜单就会消失,就像在其他地方单击时一样 我也试过让Sikuli按几次“向下”按钮来注销,但同样的事情也发生在

我有一个应用程序,我需要能够注销,唯一的方法是点击下拉菜单中的注销选项,但我有很多问题

我已经使用Sikuli IDE捕获了屏幕截图,当我从IDE运行代码时,它工作得非常好。(代码单击菜单,然后注销)

然而,当我尝试从Java运行代码时,它似乎选择了菜单,然后当它尝试单击注销时,菜单消失了

我的猜测是,出于某种原因,Java在鼠标移动到“注销”按钮之前将焦点放在鼠标上,当焦点移到鼠标上时,菜单就会消失,就像在其他地方单击时一样

我也试过让Sikuli按几次“向下”按钮来注销,但同样的事情也发生在它尝试时:菜单消失了

这是我的Java代码。Sikuli代码具有相同的两个单击命令:

@Override
   public void logout()
   {
      click("loggedInIndicator.png");
      click("logoutButton.png");
   }

请帮忙!我找不到其他方法可以注销。

我建议您打印Sikuli找到的与元素最匹配的图像。我的猜测是,它选择了屏幕上与要单击的元素无关的部分,使菜单消失

Match element = region.find("loggedInIndicator.png")
Screen screen = element.getScreen()
String imagePath = screen.capture(element)

这将在System temp目录中保存Sikuli找到的元素的图像。由于它是一个临时文件,您当然必须将新创建的图像文件移动到另一个目录,以便不会立即删除它。我发现这种情况在Windows上发生过好几次

感谢您的快速回复。我很确定匹配不是问题,因为鼠标不会从菜单按钮上移动。它只是闪烁了一秒钟,好像它确实点击了什么东西。但是,我知道它不会再次单击菜单按钮,因为在这个特定的应用程序中,当您多次单击菜单按钮时,菜单仍然保持打开状态。另外,如果我使用的图像和所有内容与我在Sikuli IDE上运行时使用的图像和所有内容完全相同,并且IDE可以工作,那么您可能会认为它在Java代码中的工作方式完全相同。我想我的问题的另一部分是,有没有人使用Java和Sikuli成功地单击过菜单项?(即使你的情况略有不同)。我真的很想知道这是否可能。