如何在使用pytest-qt测试PyQt5应用程序时显示GUI?

时间:2017-12-13 21:27:38

标签: python user-interface pyqt5 pytest

我是PyQt的新用户,但我将使用带有pytest插件的pytest-qt来测试我的PyQt5应用。我在Java中使用SWTBotRCPTT获得了一些GUI测试经验,在那里我可以看到实时测试期间控件和整个GUI会发生什么。我想用我的新python工具做这样的行为,但似乎pytest-qt以某种背景方式测试GUI。所有代码都按预期工作,但在测试期间我无法看到GUI。代码很简单,如教程:

from tests.test import MyApp
from time import sleep
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *


def test_myapp(qtbot):
    app = QApplication([])
    window = MyApp()
    # window.show()
    # app.exec_()
    qtbot.addWidget(window)
    qtbot.mouseClick(window.buttonBox.buttons()[0], Qt.LeftButton)
    sleep(5)
    assert window.label.text() == 'accept'

如果我取消注释window.show()行(他们在tutorial中这样做),我会看到一个包含冻结背景的奇怪窗口:

strange window

我认为理论上可以显示接口,因为我知道PyQt5可以从python shell(more)运行:

  例如,您可以从Python shell提示符创建小部件,与它们交互,并且仍然能够输入其他Python命令

但我不知道如何用pytest-qt实现它

1 个答案:

答案 0 :(得分:3)

此代码按我的要求工作,它正确显示界面。关键是qtbot.waitForWindowShown(window)行。

from tests.test import MyApp
from time import sleep
from PyQt5.QtCore import *


def test_myapp(qtbot):
    window = MyApp()
    qtbot.addWidget(window)
    window.show()
    qtbot.waitForWindowShown(window)
    sleep(3)
    qtbot.mouseClick(window.buttonBox.buttons()[0], Qt.LeftButton)
    assert window.label.text() == 'accept'
    qtbot.stopForInteraction()