[英]Proper configuration steps to ensure expected text entry with AssertJ Swing tests
使用AssertJ Swing时,正确的@Before
/ @BeforeClass
(或其他)步骤是什么,以确保输入特定字符,例如{
, <
, "
等。
如果我使用enterText("\\"")
/ enterText("\\"")
方法,例如enterText("\\"")
或pressAndReleaseKeys(KeyEvent.VK_QUOTEDBL)
, pressAndReleaseKeys(KeyEvent.VK_QUOTEDBL)
收到“无效的键代码”异常或输入错误的字符。这些方法的结果似乎取决于平台,不管我做什么。
import java.awt.*;
import java.awt.im.InputContext;
import java.util.Locale;
import java.util.concurrent.Callable;
import javax.swing.*;
import org.assertj.swing.edt.GuiActionRunner;
import org.assertj.swing.fixture.FrameFixture;
import org.assertj.swing.junit.testcase.AssertJSwingJUnitTestCase;
import org.junit.*;
public class SimplePanelTest extends AssertJSwingJUnitTestCase {
private FrameFixture frame;
@BeforeClass
public static void classInit() {
Locale.setDefault(Locale.GERMAN);
System.setProperty("assertj.swing.keyboard.locale", "de");
InputContext.getInstance().selectInputMethod(Locale.GERMAN);
}
@Override
protected void onSetUp() {
JFrame testFrame = GuiActionRunner.execute(new Callable<JFrame>() {
@Override
public JFrame call() throws Exception {
JFrame f = new JFrame();
f.setLayout(new BorderLayout());
f.setTitle("Test");
f.setLocationRelativeTo(null);
f.add(new MyPanel());
return f;
}
});
frame = new FrameFixture(robot(), testFrame);
frame.show(new Dimension(720, 480));
}
public static class MyPanel extends JPanel {
public MyPanel() {
setLayout(new BorderLayout());
JTextArea area = new JTextArea();
area.setName("my-field");
add(area);
}
}
@Test
public void testSimpleTextEntry() {
frame.textBox("my-field").enterText("\"{<");
}
}
确保在编写和运行测试时确保开发人员/测试人员使用特定的平台(键盘布局),这是要使用AssertJ Swing的一部分吗? 哪个平台? 官方文档对此主题非常含糊(只是假设它适用于所有人)。
您真的需要模拟关键事件吗? 否则,仅需通过编写文本将文本设置到文本框中就足够了
frame.textBox("my-field").setText("\"{<");
我问是因为涉及到AltGr的组合键的Java机器人存在问题(并且可能在后台仍潜伏着其他问题):
robot.keyPress(KeyEvent.VK_ALT_GRAPH)在Windows中引发java.lang.IllegalArgumentException
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.