Kel*_*inS 3 qt qwidget qtestlib qmessagebox
我正在使用QTest在应用程序中创建一些自动化的GUI测试。
我可以使用以下命令从应用程序中访问小部件:
savePushButton = mainWindow->findChild<QPushButton *>("savePushButton");
Run Code Online (Sandbox Code Playgroud)
它工作正常,但是现在我必须单击QMessageBox的“确定”按钮。
我在应用程序中创建了QMessageBox,如下所示:
if( something_wrong )
{
QMessageBox::warning(new Widget(), "Title", "Something wrong!");
}
Run Code Online (Sandbox Code Playgroud)
我如何访问此QMessageBox及其按钮?
我在以下链接上找到了解决方案:http : //www.qtcentre.org/threads/31239-Testing-modal-dialogs-with-QTestLib。
它使用命令QApplication::topLevelWidgets();来获取小部件列表。然后,它搜索消息框小部件并模拟一个按键Enter(QTest::keyClick(mb, Qt::Key_Enter);),该键将关闭消息框。
例:
void MyTest::testDialog()
{
QTimer::singleShot(500, this, SLOT(timeOut()));
QVERIFY(functionThatProducesMessageBox());
}
void MyTest::timeOut()
{
QWidgetList allToplevelWidgets = QApplication::topLevelWidgets();
foreach (QWidget *w, allToplevelWidgets) {
if (w->inherits("QMessageBox")) {
QMessageBox *mb = qobject_cast<QMessageBox *>(w);
QTest::keyClick(mb, Qt::Key_Enter);
}
}
}
Run Code Online (Sandbox Code Playgroud)
头文件必须包含Q_OBJECT宏才能使用信号和插槽机制。例:
class MyClass: public QWidget
{
Q_OBJECT
public:
...
Run Code Online (Sandbox Code Playgroud)
因为出现消息框时UI(线程)被阻止,所以对我来说效果很好。
注意:添加Q_OBJECT宏时,请记住要重建项目。
| 归档时间: |
|
| 查看次数: |
934 次 |
| 最近记录: |