我在OS X上遇到了windowlicker的问题(在Windows上一切正常)。 问题是,当我尝试模拟任何文本字段的用户输入时,数据未正确插入(某些字母被删除)。
例如:
JTextFieldDriver txField = new JTextFieldDriver(this,
JTextField.class,
named(fieldName));
txField.focusWithMouse();
txField.typeText(input);
前面的代码将导致我将观察windowslighter插入输入到名为 fieldName 的文本字段,输入将不完整(Peter将是Peer或Fred将是Fre等等)。一切都在Windows上正常工作。
我不确定是否所有与警告有关。我在Windows上得到类似的东西。警告是: “警告:无法加载键盘布局Mac-,使用具有降低功能的后备布局(JAR条目com / objogate / wl / keyboard / Mac-未在/Users/odo/.m2/repository/com/googlecode/windowlicker/windowlicker中找到-core / r268 / windowlicker核-r268.jar)“
答案 0 :(得分:2)
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");
}
}