我是PyQt
的新用户,但我将使用带有pytest
插件的pytest-qt
来测试我的PyQt5
应用。我在Java中使用SWTBot
和RCPTT
获得了一些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中这样做),我会看到一个包含冻结背景的奇怪窗口:
我认为理论上可以显示接口,因为我知道PyQt5可以从python shell(more)运行:
例如,您可以从Python shell提示符创建小部件,与它们交互,并且仍然能够输入其他Python命令
但我不知道如何用pytest-qt实现它
答案 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()