gpt4 book ai didi

python - 如何使用 QTest 发送菜单项的键盘快捷键?

转载 作者:行者123 更新时间:2023-11-28 20:31:35 40 4
gpt4 key购买 nike

在单元测试中,我尝试发送键盘快捷键 Command+N(在 Mac OS 上),它对应于我的应用程序中的菜单项。我正在使用 PySide.QtTest 模块。

在下面的代码中,我使用了 QTest.keyClicks,它没有产生我所期望的结果。不调用快捷方式对应的 Action 。

class AppTestCase(TestCase):

def setUp(self):
qApp = QApplication.instance()
if qApp is None:
self.app = QApplication([])
else:
self.app = qApp

class IdfEditorTestCase(th.AppTestCase):

def setUp(self):
super(IdfEditorTestCase, self).setUp()
self.window = IdfEditorWindow()

def test_input_object_in_new_file(self):
if os.path.exists("current_running_test.idf"):
os.remove("current_running_test.idf")

self.window.selectClass("ScheduleTypeLimits")
QTest.keyClicks(self.window, "n", Qt.ControlModifier)
self.window.saveFileAs("current_running_test.idf")
self.assertIdfFileContentEquals("current_running_test.idf", "ScheduleTypeLimits,,,,,;\n")

一些问题:

  • 我应该将它发送到窗口本身吗?或者到菜单栏?两者似乎都不起作用......
  • 这是发送键盘快捷键的正确方式吗?

最佳答案

对于“正常”的按键测试(比如在行编辑中输入文本),没有必要显示窗口。如果您在应用程序的正常运行期间将关键事件发送到隐藏的小部件,这符合您的预期。

但对于测试快捷方式,目标窗口必须 显示 - 这再次符合您的预期。如果目标窗口不可见,键盘快捷键不应在正常运行期间激活命令。

因此您的设置代码可能应该包含如下内容:

    self.window.show()
QTest.qWaitForWindowShown(self.window)

qWaitForWindowShown在异步显示窗口的系统上调用是必需的(对于 Qt5,使用 qWaitForWindowExposed )。

编辑:

这是一个适合我的测试脚本:

import unittest
from PySide.QtCore import Qt
from PySide.QtGui import QApplication, QMainWindow, QLineEdit
from PySide.QtTest import QTest

class Window(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
menu = self.menuBar().addMenu('File')
menu.addAction('Test', self.handleTest, 'Ctrl+N')
self.edit = QLineEdit(self)
self.setCentralWidget(self.edit)

def handleTest(self):
self.edit.setText('test')

class AppTestCase(unittest.TestCase):
def setUp(self):
qApp = QApplication.instance()
if qApp is None:
self.app = QApplication([])
else:
self.app = qApp

class WindowTestCase(AppTestCase):
def setUp(self):
super(WindowTestCase, self).setUp()
self.window = Window()
self.window.show()
QTest.qWaitForWindowShown(self.window)

def test_input_object_in_new_file(self):
text = 'test'
self.assertNotEqual(text, self.window.edit.text())
QTest.keyClicks(self.window, 'n', Qt.ControlModifier)
self.assertEqual(text, self.window.edit.text())

def test_enter_text(self):
text = 'foobar'
self.assertNotEqual(text, self.window.edit.text())
QTest.keyClicks(self.window.edit, text)
self.assertEqual(text, self.window.edit.text())

if __name__ == "__main__":

unittest.main()

更新:

这是上述脚本的 PyQt5 版本:

import unittest
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit
from PyQt5.QtTest import QTest

class Window(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
menu = self.menuBar().addMenu('File')
menu.addAction('Test', self.handleTest, 'Ctrl+N')
self.edit = QLineEdit(self)
self.setCentralWidget(self.edit)

def handleTest(self):
self.edit.setText('test')

class AppTestCase(unittest.TestCase):
def setUp(self):
qApp = QApplication.instance()
if qApp is None:
self.app = QApplication([''])
else:
self.app = qApp

class WindowTestCase(AppTestCase):
def setUp(self):
super(WindowTestCase, self).setUp()
self.window = Window()
self.window.show()
QTest.qWaitForWindowExposed(self.window)

def test_input_object_in_new_file(self):
text = 'test'
self.assertNotEqual(text, self.window.edit.text())
QTest.keyClicks(self.window, 'n', Qt.ControlModifier)
self.assertEqual(text, self.window.edit.text())

def test_enter_text(self):
text = 'foobar'
self.assertNotEqual(text, self.window.edit.text())
QTest.keyClicks(self.window.edit, text)
self.assertEqual(text, self.window.edit.text())

if __name__ == "__main__":

unittest.main()

关于python - 如何使用 QTest 发送菜单项的键盘快捷键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20731054/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com