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
- 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))
- break

