per*_*kin 2 python user-interface pytest pyqt5
我是新来PyQt
的,但我要使用pytest
与pytest-qt
插件来测试我PyQt5
的应用程序。我有一些使用SWTBot
和 的Java GUI 测试经验RCPTT
,在那里我可以实时查看在测试期间控件和整个 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'
Run Code Online (Sandbox Code Playgroud)
如果我取消注释该window.show()
行(他们在教程中这样做),我会看到一个奇怪的窗口,其中包含冻结的背景:
我想理论上可以显示界面,因为我知道 PyQt5 从 python shell ( more ) 工作:
例如,您可以从 Python shell 提示创建小部件,与它们交互,并且仍然能够输入其他 Python 命令
但我不知道如何用 pytest-qt 实现它
这段代码按我的要求工作,它正确显示了界面。关键是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()
Run Code Online (Sandbox Code Playgroud)