Мне очень нравится Travis CI для непрерывного тестирования интеграции. С его помощью я тестирую большинство моих консольных, настольных (Qt, SFML) и веб-приложений на C ++. Отлично подходит для тестирования браузерных приложений и задокументировал это красиво.
Одна вещь, которую я не могу сделать, это протестировать графический интерфейс настольного приложения на Travis CI.
Мне нужны базовые вещи, такие как «получить окно с определенным названием / назвать его размер», «щелкнуть левой кнопкой мыши в центре окна» и «отправить пробел окну».
Я уже могу сделать это локально, но только локально, с помощью xdotools, LDTP2 и Sikuli. Однако на Travis CI я не могу заставить эти инструменты работать успешно. Я пытался написать руководство об этом (это мои сценарии), Я имею связался с людьми в Трэвисе и даже назначить награду здесь, все без успеха.
Поскольку это сложный процесс (настройка диспетчера окон на Travis, написание настольных приложений для тестирования, написание сценариев для проверки их в bash), я думаю, что бесполезно публиковать здесь эти маленькие индивидуальные ошибки (у большинства уже есть ответы здесь).
Мой вопросУ кого-нибудь есть рабочий пример
Меня не волнуют точные инструменты (xdotools или какой-либо другой инструмент менеджера окон, Qt или некоторая другая библиотека C ++ GUI, bash или любой другой язык сценариев). Все, что я хочу, это чтобы Travis CI проверил мой GUI на git push
,
Не уверен, что это отвечает на ваш вопрос, но синтаксис того, что вы пытались сделать, может быть причиной того, что он сломался для вас.
в восходящий выпуск, повторно используется следующее:
var=value; program
Не могли бы вы попробовать вместо этого использовать следующий синтаксис:
var=value program
или же
export var=value; program
Пояснение: ;
является терминатором выражения, а только что установленная переменная недоступна для дочерних идентификаторов PID. Либо экспортировать переменную, либо использовать специальный синтаксис (без ;
в качестве разделителя) сделает только что установленную переменную доступной для дочернего PID.
Ну у меня тут
Другой клик, в Трэвисе:
3.04s$ ./clicked
Will wait 2 sec...
waiting 2 sec...
running...
3 times automatic click.
Automatically clicking widget :
When the window fm is clicked, this function is called.
Automatically clicking widget :
When the window fm is clicked, this function is called.
Automatically clicking widget :
When the window fm is clicked, this function is called.
Now with then mouse.
Congratulations, this was not trivial !
Done...
Now again waiting 1 sec...
Done... Now API::exit all ...
запрограммированный Вот.
void clicked(const nana::arg_click & eventinfo)
{
std::cout<< "When the window fm is clicked, this function is called. \n";
}int main()
{
using namespace nana;
form fm;
fm.events().click(clicked);
fm.show();
exec( 2, 1, [&fm]()
{
std::cout << "3 times automatic click. \n";
click(fm);
click(fm);
click(fm);
nana::arg_mouse m;
m.window_handle=fm;
m.alt=m.ctrl=m.mid_button=m.shift=false;
m.left_button=true;
m.pos.x=m.pos.y=1;
m.button=::nana::mouse::left_button;
std::cout << "Now with then mouse. \n";
//fm.events().mouse_down.emit(m);
//fm.events().mouse_up.emit(m);
// char c;
// std::cin >> c;
//fm.close();
});
}
Это далеко не готово, это только моя первоначальная идея. Моя самая большая проблема заключается в том, что у меня нет опыта работы с графическим интерфейсом в Linux. Я реализовал всего несколько тестов, несколько примеров, которых на данный момент нам достаточно, чтобы обнаружить большие проблемы. Я тестирую локально в Windows (ну, когда у меня есть время …), но лично я не могу тестировать в Linux, поэтому Travis для меня очень полезен.
Я изобрел несколько функций для написания теста внутри библиотеки GUI. Не очень (пока) очень элегантно. Я надеюсь, что у меня будет время, чтобы сделать это лучше. Я буду рад видеть ваши решения.