GWT TestCase:模拟单击页面上的按钮

时间:2011-10-28 15:57:15

标签: gwt junit gwttestcase

我正在使用GWT 2.4和JUnit 4.8.1。在编写扩展GWTTestCase的类时,我想模拟单击页面上的按钮。目前,在我的onModuleLoad方法中,此按钮只是一个本地字段......

public void onModuleLoad() {
    final Button submitButton = Button.wrap(Document.get().getElementById(SUBMIT_BUTTON_ID));
    ...     

    // Add a handler to send the name to the server
    GetHtmlHandler handler = new GetHtmlHandler();
    submitButton.addClickHandler(handler);

如何模拟GWTTestCase中的此按钮?我是否必须公开此按钮作为公共成员访问者是否有更优雅的方式来访问它?这是我到目前为止在我的测试案例中所拥有的......

public class GetHtmlTest extends GWTTestCase {

    // Entry point class of the GWT application being tested.
    private Productplus_gwt productPlusModule;

    @Override
    public String getModuleName() {
        return "com.myco.clearing.productplus.Productplus_gwt";
    }

    @Before
    public void prepareTests() { 
        productPlusModule = new Productplus_gwt();
        productPlusModule.onModuleLoad();
    }   // setUp

    @Test
    public void testSuccessEvent() { 
        // TODO:  Simulate clicking on button
    }   // testSuccessEvent

}

谢谢, - 戴夫

3 个答案:

答案 0 :(得分:2)

它可以像buttonElement.click()(或ButtonElement.as(buttonWidget.getElement()).click()ButtonElement.as(Document.get().getElementById(SUBMIT_BUTTON_ID)).click()

一样简单

但请记住,GWTTestCase不会在您自己的HTML主机页面中运行,而是在空主页面中运行,因此您首先必须在模拟模块负载之前在页面中插入按钮。

答案 1 :(得分:2)

gwt-test-utils似乎是满足您需求的完美框架。不是继承自 GWTTestCase ,而是扩展gwt-test-utils GwtTest 类并使用Browser类实现点击测试,如getting starting guide所示: / p>

  @Test
public void checkClickOnSendMoreThan4chars() {
   // Arrange
   Browser.fillText(app.nameField, "World");

   // Act
   Browser.click(app.sendButton);

   // Assert
   assertTrue(app.dialogBox.isShowing());
   assertEquals("", app.errorLabel.getText());
   assertEquals("Hello, World!", app.serverResponseLabel.getHTML());
   assertEquals("Remote Procedure Call", app.dialogBox.getText());
}

如果你想让你的按钮保持私密,你就可以通过内省来检索它。但我的建议是让你查看受保护的小部件包,并在同一个包中编写单元测试,以便它可以访问它们。它更有说服力和重构友好。

gwt-test-utils提供内省的自信。例如,要检索可能是私有的“dialogBox”字段,您可以这样做:

 DialogBox dialogBox = GwtReflectionUtils.getPrivateFieldValue(app, "dialogBox");

但请注意,使用GwtReflectionUtils不是强制性的。 gwt-test-utils允许你在GWT客户端测试中使用任何java类,没有限制:)

答案 2 :(得分:0)

你可以这样做:

YourComposite view = new YourComposite();
RootPanel.get().add(view);

view.getSubmitButton.getElement().<ButtonElement>cast().click();