пользовательский интерфейс — тестирование графического интерфейса рабочего стола C ++ на Travis CI

Мне очень нравится Travis CI для непрерывного тестирования интеграции. С его помощью я тестирую большинство моих консольных, настольных (Qt, SFML) и веб-приложений на C ++. Отлично подходит для тестирования браузерных приложений и задокументировал это красиво.

Одна вещь, которую я не могу сделать, это протестировать графический интерфейс настольного приложения на Travis CI.

Мне нужны базовые вещи, такие как «получить окно с определенным названием / назвать его размер», «щелкнуть левой кнопкой мыши в центре окна» и «отправить пробел окну».

Я уже могу сделать это локально, но только локально, с помощью xdotools, LDTP2 и Sikuli. Однако на Travis CI я не могу заставить эти инструменты работать успешно. Я пытался написать руководство об этом (это мои сценарии), Я имею связался с людьми в Трэвисе и даже назначить награду здесь, все без успеха.

Поскольку это сложный процесс (настройка диспетчера окон на Travis, написание настольных приложений для тестирования, написание сценариев для проверки их в bash), я думаю, что бесполезно публиковать здесь эти маленькие индивидуальные ошибки (у большинства уже есть ответы здесь).

Мой вопросУ кого-нибудь есть рабочий пример

  • не веб-приложение C ++ GUI
  • который имеет свой GUI, протестированный как локально, так и на Travis
  • эти тесты состоят из отправки нажатий клавиш и щелчков мыши

Меня не волнуют точные инструменты (xdotools или какой-либо другой инструмент менеджера окон, Qt или некоторая другая библиотека C ++ GUI, bash или любой другой язык сценариев). Все, что я хочу, это чтобы Travis CI проверил мой GUI на git push,

2

Решение

Не уверен, что это отвечает на ваш вопрос, но синтаксис того, что вы пытались сделать, может быть причиной того, что он сломался для вас.

в восходящий выпуск, повторно используется следующее:

var=value; program

Не могли бы вы попробовать вместо этого использовать следующий синтаксис:

var=value program

или же

export var=value; program

Пояснение: ; является терминатором выражения, а только что установленная переменная недоступна для дочерних идентификаторов PID. Либо экспортировать переменную, либо использовать специальный синтаксис (без ; в качестве разделителя) сделает только что установленную переменную доступной для дочернего PID.

0

Другие решения

Ну у меня тут

Тест Nana C ++ GUI в Трэвисе

Другой клик, в Трэвисе:

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. Не очень (пока) очень элегантно. Я надеюсь, что у меня будет время, чтобы сделать это лучше. Я буду рад видеть ваши решения.

0

По вопросам рекламы [email protected]