Squish/Navigating a QDateEdit

From Qt Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.


Navigating a QDateEdit

Interacting with a QDateEdit from a Squish script is a bit more involved than just clicking a button or writing some text into a line edit, especially if you want a nice scripting API for it as well. Below is a script function that you can cut-and-paste into your existing test case or shared script, and use without modifications. It requires you to have recorded one interaction with a QDateEdit though, to have the proper names in the object map.

Usage would be:

setDate(":nameOfQDateEdit", "2011", "April", "1")
def setDate(dateedit, year, month, day):
  waitFor("object.exists(dateedit)", 20000)
  dateExpandX = findObject(dateedit).width - 10
  sendEvent("QMouseEvent", waitForObject(dateedit), QEvent.MouseButtonPress, dateExpandX, 15, Qt.LeftButton, 0)
  sendEvent("QMouseEvent", waitForObject(dateedit), QEvent.MouseButtonRelease, dateExpandX, 15, Qt.LeftButton, 0)

  yearToolButtonName = "{name='qt_calendar_yearbutton' type='QToolButton' visible='1' window=':qt_datetimedit_calendar_QCalendarPopup'}"
  clickButton(waitForObject(yearToolButtonName))
  yearEditSpinBoxName = "{name='qt_calendar_yearedit' type='QSpinBox' visible='1' window=':qt_datetimedit_calendar_QCalendarPopup'}"
  type(waitForObject(yearEditSpinBoxName), year)
  type(waitForObject(yearEditSpinBoxName), "<Return>")

  monthToolButtonName = "{name='qt_calendar_monthbutton' type='QToolButton' visible='1' window=':qt_datetimedit_calendar_QCalendarPopup'}"
  clickButton(waitForObject(monthToolButtonName))
  monthMenuName = "{type='QMenu' unnamed='1' visible='1' window=':qt_datetimedit_calendar_QCalendarPopup'}"
  activateItem(waitForObjectItem(monthMenuName, month))

  calendarViewName = "{name='qt_calendar_calendarview' type='QCalendarView' visible='1' window=':qt_datetimedit_calendar_QCalendarPopup'}"
  waitFor("object.exists(calendarViewName)", 20000)
  model = findObject(calendarViewName).model()
  seenOne = False
  for row in range(1, model.rowCount() - 1): # First row contains day names, let's skip it
    for col in range(model.columnCount()):
      dayText = model.data(model.index(row, col)).toString()

      if dayText == "1": # Some dates from last month may be seen, so make sure we've iterated
        seenOne = True # past them before we actually click an item

      if seenOne and dayText == day:
        waitForObjectItem(calendarViewName, "s/%s" (row, col))
        clickItem(calendarViewName, "s/%s" (row, col), 14, 11, 0, Qt.LeftButton)