微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用JUnit4的TestFX:如何在某个TextField中按ENTER键?

如何解决使用JUnit4的TestFX:如何在某个TextField中按ENTER键?

我想测试某个TextField(也许有多个TextFields)是否通过EventHandler设置了setonAction。在测试代​​码中,我可以将内容(例如“ HelloWorld”)设置为TextField。根据我的理解,我必须将光标放在TextField中文本的末尾,然后调用press(KeyCode.ENTER)。是否有TestFX调用将光标放置在某个TextField中的某个点?还是有另一种方法可以对此进行测试?

致敬,约尔格

[编辑] 这是一个示例:

package testestfx;

import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;

public class SimpleGui extends VBox {
  private static final org.slf4j.Logger logger =
          org.slf4j.LoggerFactory.getLogger(SimpleGui.class);

  private TextField field1;
  private TextField field2;
  private Label label;

  public SimpleGui() {
    field1 = new TextField("Textfield1");
    field2 = new TextField("Textfield2");
    field1.setonAction((event) -> onActionDoThis());
    field2.setonAction((event) -> onActionDoThat());
    label = new Label("Label");
    getChildren().addAll(field1,field2 );
  }

  public TextField getField1() {
    return field1;
  }

  public TextField getField2() {
    return field2;
  }

  public Label getLabel() {
    return label;
  }

  void onActionDoThis() {
    logger.info("This");
    label.setText("This");
  }

  void onActionDoThat() {
    logger.info("That");
    label.setText("That");
  }
}

这是测试:

package testtestfx;

import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.stage.Stage;
import org.junit.Test;
import org.testfx.framework.junit.ApplicationTest;
import testestfx.SimpleGui;

import static org.junit.Assert.assertEquals;


public class TestSimpleGUI extends ApplicationTest {
  private static final org.slf4j.Logger logger =
          org.slf4j.LoggerFactory.getLogger(TestSimpleGUI.class);
  private SimpleGui gui;

  @Override
  public void start(final Stage stage) throws Exception {
    super.start(stage);
    gui = new SimpleGui();
    stage.setScene(new Scene(gui));
    stage.show();
  }

  @Test
  public void testEnterKeystroke() {
    TextField t2 = gui.getField2();
    TextField t1 = gui.getField1();
    Label l1 = gui.getLabel();
    t2.setText("bar");
    t1.setText("foo");
    press(KeyCode.ENTER);
    assertEquals("That",l1.getText());
  }

}

控制台输出为:

15:43:29.366 [JavaFX Application Thread] [INFO] SimpleGui - This

org.junit.ComparisonFailure: 
Expected :That
Actual   :This

```

解决方法

您可以将焦点设置在TextField上,如下所示:

myTextField.requestFocus();

亲切的问候

艾玛迪斯

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。