我在 OS X 上遇到了 windowlicker 问题(在 Windows 上一切正常)。 问题是,当我尝试模拟用户输入到任何文本字段时,数据未正确插入(某些字母被剪掉)。
例如:
JTextFieldDriver txField = new JTextFieldDriver(this,
JTextField.class,
named(fieldName));
txField.focusWithMouse();
txField.typeText(input);
前面的代码将导致我观察到 windowlicker 将输入插入名为 fieldName 的文本字段,并且 输入 将不完整(Peter 将是 Peer 或 Fred 将是弗雷等)。在 Windows 上一切正常。
我不确定这一切是否与警告有关。我在windows上也遇到类似的情况。警告是: “警告:无法加载键盘布局 Mac-,使用功能减少的后备布局(在/Users/odo/.m2/repository/com/googlecode/windowlicker/windowlicker 中找不到 JAR 条目 com/objogate/wl/keyboard/Mac- -core/r268/windowlicker-core-r268.jar)"
最佳答案
Windowlicker 似乎不是很流行的工具。尽管如此,我还是设法找出了根本原因。显示警告,指出无法设置键盘布局,因为我没有使用英语区域设置。看起来 windowlicker 仅支持 Mac-GB 键盘布局。 如果设置了适当的系统属性,警告就会消失。 例如:
System.setProperty("com.objogate.wl.keyboard", "Mac-GB");
但这并不能解决主要问题。经过几次试验后,我发现只有“a”和“d”字符被修剪。这是因为 windowlicker 插入它们就像用户按住“a”或“d”键一会儿一样。按住这些键会调用帮助程序菜单,允许选择特殊字符。为了解决这个问题,我使用了 JTextComponentDriver 并找到了解决方法。解决方案是不要使用驱动程序的 typeText 来插入文本。 JTextComponentDriver 的 component() 方法可用于检索实际的 Guy 组件,然后可以调用实例 setText() 来设置文本。
下面我介绍我的帮助器类,它使用所描述的解决方案:
public class TextTyper {
private final String inputText;
privte TextTyper(String inputText) {
this.inputText = inputText;
}
public static TextTyper typeText( final String inputText ){
return new TextTyper( inputText );
}
public void into( JTextComponentDriver<?> driver ) throws Exception{
driver.focusWithMouse();
driver.clearText();
Component cmp = driver.component().component();
if(cmp instanceof JPasswordField ){
JPasswordField pwField = (JPasswordField) cmp;
pwField.setText(this.inputText);
}
else if( cmp instanceof JTextField){
JTextField txField = (JTextField) cmp;
txField.setText(this.inputText);
}
else
throw new Exception("Component is not an instance of JTextField or JPasswordField");
}
}
关于java - Windowslicker 无法在 OS X 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23316432/