繁体   English   中英

正确的配置步骤,以确保通过AssertJ Swing测试获得预期的文本输入

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

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