我使用PyQt将QtQuick集成到我的Python应用程序中。我试图找出在Python unittest框架中测试我的QtQuick Qml页面的最佳方法。我想将一个Qml文件列表传递给某个测试函数,以确保这些文件中没有任何错误/异常。目前我正在尝试将页面加载到QQmlComponent中并检查错误,但我还没有能够将其工作:
def test_qml(self):
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
rel = "/gui/QT/Page1.qml"
c = QQmlComponent(engine, QUrl.fromLocalFile(SRC_PATH + os.path.normpath(rel)))
print(c.errors())
此外,根据我所读到的内容,我认为要通过QQmlComponent获取显示错误,我应该在onStatusChange上捕获一个信号然后检查,这对我来说这似乎是错误的方法。尝试在Python中测试qml页面的最佳方法是什么?
答案 0 :(得分:2)
据我所知,您希望使错误消息更具可读性。 errors()
方法返回QQmlError
的列表,此类的方法可以为我们提供准确的错误信息:
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtQml import *
type_error_toString = {
QtDebugMsg: "debug",
QtInfoMsg : "info",
QtWarningMsg : "wargning",
QtCriticalMsg: "critical",
QtFatalMsg: "fatal"
}
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
path = "/path/of/item.qml"
c = QQmlComponent(engine, QUrl.fromLocalFile(path))
if c.isError():
for error in c.errors():
print(error.toString())
print("type: {}, row : {}, column: {}, message: {}"
.format(
type_error_toString[error.messageType()],
error.line(),
error.column(),
error.description())
)