繁体   English   中英

AssertJ Swing enterText() 写错符号

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM