Показаны сообщения с ярлыком eclipse. Показать все сообщения
Показаны сообщения с ярлыком eclipse. Показать все сообщения

14 сент. 2011 г.

сокращение имени пакета в последних версиях Eclipse

Для того, чтобы сократить имя пакета, которое отображается в package explorer, например вместо com.testonica.dev -> T нажать Window -> Preferences -> Java -> Appearance -> Abbreviate package names и заполнить по образцу
com.testonica.munchen={M}

22 мар. 2011 г.

Тестрирование UI web приложения на Vaadin с помощью Selenium

Q: Как в автоматическом режиме протестировать web приложение ?
A: С помощью Selenium например.

Должны быть соблюдены следующие условия:
  1. работающий Selenium Server
  2. работающее тестируемое приложение
Рассмотрим случай когда приложение написано на Vaadin. 
Тест-кейс будет такой: 
  • Заполнить форму, которая имеет несколько текстовых полей, поле выбора из списка и поле checkbox. 
  • Одно из обязательных полей оставить пустым.
  • Нажать на кнопку отправления данных.
Ожидаемый результат:
  • Появление предупреждения об ошибке заполнения.
Для начала подготовим элементы формы к тому, чтобы на странице в браузере к ним можно было обратится по Id. Для этого можно воспользоваться присвоением DebugId каждому элементу. 
В фабрике полей
final TextField tf = (TextField) field;
tf.setRequired(true);
tf.setNullRepresentation("");
tf.setDebugId("sr_number");
return tf;
Мы присвоили этому полу идентификатор sr_number, так как это поле для ввода номера
Для кнопок формы
commit.setDebugId("form_commit");
delete.setDebugId("form_delete");
reset.setDebugId("form_reset");
Теперь можно запустить приложение и отправиться запускать selenium сервер, который можно найти на сайте selenium в разделе Selenium Server (formerly the Selenium RC Server).
Сервер запускается в консоли командой "java -jar selenium-server.jar -interactive"
Как видно по умолчанию сервер запущен с портом 4444

Для того, чтобы составить тестовый случай и запустить его воспользуемся Selenium IDE для firefox. В браузере firefox в Navigation toolbar нажимаем Tools -> Selenium IDE
кнопка записи теста должна быть уже включена, так что просто делаем действия нашего тест-кейса, то есть заполняем форму, действия записываются в тест.

Вот сама форма и поля со своими DebugId

Для отображения кода теста в формате JUnit 4, нужно нажать в окне Selenium IDE Options -> Format -> JUnit 4 и скопировать полученный исходный код
Вот немного адаптированный вариант
package ***;

import static org.junit.Assert.assertTrue;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;


public class SearchFieldTest {
 
 private Selenium selenium;
 
 private static String BROWSER = "*firefox";
 private static int PORT = 4444;
 
 @Before
 public void setUp() throws Exception {
  selenium = new DefaultSelenium("localhost", PORT, BROWSER, "http://localhost:8080/");
  selenium.start();
 }

 @Test
 public void testLogin() throws Exception {
  
  selenium.open("/app_path");
  
  selenium.type("sr_number", ""); // обязательное поле с пустым содержимым
  selenium.click("sr_description");
  selenium.type("sr_description", "zzz");
  selenium.click("//div[@id='sr_routeType']/select");
  selenium.select("//div[@id='sr_routeType']/select", "label=Linnaliin");
  selenium.click("//div[@id='sr_routeType']/select/option[1]");
  selenium.click("//div[@id='form_commit']/");
  
  assertTrue(selenium.isTextPresent("Please fill all fields!")); // ожидаем, что появится такая надпись
 
 }
 
 @After
 public void tearDown() throws Exception {
  selenium.stop();
 }
}
Код теста изначально получался не такой, в частности для нажатия кнопки получалось что-то невразумительное, пришлось изучать элементы
Save
и в итоге написать selenium.click("//div[@id='form_commit']/");
Теперь тест срабатывает.

Полезные ссылки:



8 мар. 2011 г.

Vaadin add-ons to Maven project with Eclipse

Установка add-on'a для Maven проекта с Vaadin может быть достаточно запутанным.
Допустим нам захотелось использовать в своем проекте адоны сторонних разработчиков, которые любезно предоставили их на специально отведенной для этого площадке directory. Для примера, попробуем установить FastLayouts (by Matti Tahvonen), каковые должны работать быстрее чем обыкновенные Vaadin UI Layouts.
И так создадим новый Maven проект с поддержкой Vaadin
в поле фильтр можно указать vaadin и выбрать vaadin-clean.
В результате получим проект в котором нужно будет произвести несколько изменений, в частности указать в Project Facets -> Vaadin Eclipse Integration
Dynamic Web Module так же придется выбрать.
Далее преобразования будут касаться pom.xml фаила в корне проекта. На странице адона для него можно будет скопировать элементы dependency и repository
Эти элементы следует скопировать в pom.xml а так же раскомментировать код, который следует за

для компиляции widget-ов, чем и является add-on.
Раскомментируйте так же следующий код

   com.google.gwt
   gwt-user
   2.1.1
   provided
  
Следующий этап: создать простой GWT module descriptor, для этого добавляем в исходники проекта xml фаил MyAppWidgetSet.gwt.xml с таким содержимым

    


Теперь проект готов к компиляции Vaadin виджетов. Для этой цели в Eclipse c установленным плагинов Vaadin integration есть кнопка Compile Vaadin Widgets
Эта кнопка должна запустить процесс компиляции и при удачном раскладе в консоле Eclipse мы наблюдаем output этого процесса
В результате в проекте, в папке WebContent, должна образоваться папка VAADIN
Vaadin полагает, что web app непременно должна находится в WebContent, честно говоря, пока не знаю как заставить Vaadin думать, что компилировать надо в другую папку. Самый тупой метод просто скопировать скомпилированный виджет (в данном случае всю папку VAADIN) в /src/main/webapp.
Далее укажем следующие параметры в web.xml между тегами

   widgetsetcom.b.a.MyAppWidgetSet 
для того, чтобы приложение использовало данный виджет.
Изменим исходный код приложения с иcпользованием FastGrid, создаем новый FastGrid размером 2x2, помещаем туда элементы Label с текстом индекса ячейки и добавляем FastGrid на Layout окна.
package com.b.a;

import com.vaadin.Application;
import com.vaadin.incubator.fastlayouts.FastGrid;
import com.vaadin.ui.Label;
import com.vaadin.ui.Window;

/**
 * The Application's "main" class
 */
@SuppressWarnings("serial")
public class MyVaadinApplication extends Application
{
    private Window window;

    @Override
    public void init()
    {
        window = new Window("My Vaadin Application");
        setMainWindow(window);
        
        final FastGrid fg = new FastGrid(2,2);
        for (int i = 0; i < 2; i++) {
   for (int j = 0; j < 2; j++) {
    fg.addComponent(new Label(i + ":" + j),i,j);
   }
  }
        
        window.addComponent(fg);
        
    }
    
}     
Если после запуска приложения на странице появляется сообщение
значит виджет не скомпилировался, следует проверить все этапы этого сложного процесса.
Полезными могут оказаться следующие ссылки