Qtest - qt :: Geben Sie nicht an Qpushbutton ein.
-
24-10-2019 - |
Frage
Ich erstelle eine automatisierte Testanwendung mit der QTest -Bibliothek. Ich kann die Tastendrücken in der Anwendung simulieren, außer wenn es in ein Fenster mit QDialogButtonBox (Speichern und Abbrechen) gelangt ist. Hier ist mein Beispielcode:
std::auto_ptr<MainForm> myForm( new MainForm( 3, 3 ));
myForm->show();
QTest::keyPress(myForm.get(), Qt::Key_0, NULL, 1000);
QTest::keyRelease(myForm.get(), Qt::Key_0, NULL, 100);
QWidget *pWin = QApplication::activeWindow();
QCOMPARE(QString(pWin->objectName()), QString("MyMainForm"));
Wenn es jetzt zum nächsten Fenster gelangt, verfügt es über mehrere Steuerelemente, bei denen sich der Eingabefokus auf einer Textbearbeitungssteuerung befindet. Wenn ich die Eingabetaste drücke, wird die Taste "Speichern" gedrückt. Wenn ich also qt :: an das Formular übergeben sollte, sollte es auch die Taste "Speichern" drücken. Wenn ich jedoch versuche, einen Schlüsselpress zu übergeben:
QTest::keyPress(pWin, Qt::Key_Enter, 1000);
Nichts passiert ... Was denkst du, ist los? Ich habe setfocus () zum Knopf ausprobiert, aber auch nichts passiert auch ...
Lösung
In QDialogButtonBox erhalten Sie möglicherweise die benötigte Schaltfläche mit der Schaltfläche
QPushButton * QDialogButtonBox::button ( StandardButton which )
und rufen Sie dann die Setfocus -Methode auf. Wenn Sie nicht direkt auf QdialogButtonbox zugreifen können
QList<T> QObject::findChildren ( const QString & name = QString() )
Oder holen Sie sich sogar Knöpfe mit dieser Methode ...
Andere Tipps
Ich denke, Sie müssen das Schlüsselereignis an die Schaltfläche oder Zeilenbearbeitung anstelle des übergeordneten Fensters senden.
QWidget *pWin = QApplication::activeWindow();
QTest::keyPress(pwin, Qt::Key_0, NULL, 1000);
QTest::keyRelease(pwin, Qt::Key_0, NULL, 100);
Ich muss sagen, dass die Dokumentation nicht klar ist, aber sie funktioniert für mich auf diese Weise.