Giter Club home page Giter Club logo

pedromateo / openhmitester Goto Github PK

View Code? Open in Web Editor NEW
77.0 9.0 25.0 503 KB

"Open HMI Tester" is a GUI Testing tool following an open architecture that describes a non intrusive capture/replay tool based on GUI Events. It may be adapted to support different windowing systems and operating systems used in the testing environment.

Home Page: http://pedromateo.github.io/openhmitester/

License: GNU General Public License v2.0

C++ 97.05% QMake 2.95%

openhmitester's Introduction

July, the 1st -> OHT is now cross-platform and works both in Linux (automatic preload) and Windows (using manual preload). There is one feature to implement: make "preload" to work in Windows. If you want to contribute, just email me or continue reading here


"Open HMI Tester" or OHT is an application framework for the development of GUI testing tools. It uses real-time GUI introspection to capture and simulate real user interaction, which enhances robustness and tolerance to changes during testing stage.

OHT provides a cross-platform, open design to support major event-based GUI platforms. Furthermore, it can be integrated into ongoing and legacy developments due to it being not code-intrusive. As a result, the framework provides an adaptable, extensible, scalable, and robust basis to support the automation of GUI testing processes.

OHT is open-source and ready to use. It is cross-platform as well. Versions working in Qt-Linux and Qt-Windows environments are provided in this repository.

Want to contribute?

Please, check open enhancements here!!

Requirements / Compile & run OHT

OHT compiles with many different combinations of Qt and Boost libraries. Anyway, the authors suggest using:

  • Qt v5.x (we are using Qt 5.5)

      sudo apt-get install qt5-default qt5-qmake
    
  • Boost 1.60 or higher

      sudo apt-get install libboost-system-dev libboost-thread-dev libboost-serialization-dev
    

To build the project manually from Qt Creator (http://www.qt.io/ide/, recommended), follow these steps:

  1. Open the build_all_* project.
  2. Build qt_*_hmi_tester project.
  3. Build qt_*_lib_preload project.

* means the operating system we are building OHT for.

Moreover, an Ansible script (https://www.ansible.com/) is provided to compile and run OHT automatically. It automates:

  • installing requirements/dependencies
  • downloading this repository
  • compiling sources
  • run HMI Tester (the testing app of OHT)

To execute it, just copy the file download_compile_run.ansible.yml to an empty directory and execute the following command:

ansible-playbook -i "localhost," -c local ansible_ubuntu.yml -K

OHT in action

Recording and playing desktop test cases

With OHT you can create test cases for your application. Then, test cases can be replayed one by one, or all in a row.

https://www.youtube.com/watch?v=PiwPB8uwZOk

Recording and playing web test cases

With OHT you can create test cases for your webapp. Then, test cases can be replayed one by one, or all in a row.

OHT provides a free, easy and fast way to test your web, as well as to automate actions.

Note that this might produce unexpected results, as in the current implementation of the OHT, the test is recorded in the browser, not in the web page. We are working hard to provide a robust web-testing experience.

https://www.youtube.com/watch?v=Smcj3WmdPdQ

Cross-platform experiment

With OHT you can create test cases in Windows and play them into the same application compiled in Linux, and vice versa. Cross-platform testing is one of the strengths of OHT.

https://www.youtube.com/watch?v=3WYmRFk7r7E

Robustness experiment

OHT can foresee missing GUI widgets, thus no actions will be executed for them.

https://www.youtube.com/watch?v=4rXnRWQ9dts

Logs in the AUT for debug actions

Two logs are generated with the standard and error output of the Application Under Test (AUT):

  • oht_aut_stdout.log
  • oht_aut_stderr.log

They are located in the same directory where the OHT binary is located. This decision was taken in order to use a cross-platform location.

Please, note that lib_preload output is also included in these log files.

Content of this repository

OHT base architecture

  • common: includes common sources.
  • hmi_tester: includes implementation of the OHT controller
  • lib_preload: includes implementation of the library injected in the application to test.
  • build_oht_base: Qt Creator project to build the base architecture.

Qt-Linux OHT Adaptation

  • qt_linux_hmi_tester: implementation of the OHT controller for a Qt-Linux testing environment.
  • qt_linux_lib_preload: implementation of the injected library for a Qt-Linux testing environment.
  • build_oht_qt_linux: Qt Creator project to build the Qt-Linux GUI testing tool.

FAQ

How to adapt OHT to Windows environments?

  1. In qt_linux_hmi_tester, find the class linuxpreloadingaction.h. 
  2. Create a similar class to support library preloading in windows.
  3. In qt_linux_lib_preload, find qtx11preloadingcontrol class.
  4. Create a similar class to "wake up" the OHT at application startup and start OHT installation process.

How does the injection + preloading process works?

  1. The class doing DLL injection before application launching is called LinuxPreloadingAction (extends PreloadingAction) and it is in the HMI Tester. In Linux, it uses the environment variable LD_PRELOAD to set the library to be preloaded before target application launching.

  2. The class deploying the OHT services into the target application is QtX11PreloadingControl (extends PreloadingControl) and it is in the Lib Preload. In Linux, it uses QWidget::x11Event in Qt4, or QWidget::nativeEvent in Qt5 to "automatically wake up" and start deploying event consumer and executor.

If I try to open and build the build_oht_qt_win.pro I get these messages:

cannot find -lboost_serialization-mgw49-mt-d-1_60
cannot find -lboost_thread-mgw49-mt-d-1_60
cannot find -lboost_system-mgw49-mt-d-1_60

You need to correctly reference Boost libraries:

  1. in common/common.pri, add correct Boost includes at the end of this file.
  2. change the name of all includes from -lboost_system-mgw49-mt-d-1_60 to -lboost_system-<your-compiler-version>-1_60. Remember that Boost libraries have to be compiled with the same compiler used by Qt (mingw in this case).

I cannot compile build_all_*.pro project

In this case, try to compile projects independently:

  1. Compile qt_*_hmi_tester project.
  2. Compile qt_*_lib_preload project.

* means the operating system we are building OHT for.

I am running an application using Qt 4.8 + Embedded Linux without X server (there is QWS from QtEmbedded built in my application instead). Does OHT support this kind of setup?

OHT will support this kind of setup provided that you can "wake up" OHT within your application. With waking up I mean to find an event that is executed at your application launching, so you can handle it and start deploying OHT services.

In the Qt-Linux implementation, the class deploying the OHT services into the target application is QtX11PreloadingControl (extends PreloadingControl) and it is in the Lib Preload. In Linux, it uses QWidget::x11Event in Qt4, or QWidget::nativeEvent in Qt5 to "automatically wake up" and start deploying event consumer and executor.

So, you need to create and adaptation of this class (e.g., QWSPreloadingControl) and:

  • either you find a generic Qt4 event that executes at application startup, similar to QWidget::nativeEvent in Qt5
  • or you find a QWS event equivalent to QWidget::x11Event in Qt4

The AUT is crashing and I don't know why. Are there any logs to see what's happening?

Two logs are generated with the standard and error output of the Application Under Test (AUT):

  • oht_aut_stdout.log
  • oht_aut_stderr.log

They are located in the same directory where the OHT binary is located.

Any question? Any bug?

Please, contact me at [email protected]

Further information

Webpage: http://catedrasaes.org/html/projects/OHT/OHT.html

More videos: http://www.youtube.com/user/CatedraSaesUmu

openhmitester's People

Contributors

alainsanguinetti avatar alcinos avatar martonmiklos avatar pedromateo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

openhmitester's Issues

Cannot find file: /home/mm/Projektek/qt/openhmitester/testbench/desktop/desktop.pro

Hello,

I have tried to compile the project under Ubuntu 14.04.3 with Qt 5.2.1 by running qmake build_all.pro

I got the following error.

make[1]: Leaving directory `/home/mm/Projektek/qt/openhmitester/qt_linux_lib_preload'
cd testbench/desktop/ && ( test -e Makefile || /usr/lib/x86_64-linux-gnu/qt5/bin/qmake /home/mm/Projektek/qt/openhmitester/testbench/desktop/desktop.pro -o Makefile ) && make -f Makefile
Cannot find file: /home/mm/Projektek/qt/openhmitester/testbench/desktop/desktop.pro.

Workaround: rename simusaes.pro to desktop.pro

AUT crashes when playing back tests

When playing back tests that launch certain parts of my application, the tests will consistently fail. The portions of the application that have a lot going on is where it fails. I'm compiling OpenHMI and my AUT as 32bit.

In the oht_aut_stderr.log file, I get this error. A generic "This application has stopped working" window also appeared.

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
terminate called after throwing an instance of 'DataModel::not_found'
what(): std::exception

Doesn't press buttons on QDialogs

During testing it didn't press buttons of QProgressDialog (cancelButton) and QMessageBox::question ( accept | reject ) buttons.
Used Qt5.8

Cannot open a binary file

I can load your sample binary files using HMI Tester, but when I open my binary file, the program crashes with the error: realloc(): invalid pointer. But the binary works just fine when run terminal. Please tel me if you need anymore information about the matter. I'm a newbie, and hence ask for your patience because I don't know how exactly things work.

The size of my executable is 61 MB.

How to run with Qt Creator

I opened build_all with Qt Creator but do not know what to do now.

image

Do not answer just here in this Issue. Please improve your instructions in README.md.

Add global shortcut linked to PAUSE button

Add global shortcut (e.g., Ctrl+Space) linked to PAUSE button. This will allow the tester to pause the execution of a test case.

It can be done by using something similar to QxtGlobalShortcut:
http://stackoverflow.com/questions/11813823/global-hotkeys-in-a-cross-platform-qt-application
http://libqxt.bitbucket.org/doc/tip/qxtglobalshortcut.html

Example usage:

QxtGlobalShortcut* shortcut = new QxtGlobalShortcut(window);
connect(shortcut, SIGNAL(activated()), window, SLOT(toggleVisibility()));
shortcut->setShortcut(QKeySequence("Ctrl+Shift+F12"));

Installation not working properly

build the project manually from Qt Creator (http://www.qt.io/ide/, recommended), follow these steps:

Open the build_all_* project.
Build qt_*_hmi_tester project.
Build qt_*_lib_preload project.

When i used this method for installing in linux it shows make error 'QT module scripts not supported,missing desktop.pro '

How to detect image pixels differences

I use your open source software openHMI. Trying to understand all
possibilities of your testing tool. Not sure how to detect image pixels
differences and noticed that works only on a single window based app.
If you have some detailed documentation for using your app I'll appreciate it to send me.

Check WHEEL event

WHEEL event capture and replay seems not to work fine in some scenarios. Please, check.

download_compile_run.ansible.yml: ERROR! conflicting action statements: apt, sudo

The fix is to use become: yes instead of sudo: yes. I'm filing a pull request to do this.
The error (with ansible-playbook 2.10.5) is:

[strk@c19:/usr/local/src/openhmitester(typos)] ansible-playbook -i "localhost," -c local download_compile_run.ansible.yml -K
BECOME password: 
ERROR! conflicting action statements: apt, sudo

The error appears to be in '/home/src/openhmitester/download_compile_run.ansible.yml': line 9, column 5, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:


  - name: Install OHT requirements
    ^ here

error: ‘library_version_type’ in namespace ‘boost::serialization’ does not name a type

This is happening upon running make (after successful qmake call):

g++ -c -pipe -g -std=gnu++11 -Wall -Wextra -D_REENTRANT -fPIC -DLINUX_OHT -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_TESTLIB_LIB -DQT_SCRIPT_LIB -DQT_XML_LIB -DQT_CORE_LIB -DQT_TESTC
ASE_BUILDDIR='"/home/src/openhmitester/build"' -I../src/linux/qt_linux_hmi_tester -I. -I../src/common -I/opt/boost/boost_1_60_0/include/ -I../src/hmi_tester -I../src/preloaders -I../src/datam
odel_adapters -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/
include/x86_64-linux-gnu/qt5/QtTest -I/usr/include/x86_64-linux-gnu/qt5/QtScript -I/usr/include/x86_64-linux-gnu/qt5/QtXml -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I/usr/lib/x86_64
-linux-gnu/qt5/mkspecs/linux-g++ -o datamodel.o ../src/common/datamodel.cpp
In file included from ../src/common/datamodel.h:36,
                 from ../src/common/datamodel.cpp:24:  
/usr/include/boost/serialization/list.hpp: In function ‘void boost::serialization::load(Archive&, std::__cxx11::list<U, Allocator>&, unsigned int)’:
/usr/include/boost/serialization/list.hpp:53:33: error: ‘library_version_type’ in namespace ‘boost::serialization’ does not name a type; did you mean ‘item_version_type’?
   53 |     const boost::serialization::library_version_type library_version(
      |                                 ^~~~~~~~~~~~~~~~~~~~
      |                                 item_version_type

The libboost-serialization library version I'm using is 1.74.0, default packaged in Ubuntu-21.04

Fails on Launching Windows File Dialog

Whenever my AUT opens a Windows File Open dialog, the AUT crashes. Also, whenever my AUT launches another window, that causes the program to crash.

It errors out only when playing back the test.

Support for embedded PyQt?

So, I've embedded a simple python script into a Qt application. OHT does launch application but doesn't show the window; when launched outside OHT, window shows up successfully.

C++ Qt Code (main.cpp):

#include <QApplication>
#include <Python.h>

int main(int argc, char *argv[]) {

  Py_SetProgramName(argv[0]);
  Py_Initialize();
  QApplication a(argc, argv);

  FILE *f = fopen("test.py", "r");
  PyRun_SimpleFile(f, "test.py");

  a.exec();

  fclose(f);
  Py_Finalize();
  return 0;
}

Complete PyQt Code (test.py):

from PyQt5 import QtWidgets
w = QtWidgets.QMainWindow()
w.show()

Remove .pro.user files

These are temporary files, highly dependant on the user's enviroment. I would recommend to remove them from the repository.

Replay error "The selected Test Case is not valid."

Hello.
I tried to use openhmitester with simusaes app but got the error "The selected Test Case is not valid" when I pressed the replay button.

Console output:

kf5.kio.core: Refilling KProtocolInfoFactory cache in the hope to find ""
kf5.kio.core: Refilling KProtocolInfoFactory cache in the hope to find ""
(ProcessControl::recordTestCase)
(ProcessControl::recordTestCase) Created new TestCase: test1
(ProcessControl::onRecord_recClicked) Start.
(LinuxPreloadingAction::launchApplication) std output redirected to file: ./oht_aut_stdout.log
(LinuxPreloadingAction::launchApplication) std error redirected to file: ./oht_aut_stderr.log
==========================================
(LinuxPreloadingAction::launchApplication) Launching application with:
 - binaryPath = /home/parsee/openhmitester-master/testbench/desktop/simusaes
 - preloadLibraryPath = /home/parsee/openhmitester-master/src/linux/qt_linux_hmi_tester/../qt_linux_lib_preload/libqt_linux_oht_preload.so
 - outputFile = ./oht_aut_stdout.log
 - errorFile = ./oht_aut_stderr.log
==========================================
(LinuxPreloadingAction::launchApplication) Application launched.
(ProcessControl::onRecord_recClicked) App launched.
(ItemManager::recordTestCase)
(ItemManager::recordTestCase) Flags updated.
(ItemManager::recordTestCase) CTI_StartRecording posted.
(ProcessControl::onRecord_recClicked) Recording process started.
(ItemManager::handleNewTestItem)
(ItemManager::handleNewTestItem) Adding new TestItem to the current TestCase.
(ItemManager::handleNewTestItem) TestItem type = 11
(ProcessControl::testItemsReceivedCounter)
(ItemManager::handleNewTestItem)
(ItemManager::handleNewTestItem) Adding new TestItem to the current TestCase.
(ItemManager::handleNewTestItem) TestItem type = 12
(ProcessControl::testItemsReceivedCounter)
(ItemManager::handleNewTestItem)
(ItemManager::handleNewTestItem) Adding new TestItem to the current TestCase.
(ItemManager::handleNewTestItem) TestItem type = 21
(ProcessControl::testItemsReceivedCounter)
(ItemManager::handleNewTestItem)
(ItemManager::handleNewTestItem) Adding new TestItem to the current TestCase.
(ItemManager::handleNewTestItem) TestItem type = 1
(ProcessControl::testItemsReceivedCounter)
(ProcessControl::slot_handleCommError) (Client::displayError) 1: Remote host closed connection.
(ItemManager::applicationFinished)
(ProcessControl::testRecordingFinished)
(ProcessControl::playTestCase)

oht_aut_stderr.log:

QMetaObject::connectSlotsByName: No matching signal for on_pushButton_5_clicked()

oht_aut_stdout.log:

(QtPreloadingControl::do_preload) Initializing hooking process.
(PreloadingControl::initPreload) Preload Controller instance initiallized.
(QtPreloadingControl::do_preload) Hooking process finished.
Waking up...
(PreloadController::handleReceivedTestItem)
(PreloadController::handleReceivedControl)
(PreloadController::handleReceivedControl) STATE: Start recording.
(PreloadController::handleReceivedTestItem) Control event handled.
W > MainWindow/centralWidget/lineEdit
W > MainWindow/centralWidget/lineEdit
VALID WIDGET
W > MainWindow/centralWidget/lineEdit
W > MainWindow/centralWidget/lineEdit
VALID WIDGET
W > MainWindow/centralWidget/lineEdit
W > MainWindow/centralWidget/lineEdit
VALID WIDGET
W > MainWindow
W > MainWindow
VALID WIDGET

ohttest.oht:

<TestSuite>
<name>ohttest</name>
<appId>/home/parsee/openhmitester-master/testbench/desktop/simusaes</appId>
<TestCase>
<name>test1</name>
<TestItem>
<type>11</type>
<subtype>0</subtype>
<timestamp>11036</timestamp>
<data key="button" value="1"/>
<data key="buttons" value="1"/>
<data key="gx" value="125"/>
<data key="gy" value="160"/>
<data key="isSens" value="0"/>
<data key="modifiers" value="0"/>
<data key="wheight" value="32"/>
<data key="widget" value="MainWindow/centralWidget/lineEdit"/>
<data key="wwidth" value="152"/>
<data key="x" value="37"/>
<data key="y" value="7"/>
</TestItem>
<TestItem>
<type>12</type>
<subtype>0</subtype>
<timestamp>167</timestamp>
<data key="button" value="1"/>
<data key="buttons" value="0"/>
<data key="gx" value="125"/>
<data key="gy" value="160"/>
<data key="isSens" value="0"/>
<data key="modifiers" value="0"/>
<data key="wheight" value="32"/>
<data key="widget" value="MainWindow/centralWidget/lineEdit"/>
<data key="wwidth" value="152"/>
<data key="x" value="37"/>
<data key="y" value="7"/>
</TestItem>
<TestItem>
<type>21</type>
<subtype>0</subtype>
<timestamp>4026</timestamp>
<data key="gx" value="176"/>
<data key="gy" value="233"/>
<data key="isSens" value="0"/>
<data key="key" value="73"/>
<data key="modifiers" value="0"/>
<data key="text" value="i"/>
<data key="wheight" value="32"/>
<data key="widget" value="MainWindow/centralWidget/lineEdit"/>
<data key="wwidth" value="152"/>
<data key="x" value="88"/>
<data key="y" value="80"/>
</TestItem>
<TestItem>
<type>1</type>
<subtype>0</subtype>
<timestamp>3870</timestamp>
<data key="gx" value="-4"/>
<data key="gy" value="89"/>
<data key="wheight" value="797"/>
<data key="widget" value="MainWindow"/>
<data key="wwidth" value="1011"/>
<data key="x" value="-4"/>
<data key="y" value="30"/>
</TestItem>
</TestCase>
</TestSuite>

Software versions:
GCC 7.2.0
Qt 5.9.2
Boost 1.65.0
OHT from master branch and build with qmake

ansible: No package matching 'qt5-default' is available

on an Ubuntu 21.04 there's no package called qt5-default. What is that we're looking for, exactly ?

[strk@c19:/usr/local/src/openhmitester(ansible)] ansible-playbook -i "localhost," -c local download_compile_run.ansible.yml -K
BECOME password: 

PLAY [all] ************************************************************************************************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************************************************************************************
ok: [localhost]

TASK [Install OHT requirements] ***************************************************************************************************************************************************************
[DEPRECATION WARNING]: Invoking "apt" only once while using a loop via squash_actions is deprecated. Instead of using a loop to supply multiple items and specifying `name: "{{ item }}"`, 
please use `name: ['vim', 'git', 'build-essential', 'qt5-default', 'qt5-qmake', 'libboost-system-dev', 'libboost-thread-dev', 'libboost-serialization-dev']` and remove the loop. This feature
 will be removed from ansible-base in version 2.11. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
failed: [localhost] (item=['vim', 'git', 'build-essential', 'qt5-default', 'qt5-qmake', 'libboost-system-dev', 'libboost-thread-dev', 'libboost-serialization-dev']) => {"ansible_loop_var": "item", "changed": false, "item": ["vim", "git", "build-essential", "qt5-default", "qt5-qmake", "libboost-system-dev", "libboost-thread-dev", "libboost-serialization-dev"], "msg": "No package matching 'qt5-default' is available"}

PLAY RECAP ************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

Support for QtQuick applications?

Hello,

I tried to use the the linux qt launcher to start a QtQuick application.
I recorded while I did some clicking etc but when I played the test cases, nothing happened, as if nothing had been recorded at all.
So this raise my question: are QtQuick applications supported?
Thanks,

Alain

Do automatic preload in Windows

Do the preload automatically in Windows. While in linux it is implemented using the LD_PRELOAD
environment variable, in windows I found several options:

  • Option 1: Use registry keys. The problem is that security in most recent Windows versions do not allow us to do it. You can read this: https://en.wikipedia.org/wiki/DLL_injection

  • Option 2: Create an application launcher (AppL) to launch the application under testing (AUT). The process would be as follows:

    1. The HMI Tester starts recording a test case, thus the AUT must be launched and the PreloadLibrary loaded into it.
    2. The HMI Tester calls the AppL with the path to the AUT as parameter.
    3. The AppL is a binary including the PreloadLibrary. Therefore, in its main function, it first calls to QtPreloadingControl::Do_preload();. Please, see win_oht_launcher subproject into the build_all_win project.
    4. The AppL loads the exe file of the AUT as a DLL. Some links supporting this approach:
    5. The AppL calls the main function of the AUT to launch it, including the PreloadLibrary previously loaded.

    For this, openhmitester/src/preloaders/winpreloadingaction.cpp should be properly implemented to (option 1) change the registry and launch the AUT as a QProcess or (option 2) to call the AppL with the AUT path as parameter. Right now it holds the basic implementation with a lot of TODOs.

Additional info: PreloadModule is the library used to extract events from the application under test (AUT), and to execute actions on it as well. This module (encapsulated into a DLL library) has to:

  1. be preloaded into the AUT before the AUT is launched.
  2. detect any event (in linux we use an event called something like Qt nativeEvent) to automatically execute at startup and deploy the OHT services, thus the OHT controller will be able to communicate to and control the AUT.

"preload" unclear

**July, the 1st -> OHT is now cross-platform and works both in Linux (automatic preload) and Windows (using manual preload). There is one feature to implement: make "preload" to work in Windows. If you want to contribute, just email me or [continue reading here](https://github.com/pedromateo/openhmitester/issues/10)**

It is unclear what this paragraph means. What is "preload"? Please improve that part of the text.

Unclear how to install and run

The instructions about how to install and run are not clear.

  • Why do I need Qt creator? It is missing in your sudo apt instructions.
  • Is there an alternative way beside Qt creator?
  • What is "ansible playbook"? Never heard of that. Isn't there a binary or script I can run this?
  • Isn't openhmitester an application I simply can run via a script or binary?
  • It is not clear what "Boost 1.60" is and if it is a dependency or an optional element.
  • The package qt5-default (or something similar) do not exist in Debian 12.
  • I recommend to rewrite the install-and-run-instructions independent from a specific GNU Linux distribution.

Crash when pressing play

I get this stack trace, with Qt 5.5.0 on Linux

(gdb) bt
#0  0x00007ffff701e260 in QActionGroup::checkedAction() const () from /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5
#1  0x0000000000431e75 in HMITesterControl::tb_play_clicked (this=0x7fffffffe4f0) at ../hmi_tester/hmitestercontrol.cpp:212
#2  0x0000000000457f5c in HMITesterControl::qt_static_metacall (_o=0x7fffffffe4f0, _c=QMetaObject::InvokeMetaMethod, _id=8, _a=0x7fffffffd850) at moc_hmitestercontrol.cpp:204
#3  0x00007ffff55e636e in QMetaObject::activate(QObject*, int, int, void**) () from /opt/Qt/5.5/gcc_64/lib/libQt5Core.so.5
#4  0x00007ffff73adfc2 in QAbstractButton::clicked(bool) () from /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5
#5  0x00007ffff711e3f5 in ?? () from /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5
#6  0x00007ffff711ef89 in ?? () from /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5
#7  0x00007ffff711f124 in QAbstractButton::mouseReleaseEvent(QMouseEvent*) () from /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5
#8  0x00007ffff71df9fa in QToolButton::mouseReleaseEvent(QMouseEvent*) () from /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5
#9  0x00007ffff70650b8 in QWidget::event(QEvent*) () from /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5
#10 0x00007ffff71dfac9 in QToolButton::event(QEvent*) () from /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5
#11 0x00007ffff70244dc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5
#12 0x00007ffff7029e25 in QApplication::notify(QObject*, QEvent*) () from /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5
#13 0x00007ffff55b86a3 in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /opt/Qt/5.5/gcc_64/lib/libQt5Core.so.5
#14 0x00007ffff7028ab2 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () from /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5
#15 0x00007ffff707fe45 in ?? () from /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5
#16 0x00007ffff708217b in ?? () from /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5
#17 0x00007ffff70244dc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5
#18 0x00007ffff7029640 in QApplication::notify(QObject*, QEvent*) () from /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5
#19 0x00007ffff55b86a3 in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /opt/Qt/5.5/gcc_64/lib/libQt5Core.so.5
#20 0x00007ffff67ab0ad in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () from /opt/Qt/5.5/gcc_64/lib/libQt5Gui.so.5
#21 0x00007ffff67aca85 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () from /opt/Qt/5.5/gcc_64/lib/libQt5Gui.so.5
#22 0x00007ffff6791c4f in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /opt/Qt/5.5/gcc_64/lib/libQt5Gui.so.5
#23 0x00007fffedd18170 in ?? () from /opt/Qt/5.5/gcc_64/plugins/platforms/../../lib/libQt5XcbQpa.so.5
#24 0x00007ffff3916fe7 in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#25 0x00007ffff3917240 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#26 0x00007ffff39172ec in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#27 0x00007ffff560dae7 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /opt/Qt/5.5/gcc_64/lib/libQt5Core.so.5
#28 0x00007ffff55b6252 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /opt/Qt/5.5/gcc_64/lib/libQt5Core.so.5
#29 0x00007ffff55bdd3d in QCoreApplication::exec() () from /opt/Qt/5.5/gcc_64/lib/libQt5Core.so.5
#30 0x0000000000451973 in main (argc=1, argv=0x7fffffffe7c8) at main.cpp:46

Indicate project status in README.md

Hi,
the project looks orphaned based on the commit history and the age of Issues/PRs.

Can you please give a short description in the beginning of the README.md file about the current project status, are there plans or you know about forks that are more active?

Thanks in advance
Christian

it doesn't work .it shows make error Qt module scripts not found.Actually

it doesn't work .it shows make error Qt module scripts not found.Actually
it is searching for qt linux hmitester in src.but it is in linux folder and
when i changed the structure ,all gets wrong.

On Wed, 19 Aug 2020 at 11:58, Pedro Mateo [email protected] wrote:

Please, use QTCreator. Then, try first to open and build the build_all.pro
file. In case it doesn't work, please, paste here the output.

An alternative to build is going to src folder and open and build the
following individually:
[image: image]
https://user-images.githubusercontent.com/3541523/90599874-edbc5000-e1f5-11ea-9d75-342d3fed5e6f.png


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#18 (comment),
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AK56H7FOZ3AUXBSLZGFGGC3SBNWI7ANCNFSM4P6DH4WQ
.

Originally posted by @sheminn in #18 (comment)

Not work for QFileDialog

Hi,

I builded it for windows and faced a problem. Tests don't record when I work with QFileDialog.
Do you support QFileDialogs?

Windows Application Never Launching (Solved) (Fix included)

When using the OHT software with a QT application under Windows, the application never launches although the OHT software claims it has started.

To correct this issue, open "winpreloadingaction.cpp" from line 90 where the process execution is occurring.

change
process_->start(QString(binaryPath.c_str());
process_->waitForStarted();

for
process_->setProgram(QString(binaryPath.c_str());
process_->start();
process_->waitForStarted();

Then rebuild the windows hmi tester project.

ansible: deprecated syntax for apt

Warning message:

Invoking "apt" only once while using a loop via squash_actions is deprecated. Instead of using a loop to supply multiple items and specifying `name: "{{ item }}"`, 
please use `name: ['vim', 'git', 'build-essential', 'qt5-qmake', 'libboost-system-dev', 'libboost-thread-dev', 'libboost-serialization-dev']` and remove the loop. This feature will be 
removed from ansible-base in version 2.11.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.