SquishTests: Update tests for Welcome screen

Some tests are failing because of QTCREATORBUG-30466
unless someone resizes Creator's windows manually.

Task-number: QTCREATORBUG-30466
Change-Id: Ibeecc2abd85839be3497691912e411862c465a89
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Robert Löhning
2024-02-29 14:24:40 +01:00
parent 6a59cb891b
commit c5cce4233d
7 changed files with 45 additions and 76 deletions

View File

@@ -9,11 +9,11 @@ def openQbsProject(projectPath):
def openQmakeProject(projectPath, targets=Targets.desktopTargetClasses(), fromWelcome=False): def openQmakeProject(projectPath, targets=Targets.desktopTargetClasses(), fromWelcome=False):
cleanUpUserFiles(projectPath) cleanUpUserFiles(projectPath)
if fromWelcome: if fromWelcome:
wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton('Open Project...') wsButton = getWelcomeScreenSideBarButton('Open Project...')
if not all((wsButtonFrame, wsButtonLabel)): if not object.exists(wsButton):
test.fatal("Could not find 'Open Project...' button on Welcome Page.") test.fatal("Could not find 'Open Project...' button on Welcome Page.")
return [] return []
mouseClick(wsButtonLabel) mouseClick(wsButton)
else: else:
invokeMenuItem("File", "Open File or Project...") invokeMenuItem("File", "Open File or Project...")
selectFromFileDialog(projectPath) selectFromFileDialog(projectPath)
@@ -60,11 +60,11 @@ def __createProjectOrFileSelectType__(category, template, fromWelcome = False, i
if fromWelcome: if fromWelcome:
if not isProject: if not isProject:
test.fatal("'Create Project...' on Welcome screen only handles projects nowadays.") test.fatal("'Create Project...' on Welcome screen only handles projects nowadays.")
wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton("Create Project...") wsButton = getWelcomeScreenSideBarButton("Create Project...")
if not all((wsButtonFrame, wsButtonLabel)): if not object.exists(wsButton):
test.fatal("Could not find 'Create Project...' button on Welcome Page") test.fatal("Could not find 'Create Project...' button on Welcome Page")
return [] return []
mouseClick(wsButtonLabel) mouseClick(wsButton)
elif isProject: elif isProject:
invokeMenuItem("File", "New Project...") invokeMenuItem("File", "New Project...")
else: else:

View File

@@ -4,30 +4,11 @@
def __childrenOfType__(parentObject, typeName): def __childrenOfType__(parentObject, typeName):
return [child for child in object.children(parentObject) if className(child) == typeName] return [child for child in object.children(parentObject) if className(child) == typeName]
def __getWelcomeScreenButtonHelper__(buttonLabel, widgetWithQFrames, isUrlButton = False):
frames = __childrenOfType__(widgetWithQFrames, 'QWidget')
for frame in frames:
childCount = 1 # incorrect but okay for framed sidebar buttons
if isUrlButton:
childCount = len(__childrenOfType__(frame, 'QLabel'))
for occurrence in range(1, childCount + 1):
label = getChildByClass(frame, 'QLabel', occurrence)
if label is None:
continue
if str(label.text) == buttonLabel:
return frame, label
return None, None
def getWelcomeScreenSideBarButton(buttonLabel, isUrlButton = False): def getWelcomeScreenSideBarButton(buttonLabel):
sideBar = waitForObject("{container={type='Welcome::Internal::SideArea' unnamed='1' " return ("{text='%s' type='QPushButton' unnamed='1' visible='1' "
"window=':Qt Creator_Core::Internal::MainWindow'} type='QWidget' " "window=':Qt Creator_Core::Internal::MainWindow'}" % buttonLabel)
"unnamed='1'}")
return __getWelcomeScreenButtonHelper__(buttonLabel, sideBar, isUrlButton)
def getWelcomeScreenBottomButton(buttonLabel):
bottomArea = waitForObject("{type='Welcome::Internal::BottomArea' unnamed='1' "
"window=':Qt Creator_Core::Internal::MainWindow'}")
return __getWelcomeScreenButtonHelper__(buttonLabel, bottomArea, False)
def getWelcomeTreeView(treeViewLabel): def getWelcomeTreeView(treeViewLabel):
try: try:
@@ -37,11 +18,11 @@ def getWelcomeTreeView(treeViewLabel):
return None return None
def switchToSubMode(subModeLabel): def switchToSubMode(subModeLabel):
wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton(subModeLabel) wsButton = getWelcomeScreenSideBarButton(subModeLabel)
frameAndLabelFound = all((wsButtonFrame, wsButtonLabel)) buttonFound = object.exists(wsButton)
if frameAndLabelFound: if buttonFound:
mouseClick(wsButtonLabel) mouseClick(wsButton)
return frameAndLabelFound return buttonFound
def findExampleOrTutorial(tableView, regex, verbose=False): def findExampleOrTutorial(tableView, regex, verbose=False):
filterModel = __childrenOfType__(tableView, 'QSortFilterProxyModel') filterModel = __childrenOfType__(tableView, 'QSortFilterProxyModel')

View File

@@ -14,25 +14,16 @@ def clickItemVerifyHelpCombo(button, expectedHelpComboRegex, testDetails):
test.log("Found %s" % str(helpCombo.currentText)) test.log("Found %s" % str(helpCombo.currentText))
# select "Welcome" page from left toolbar again # select "Welcome" page from left toolbar again
switchViewTo(ViewConstants.WELCOME) switchViewTo(ViewConstants.WELCOME)
wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton(getStarted) return test.verify(object.exists(getWelcomeScreenSideBarButton(getStarted)),
return test.verify(all((wsButtonFrame, wsButtonLabel)),
"Verifying: '%s' button is being displayed." % getStarted) "Verifying: '%s' button is being displayed." % getStarted)
def buttonActive(button): def buttonActive(button):
# colors of the default theme for active button on Welcome page return waitForObject(button).checked
defaultActiveRGB = (69, 206, 85)
# colors of the dark theme for active button on Welcome page
darkActiveRGB = (54, 193, 72)
# QPalette::Window (used background color of Welcome page buttons)
enumQPaletteWindow = 10
color = button.palette.color(enumQPaletteWindow)
current = (color.red, color.green, color.blue)
return current == defaultActiveRGB or current == darkActiveRGB
def waitForButtonsState(projectsActive, examplesActive, tutorialsActive, timeout=5000): def waitForButtonsState(projectsActive, examplesActive, tutorialsActive, timeout=5000):
projButton = getWelcomeScreenSideBarButton('Projects')[0] projButton = getWelcomeScreenSideBarButton('Projects')
exmpButton = getWelcomeScreenSideBarButton('Examples')[0] exmpButton = getWelcomeScreenSideBarButton('Examples')
tutoButton = getWelcomeScreenSideBarButton('Tutorials')[0] tutoButton = getWelcomeScreenSideBarButton('Tutorials')
if not all((projButton, exmpButton, tutoButton)): if not all(map(object.exists, (projButton, exmpButton, tutoButton))):
return False return False
return waitFor('buttonActive(projButton) == projectsActive ' return waitFor('buttonActive(projButton) == projectsActive '
'and buttonActive(exmpButton) == examplesActive ' 'and buttonActive(exmpButton) == examplesActive '
@@ -65,25 +56,25 @@ def main():
buttonsAndState = {'Projects':False, 'Examples':True, 'Tutorials':False} buttonsAndState = {'Projects':False, 'Examples':True, 'Tutorials':False}
for button, state in buttonsAndState.items(): for button, state in buttonsAndState.items():
wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton(button) wsButton = getWelcomeScreenSideBarButton(button)
if test.verify(all((wsButtonFrame, wsButtonLabel)), if test.verify(object.exists(wsButton),
"Verified whether '%s' button is shown." % button): "Verified whether '%s' button is shown." % button):
test.compare(buttonActive(wsButtonFrame), state, test.compare(buttonActive(wsButton), state,
"Verifying whether '%s' button is active (%s)." % (button, state)) "Verifying whether '%s' button is active (%s)." % (button, state))
# select Projects and roughly check this # select Projects and roughly check this
switchToSubMode('Projects') switchToSubMode('Projects')
for button in ['Create Project...', 'Open Project...']: for button in ['Create Project...', 'Open Project...']:
wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton(button) wsButton = getWelcomeScreenSideBarButton(button)
if test.verify(all((wsButtonFrame, wsButtonLabel)), if test.verify(object.exists(wsButton),
"Verified whether '%s' button is shown." % button): "Verified whether '%s' button is shown." % button):
test.verify(not buttonActive(wsButtonFrame), test.verify(not buttonActive(wsButton),
"Verifying whether '%s' button is inactive." % button) "Verifying whether '%s' button is inactive." % button)
wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton(getStarted) wsButton = getWelcomeScreenSideBarButton(getStarted)
if test.verify(all((wsButtonFrame, wsButtonLabel)), if test.verify(object.exists(wsButton),
"Verifying: Qt Creator displays Welcome Page with '%s' button." % getStarted): "Verifying: Qt Creator displays Welcome Page with '%s' button." % getStarted):
if clickItemVerifyHelpCombo(wsButtonLabel, "Getting Started | Qt Creator Manual", if clickItemVerifyHelpCombo(wsButton, "Getting Started | Qt Creator Manual",
"Verifying: Help with Creator Documentation is being opened."): "Verifying: Help with Creator Documentation is being opened."):
textUrls = {'Online Community':'https://forum.qt.io', textUrls = {'Online Community':'https://forum.qt.io',
@@ -92,13 +83,14 @@ def main():
'User Guide':'qthelp://org.qt-project.qtcreator/doc/index.html' 'User Guide':'qthelp://org.qt-project.qtcreator/doc/index.html'
} }
for text, url in textUrls.items(): for text, url in textUrls.items():
button, label = getWelcomeScreenBottomButton(text) button = getWelcomeScreenSideBarButton(text)
if test.verify(all((button, label)), if test.verify(object.exists(button),
"Verifying whether link button (%s) exists." % text): "Verifying whether link button (%s) exists." % text):
test.compare(str(button.toolTip), url, "Verifying URL for %s" % text) test.compare(str(waitForObject(button).toolTip), url,
wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton(getStarted) "Verifying URL for %s" % text)
if wsButtonLabel is not None: wsButton = getWelcomeScreenSideBarButton(getStarted)
mouseClick(wsButtonLabel) if object.exists(wsButton):
mouseClick(wsButton)
qcManualQModelIndexStr = getQModelIndexStr("text~='Qt Creator Manual [0-9.]+'", qcManualQModelIndexStr = getQModelIndexStr("text~='Qt Creator Manual [0-9.]+'",
":Qt Creator_QHelpContentWidget") ":Qt Creator_QHelpContentWidget")
if str(waitForObject(":Qt Creator_HelpSelector_QComboBox").currentText) == "(Untitled)": if str(waitForObject(":Qt Creator_HelpSelector_QComboBox").currentText) == "(Untitled)":
@@ -109,8 +101,7 @@ def main():
# select "Welcome" page from left toolbar again # select "Welcome" page from left toolbar again
switchViewTo(ViewConstants.WELCOME) switchViewTo(ViewConstants.WELCOME)
wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton(getStarted) test.verify(object.exists(getWelcomeScreenSideBarButton(getStarted)),
test.verify(wsButtonFrame is not None and wsButtonLabel is not None,
"Verifying: Getting Started topic is being displayed.") "Verifying: Getting Started topic is being displayed.")
# select Examples and roughly check them # select Examples and roughly check them
switchToSubMode('Examples') switchToSubMode('Examples')

View File

@@ -6,8 +6,7 @@ source("../../shared/qtcreator.py")
def checkTypeAndProperties(typePropertiesDetails): def checkTypeAndProperties(typePropertiesDetails):
for (qType, props, detail) in typePropertiesDetails: for (qType, props, detail) in typePropertiesDetails:
if qType == "QPushButton": if qType == "QPushButton":
wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton(props) test.verify(object.exists(getWelcomeScreenSideBarButton(props)),
test.verify(all((wsButtonFrame, wsButtonLabel)),
"Verifying: Qt Creator displays Welcome Page with %s." % detail) "Verifying: Qt Creator displays Welcome Page with %s." % detail)
elif qType == 'QTreeView': elif qType == 'QTreeView':
treeView = getWelcomeTreeView(props) treeView = getWelcomeTreeView(props)
@@ -59,8 +58,8 @@ def main():
) )
checkTypeAndProperties(typePropDet) checkTypeAndProperties(typePropDet)
getStartedF, getStartedL = getWelcomeScreenSideBarButton("Get Started") test.verify(object.exists(getWelcomeScreenSideBarButton("Get Started")),
test.verify(getStartedF is not None and getStartedL is not None, "'Get Started' button found") "'Get Started' button found")
# select "Create Project" and try to create a new project # select "Create Project" and try to create a new project
createNewQtQuickApplication(tempDir(), "SampleApp", fromWelcome = True) createNewQtQuickApplication(tempDir(), "SampleApp", fromWelcome = True)

View File

@@ -55,8 +55,7 @@ def main():
qchs.extend([os.path.join(p, "qtopengl.qch"), os.path.join(p, "qtwidgets.qch")]) qchs.extend([os.path.join(p, "qtopengl.qch"), os.path.join(p, "qtwidgets.qch")])
addHelpDocumentation(qchs) addHelpDocumentation(qchs)
setFixedHelpViewer(HelpViewer.HELPMODE) setFixedHelpViewer(HelpViewer.HELPMODE)
wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton('Get Started') if not test.verify(object.exists(getWelcomeScreenSideBarButton('Get Started')),
if not test.verify(all((wsButtonFrame, wsButtonLabel)),
"Verifying: Qt Creator displays Welcome Page with Getting Started."): "Verifying: Qt Creator displays Welcome Page with Getting Started."):
test.fatal("Something's wrong - leaving test.") test.fatal("Something's wrong - leaving test.")
invokeMenuItem("File", "Exit") invokeMenuItem("File", "Exit")

View File

@@ -15,8 +15,7 @@ def main():
startQC() startQC()
if not startedWithoutPluginError(): if not startedWithoutPluginError():
return return
wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton('Get Started') if not test.verify(object.exists(getWelcomeScreenSideBarButton('Get Started')),
if not test.verify(all((wsButtonFrame, wsButtonLabel)),
"Verifying: Qt Creator displays Welcome Page with Getting Started."): "Verifying: Qt Creator displays Welcome Page with Getting Started."):
test.fatal("Something's wrong - leaving test.") test.fatal("Something's wrong - leaving test.")
invokeMenuItem("File", "Exit") invokeMenuItem("File", "Exit")

View File

@@ -84,11 +84,11 @@ def createAndSwitchToSession(toSession):
def checkWelcomePage(sessionName, isCurrent=False): def checkWelcomePage(sessionName, isCurrent=False):
switchViewTo(ViewConstants.WELCOME) switchViewTo(ViewConstants.WELCOME)
wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton('Projects') wsButton = getWelcomeScreenSideBarButton('Projects')
if not all((wsButtonFrame, wsButtonLabel)): if not object.exists(wsButton):
test.fatal("Something's pretty wrong - leaving check for WelcomePage.") test.fatal("Something's pretty wrong - leaving check for WelcomePage.")
return return
mouseClick(wsButtonLabel) mouseClick(wsButton)
treeView = getWelcomeTreeView("Sessions") treeView = getWelcomeTreeView("Sessions")
if not treeView: if not treeView:
test.fatal("Failed to find Sessions tree view - leaving check for WelcomePage.") test.fatal("Failed to find Sessions tree view - leaving check for WelcomePage.")