gpt4 book ai didi

python - 如何测试使用 exec_() 调用的自定义对话框窗口?

转载 作者:行者123 更新时间:2023-12-01 00:19:11 26 4
gpt4 key购买 nike

我正在尝试为我的项目编写系统测试。我有一个启动各种窗口的 Controller 类。但是,我似乎无法使用 exec 和 qtbot 来控制 Windows 启动。

这是一个 MVCE:

from PyQt5.QtWidgets import *
from PyQt5 import QtGui
class Controller:
def __init__(self):
self.name = None
self.a = WindowA(self)

def launchB(self):
self.b = WindowB(self)

if self.b.exec_():
self.name = self.b.getData()

class WindowA(QDialog):
def __init__(self, controller):
super(WindowA, self).__init__()
self.controller = controller
layout = QVBoxLayout()
self.button = QPushButton('Launch B')
self.button.clicked.connect(self.controller.launchB)
layout.addWidget(self.button)
self.setLayout(layout)
self.show()

class WindowB(QDialog):
def __init__(self, controller):
super(WindowB, self).__init__()
self.controller = controller
layout = QVBoxLayout()
self.le = QLineEdit()
self.button = QPushButton('Save')
self.button.clicked.connect(self.save)
layout.addWidget(self.le)
layout.addWidget(self.button)
self.setLayout(layout)
self.show()

def getData(self):
return self.le.text()

def save(self):
if self.le.text():
self.accept()
self.close()
else:
self.reject()

from PyQt5.QtWidgets import QApplication

if __name__ == '__main__':

import sys

app = QApplication(sys.argv)
window = Controller()
sys.exit(app.exec_())

我想测试用户是否成功在行编辑中输入数据。在我的测试中,我能够成功单击 WindowA 中的按钮来启动 WindowB,但无法使用 keyClicks 在 lineedit 中输入数据。

这是测试:

def test_1(qtbot):
control = Controller()
qtbot.mouseClick(control.a.button, QtCore.Qt.LeftButton)

qtbot.keyClicks(control.b.le, 'Test_Project')
qtbot.mouseClick(control.b.button, QtCore.Qt.LeftButton)

assert control.name == 'Test_Project'

最佳答案

问题是使用 exec_() 会阻塞所有同步任务,直到窗口关闭,解决方案是使用 QTimer 异步启动剩余任务:

def test_1(qtbot):
control = Controller()

def on_timeout():
qtbot.keyClicks(control.b.le, "Test_Project")
qtbot.mouseClick(control.b.button, QtCore.Qt.LeftButton)

QtCore.QTimer.singleShot(0, on_timeout)
qtbot.mouseClick(control.a.button, QtCore.Qt.LeftButton)

assert control.name == "Test_Project"

关于python - 如何测试使用 exec_() 调用的自定义对话框窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59073275/

26 4 0