GWT TestCase: имитация нажатия кнопки на моей странице - PullRequest
3 голосов
/ 28 октября 2011

Я использую 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 ]

2 голосов
/ 31 октября 2011

gwt-test-utils кажется идеальной платформой для удовлетворения ваших потребностей.Вместо того, чтобы наследовать от GWTTestCase , расширьте класс gwt-test-utils GwtTest и реализуйте свой тест щелчков с помощью класса Browser, как показано в руководстве по началу работы :

  @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 позволяет вам использовать ЛЮБЫЕ классы Java в клиентских тестах GWT без ограничений :)

2 голосов
/ 28 октября 2011

Это может быть просто buttonElement.click() (или ButtonElement.as(buttonWidget.getElement()).click(), или ButtonElement.as(Document.get().getElementById(SUBMIT_BUTTON_ID)).click())

Но помните, что GWTTestCase не запускается на вашей собственной HTML-странице хоста, а является пустой,поэтому сначала вам нужно вставить свою кнопку на странице, прежде чем имитировать загрузку вашего модуля.

0 голосов
/ 07 января 2013

Вы можете сделать это так:

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

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