我正在创建一些自动化的图形用户界面测试在我的应用程序中使用QTest.
我可以使用以下命令从我的应用程序访问小部件:
savePushButton = mainWindow->findChild<QPushButton *>("savePushButton");
它工作正常,但现在我必须单击某个按钮的“确定”按钮Q消息框.
我创建了Q消息框在我的应用程序中是这样的:
if( something_wrong )
{
QMessageBox::warning(new Widget(), "Title", "Something wrong!");
}
我怎样才能访问这个Q消息框,及其按钮?
我在以下链接中找到了解决方案:http://www.qtcentre.org/threads/31239-Testing-modal-dialogs-with-QTestLib http://www.qtcentre.org/threads/31239-Testing-modal-dialogs-with-QTestLib .
它使用命令QApplication::topLevelWidgets();
获取小部件列表。然后它搜索消息框小部件并模拟按键输入(QTest::keyClick(mb, Qt::Key_Enter);
) 关闭消息框。
Example:
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);
}
}
}
头文件必须包含Q_OBJECT宏使用信号和槽机制。
例子:
class MyClass: public QWidget
{
Q_OBJECT
public:
...
它对我来说效果很好,因为当消息框出现时 UI(线程)被阻止。
Note: 添加时记得重建项目Q_OBJECT macro.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)