У меня есть окно pyqt, которое отслеживает движение мыши, пока она нажата. Я пытаюсь написать тест для автоматизации этого движения с помощью pytest-qt.
Вот пример класса:
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QCursor
from PyQt5.QtWidgets import QApplication
class Tracker(QDialog):
def __init__(self, parent=None):
super(Tracker, self).__init__(parent)
self.location = None
self.cur = QCursor()
layout = QVBoxLayout()
self.label = QLabel()
layout.addWidget(self.label)
self.setLayout(layout)
self.setModal(True)
self.showFullScreen()
def mouseReleaseEvent(self, e):
x = self.cur.pos().x()
y = self.cur.pos().y()
self.location = (x, y)
return super().mouseReleaseEvent(e)
def mouseMoveEvent(self, e):
x = self.cur.pos().x()
y = self.cur.pos().y()
self.label.setText(f'x: {x}, y: {y}')
return super().mouseMoveEvent(e)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Tracker()
sys.exit(app.exec_())
Я хотел бы написать тестовый пример, который открывает окно, затем перетаскивает мышь на 100 пикселей вправо и отпускает.
Вот что я пробовал:
track = Tracker()
qtbot.mousePress(track, QtCore.Qt.LeftButton, pos=QPoint(300, 300))
qtbot.mouseMove(track, pos=QPoint(400, 300))
qtbot.mouseRelease(track, QtCore.Qt.LeftButton)
assert track.location == (400, 300)
Я также пробовал использовать pyautogui:
track = Tracker()
x, y = pyautogui.position()
pyautogui.dragTo(x + 100, y, button='left')
assert track.location == (x + 100, y)
При запуске теста появляется, что левая кнопка мыши не удерживается при перетаскивании. Метка не будет обновляться, а атрибут местоположения не изменится.