Meine Aufgabe ist es, einen automatisierten UI-Test für eine in Entwicklung befindliche Software zu schreiben. Es passiert so, dass Radiobuttons eine Messagebox auslösen, die meinen automatisierten Test stoppt, bis ich ihn manuell bestätige (durch Drücken von ENTER). Das Problem ist, dass ich nicht weiß, wie ich diese neu beschworene Nachrichtenbox anrufen kann, und lasse sie dann von QTest::keyClick(<object>, QtKey::Key_Enter);
bestätigen und lasse meinen automatisierten Test den Lauf fortsetzen.Qt Auto-UI-Test wird wegen MessageBox gestoppt. Wie simuliere ich in eine Messagebox?
Ich verwende QWidgets, QApplication, Q_OBJECT und QtTest. Ich werde einen Code ähnlich dem, was ich arbeite mit:
void testui1(){
Form1* myform = new Form1();
myform->show();
QTest::mouseClick(myform->radioButton01, Qt::LeftButton, Qt::NoModifier, QPoint(), 100);
// Message box pops up and stops the operation until confirmed
QTest::mouseClick(myform->radioButton02, Qt::LeftButton, Qt::NoModifier, QPoint(), 100);
// again
...
}
Wie genau kann ich Skript automatisch das Meldungsfeld zu bestätigen? Das Nachrichtenfeld ist nur ein [OK] -Typ, also brauche ich es nicht zurückzukehren, ob ich Ja oder Nein gedrückt habe. Eine QTest::keyClick(<target object>, Qt::Key_Enter)
Methode muss wissen, auf welches Objekt sie drücken soll. Ich habe versucht, einschließlich myform
in das Objekt und es hat nicht funktioniert. Googeln Ich habe die Antwort nicht gefunden. Ich fand funktioniert das folgende Ergebnis als nicht für das, was ich suche
QWidgetList allToplevelWidgets = QApplication::topLevelWidgets();
foreach (QWidget *w, allToplevelWidgets) {
if (w->inherits("QMessageBox")) {
QMessageBox *mb = qobject_cast<QMessageBox *>(w);
QTest::keyClick(mb, Qt::Key_Enter);
}
}
Findet Ihr Code das Nachrichtenfeld? Bitte klären Sie. – vahancho
Ich bezweifle es. Gibt es auf jeden Fall ein Stück Skript, um diese Nachrichtenbox zu finden? – Unit1
Ihr Code sieht korrekt aus: Iterieren Sie über alle Fenster der obersten Ebene. Ich vermute, dass das modale Meldungsfeld die Ereignisschleife blockiert, so dass der Code nicht ausgeführt wird, während das Meldungsfeld geöffnet wird. – vahancho