python-3.x 使用qtbot在PySide2中进行GUI测试

cuxqih21  于 2023-02-06  发布在  Python
关注(0)|答案(1)|浏览(157)

我想用pytest-qt的qtbot测试我的 * 图形用户界面 *。
我是新的测试一般,我可能需要一些指导如何开始编写这些测试。
我希望机器人点击文件图标,然后打开一个QFileDialog,如下图所示,机器人需要选择一个PDF文件。
我已经找过文档了,但我找到的并不是很有帮助,我不知道如何设置qtbot。

最小重现性示例:

from PySide2.QtWidgets import QMainWindow, QPushButton, QApplication, QFileDialog

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.button = ''
        btn = QPushButton('Open File', self)
        btn.move(10, 10)
        btn.clicked.connect(self.open_file)
        self.resize(420, 450)

    def open_file(self):
        pdf_dialog_obj = QFileDialog.getOpenFileNames(self, "Open Pdf", "/Downloads", "Pdf Files (*.pdf)",)
        pdf_path = pdf_dialog_obj[0]
        print(pdf_path)

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    MW = MainWindow()
    MW.show()
    sys.exit(app.exec_())
j2datikz

j2datikz1#

以前不知道,现在知道怎么做了,这里有我写的一个例子,大家可以参考,主要是用monkeypatch来实现。

主窗口.py

from PySide2.QtWidgets import QMainWindow, QPushButton, QApplication, QFileDialog

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.button = QPushButton('Open File', self)
        self.button.move(10, 10)
        self.button.clicked.connect(self.open_file)
        self.resize(420, 450)

    def open_file(self):
        filename, _ = QFileDialog.getOpenFileName(self, "Open Pdf", "", "Pdf Files (*.pdf)",)
        print(filename)

if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    MW = MainWindow()
    MW.show()
    sys.exit(app.exec_())

测试按钮.py

import pytest
from PySide2 import QtCore

from src import main_window

@pytest.fixture(scope='function')
def creat_window(qtbot):
    main = main_window.MainWindow()
    qtbot.addWidget(main)
    main.show()
    qtbot.wait_for_window_shown(main)
    return main

def test_open_file(qtbot, creat_window):
    main = creat_window
    qtbot.mouseClick(main.button, QtCore.Qt.LeftButton)
    # The code under replaces the :func:`QFileDialog.getOpenFileName` function by a ``lambda`` which always returns "file_path, file_type".
    file_path = r"/Downloads/test.pdf"
    file_type = 'Pdf Files (*.pdf)'
    monkeypatch.setattr(QFileDialog, "getOpenFileName", lambda *args: (file_path, file_type))
    ......

相关问题