[英]AssertJ Swing enterText() writing wrong symbols
我正在使用 Swing 为我的应用程序创建一个 GUI,它有一个名为“spinner”的JSpinner
。 在使用 AssertJ Swing 创建的测试中,我有这样的东西:
import org.assertj.swing.fixture.FrameFixture;
import org.assertj.swing.edt.GuiActionRunner;
FrameFixture window;
MyView view;
GuiActionRunner.execute(() -> {
view = new MyView();
return view;
});
window = new FrameFixture(view);
window.spinner("spinner").enterText("-1");
此代码在 Ubuntu 上运行时没有任何问题。但是,在使用意大利语键盘在 MacOS 上测试相同代码时,我注意到输入的文本不是“-1”,而是“'1”。 其他符号也会发生这种情况,例如“\\”变成“ù”。
如果我在 mac 上的微调器中手动输入“-1”,它就写好了。 所以我猜这个问题与enterText()
本身和 mac 有关。 有谁知道为什么会这样? 谢谢。
更新:
为了隔离问题,我也尝试过这样做:
String minus = java.awt.event.KeyEvent.getKeyText(45);
System.out.println(minus);
从这张备忘单中,我知道45
键对应于-
实际上这段代码工作正常。
但后来我试过了:
window.spinner("spinner").click();
window.robot().pressAndReleaseKeys(45);
或者类似地创建一个新的机器人:
robot = new Robot();
robot.setAutoDelay(500);
window.spinner("spinner").click();
robot.keyPress(KeyEvent.VK_MINUS);
这两段代码再次代替了write -
write '
。 从这个旧讨论中,我怀疑意大利语键盘的键映射中存在错误,其方式类似于法语和德语键盘讨论中提到的错误。
在这里,我发现可以使用 assertj 的以下 VM 参数来执行测试:
-Dassertj.swing.keyboard.locale=language
实际上,通过指定不同的语言,键盘映射会发生变化,从而覆盖默认语言。 当然选择“它”作为语言并没有解决问题。 我做了一些测试来改变不同的键盘语言环境。 令人惊讶的是,最适合我的意大利 MacBook 的是芬兰语键盘布局。
我测试了一些符号:
window.spinner("spinner").enterText("-123456789;.,_èé@)(/&%$£|\"!<>ìàòùabcdefghilmnopqrstuvzwxyjk");
结果文本是:
-123456789;.,?èé2)(/&%43"!lìàòùabcdefghilmnopqrstuvzwxyjk
有些字符仍然没有正确映射,但比以前好多了。 对于我在 GUI 中进行的测试,这就足够了。 我仍然希望有一个更完全正确的解决方案。
在 assertj 文档中,我找到了可用于映射的KeyStrokeMappingProvider class。 除了默认的,目前还有适用于德语、英语、芬兰语、法语和法语 + macOS 的击键映射提供程序。 我的猜测是意大利语 + macOS 布局应该还有一个映射提供程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.