Skip to content

Commit 2d2e195

Browse files
committed
PB-365: Templates MFTF Test Coverage
- Adding ceate & apply template mftf test - Adding template save & apply action groups, data, elements
1 parent 49a4a47 commit 2d2e195

File tree

6 files changed

+257
-0
lines changed

6 files changed

+257
-0
lines changed

app/code/Magento/PageBuilder/Test/Mftf/ActionGroup/StageActionGroup.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,4 +173,9 @@
173173
<reloadPage stepKey="reloadPage"/>
174174
<waitForPageLoad stepKey="waitForPageLoad"/>
175175
</actionGroup>
176+
<actionGroup name="verifyEmptyStage">
177+
<waitForPageLoad stepKey="waitForStageLoad"/>
178+
<seeElement selector="{{RowOnStage.empty('1')}}" stepKey="seeEmptyRow"/>
179+
<seeNumberOfElements userInput="1" selector="{{RowOnStage.allRows}}" stepKey="seeOnlyOneRow"/>
180+
</actionGroup>
176181
</actionGroups>
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="openSaveTemplateModal">
12+
<waitForElementVisible selector="{{PageBuilderStage.saveAsTemplateButton}}" stepKey="waitForSaveAsTemplateButton"/>
13+
<click selector="{{PageBuilderStage.saveAsTemplateButton}}" stepKey="clickSaveAsTemplateButton"/>
14+
<waitForPageLoad stepKey="waitForModalLoad"/>
15+
<waitForElementVisible selector="{{PageBuilderSaveTemplateModal.activeModal}}" stepKey="waitForModalVisible"/>
16+
<see userInput="Save Content as Template" selector="{{PageBuilderSaveTemplateModal.title}}" stepKey="seeTitle"/>
17+
<waitForPageLoad stepKey="waitForPreviewLoad"/>
18+
</actionGroup>
19+
<actionGroup name="fillSaveTemplateForm">
20+
<arguments>
21+
<argument name="templateName" defaultValue="{{PageBuilderTemplateNameRandom.name}}" type="string"/>
22+
<argument name="createdFor" defaultValue="{{PageBuilderTemplateCreatedFor.any}}" type="string"/>
23+
</arguments>
24+
<waitForPageLoad stepKey="waitForModalLoad"/>
25+
<waitForElement selector="{{PageBuilderSaveTemplateModal.templateNameInput}}" stepKey="waitForTemplateName"/>
26+
<fillField userInput="{{templateName}}" selector="{{PageBuilderSaveTemplateModal.templateNameInput}}" stepKey="enterTemplateName"/>
27+
<waitForElement selector="{{PageBuilderSaveTemplateModal.createdForSelect}}" stepKey="waitForCreatedFor"/>
28+
<selectOption userInput="{{createdFor}}" selector="{{PageBuilderSaveTemplateModal.createdForSelect}}" stepKey="selectCreatedFor"/>
29+
</actionGroup>
30+
<actionGroup name="validateSaveTemplateModal">
31+
<waitForPageLoad stepKey="waitForModalLoad"/>
32+
<see userInput="Save Content as Template" selector="{{PageBuilderSaveTemplateModal.title}}" stepKey="seeTitle"/>
33+
<seeElement selector="{{PageBuilderSaveTemplateModal.closeButton}}" stepKey="seeCloseButton"/>
34+
<seeElement selector="{{PageBuilderSaveTemplateModal.previewImage}}" stepKey="seePreview"/>
35+
<!-- todo: validate preview image not error -->
36+
<seeElement selector="{{PageBuilderSaveTemplateModal.templateNameInput}}" stepKey="seeTemplateNameInput"/>
37+
<seeElement selector="{{PageBuilderSaveTemplateModal.createdForSelect}}" stepKey="seeCreatedForSelect"/>
38+
<see userInput="Created For is to help with filtering templates. This does not restrict where this template can be used." selector="{{PageBuilderSaveTemplateModal.createdForHelperText}}" stepKey="seeCreatedForHelperText"/>
39+
<seeElement selector="{{PageBuilderSaveTemplateModal.saveButton}}" stepKey="seeSaveButton"/>
40+
<seeElement selector="{{PageBuilderSaveTemplateModal.cancelButton}}" stepKey="seeCancelButton"/>
41+
</actionGroup>
42+
<actionGroup name="clickSaveOnSaveTemplateModal">
43+
<waitForPageLoad stepKey="waitForModalLoad"/>
44+
<waitForElement selector="{{PageBuilderSaveTemplateModal.saveButton}}" stepKey="waitForSaveButton"/>
45+
<click selector="{{PageBuilderSaveTemplateModal.saveButton}}" stepKey="clickSaveButton"/>
46+
<waitForPageLoad stepKey="waitForModalClose"/>
47+
<waitForElementVisible selector="{{PageBuilderSaveTemplateConfirmationModal.modal}}" stepKey="waitForConfirmationModal"/>
48+
</actionGroup>
49+
<actionGroup name="validateSaveTemplateConfirmationModal">
50+
<waitForPageLoad stepKey="waitForModalLoad"/>
51+
<seeElement selector="{{PageBuilderSaveTemplateConfirmationModal.title}}" stepKey="seeTitle"/>
52+
<seeElement selector="{{PageBuilderSaveTemplateConfirmationModal.closeButton}}" stepKey="seeCloseButton"/>
53+
<seeElement selector="{{PageBuilderSaveTemplateConfirmationModal.message}}" stepKey="seeMessage"/>
54+
<seeElement selector="{{PageBuilderSaveTemplateConfirmationModal.okButton}}" stepKey="seeOKButton"/>
55+
</actionGroup>
56+
<actionGroup name="saveTemplate">
57+
<arguments>
58+
<argument name="baseContent" defaultValue="{{CmsNewPagePageActionsSection.saveAndContinueEdit}}" type="string"/>
59+
</arguments>
60+
<waitForPageLoad stepKey="waitForModalLoad"/>
61+
<waitForElement selector="{{PageBuilderSaveTemplateModal.saveButton}}" stepKey="waitForSaveButton"/>
62+
<click selector="{{PageBuilderSaveTemplateModal.saveButton}}" stepKey="clickSaveButton"/>
63+
<waitForPageLoad stepKey="waitForModalClose"/>
64+
<waitForElementVisible selector="{{PageBuilderSaveTemplateConfirmationModal.okButton}}" stepKey="waitForOKButton"/>
65+
<click selector="{{PageBuilderSaveTemplateConfirmationModal.okButton}}" stepKey="clickOKButton"/>
66+
<waitForPageLoad stepKey="waitForModalGone"/>
67+
<waitForElementNotVisible time="5" selector="{{PageBuilderSaveTemplateConfirmationModal.modal}}" stepKey="waitForModalNotVisible"/>
68+
<waitForElementVisible time="10" selector="{{baseContent}}" stepKey="waitForContentUnderModalVisible"/>
69+
</actionGroup>
70+
<actionGroup name="closeSaveTemplateModal">
71+
<arguments>
72+
<argument name="baseContent" defaultValue="{{CmsNewPagePageActionsSection.saveAndContinueEdit}}" type="string"/>
73+
</arguments>
74+
<waitForPageLoad stepKey="waitForModalLoad"/>
75+
<waitForElementVisible selector="{{PageBuilderSaveTemplateModal.closeButton}}" stepKey="waitForCloseButton"/>
76+
<click selector="{{PageBuilderSaveTemplateModal.closeButton}}" stepKey="clickCloseButton"/>
77+
<waitForPageLoad stepKey="waitForModalClose"/>
78+
<waitForElementNotVisible time="5" selector="{{PageBuilderSaveTemplateModal.activeModal}}" stepKey="waitForModalNotVisible"/>
79+
<waitForElementVisible time="10" selector="{{baseContent}}" stepKey="waitForContentUnderModalVisible"/>
80+
</actionGroup>
81+
<actionGroup name="openApplyTemplateSlideOut">
82+
<waitForElementVisible selector="{{PageBuilderStage.applyTemplateButton}}" stepKey="waitForApplyTemplateButton"/>
83+
<click selector="{{PageBuilderStage.applyTemplateButton}}" stepKey="clickApplyTemplateButton"/>
84+
<waitForPageLoad stepKey="waitForSlideOutLoad"/>
85+
<waitForElementVisible selector="{{PageBuilderApplyTemplateSlideOut.activeSlideOut}}" stepKey="waitForSlideOut"/>
86+
<see userInput="Apply Template" selector="{{PageBuilderApplyTemplateSlideOut.title}}" stepKey="seeTitle"/>
87+
<waitForPageLoad stepKey="waitForSlideOutForm"/>
88+
</actionGroup>
89+
<actionGroup name="clickApplyTemplateFromSlideOut">
90+
<arguments>
91+
<argument name="templateIdentifier" defaultValue="{{PageBuilderTemplateNameRandom.name}}" type="string"/>
92+
</arguments>
93+
<waitForPageLoad stepKey="waitForSlideOutLoad"/>
94+
<waitForElementVisible selector="{{PageBuilderApplyTemplateGrid.applyButton(templateIdentifier)}}" stepKey="waitForApplyButton"/>
95+
<click selector="{{PageBuilderApplyTemplateGrid.applyButton(templateIdentifier)}}" stepKey="clickApplyButton"/>
96+
<waitForPageLoad stepKey="waitForPageLoad"/>
97+
</actionGroup>
98+
<actionGroup name="confirmApplyTemplateFromSlideOut" extends="confirmRemovalModal">
99+
<arguments>
100+
<argument name="baseContent" defaultValue="{{CmsNewPagePageActionsSection.saveAndContinueEdit}}" type="string"/>
101+
</arguments>
102+
<waitForElementNotVisible time="5" selector="{{PageBuilderApplyTemplateSlideOut.slideOut}}" stepKey="waitForSlideOutNotVisible" after="waitForPageLoad2"/>
103+
<waitForElementVisible time="10" selector="{{baseContent}}" stepKey="waitForContentUnderSlideOutVisible" after="waitForSlideOutNotVisible"/>
104+
</actionGroup>
105+
<actionGroup name="closeApplyTemplateSlideOut">
106+
<arguments>
107+
<argument name="baseContent" defaultValue="{{CmsNewPagePageActionsSection.saveAndContinueEdit}}" type="string"/>
108+
</arguments>
109+
<waitForPageLoad stepKey="waitForSlideOutLoad"/>
110+
<waitForElementVisible selector="{{PageBuilderApplyTemplateSlideOut.closeButton}}" stepKey="waitForCloseButton"/>
111+
<click selector="{{PageBuilderApplyTemplateSlideOut.closeButton}}" stepKey="clickCloseButton"/>
112+
<waitForPageLoad stepKey="waitForSlideOutClose"/>
113+
<waitForElementNotVisible time="5" selector="{{PageBuilderApplyTemplateSlideOut.slideOut}}" stepKey="waitForSlideOutNotVisible"/>
114+
<waitForElementVisible time="10" selector="{{baseContent}}" stepKey="waitForContentUnderSlideOutVisible"/>
115+
</actionGroup>
116+
</actionGroups>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<entities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:DataGenerator/etc/dataProfileSchema.xsd">
11+
<!-- Template Name -->
12+
<entity name="PageBuilderTemplateNameRandom" type="pagebuilder_template_name_property">
13+
<data key="name" unique="suffix">MFTF Template</data>
14+
</entity>
15+
<!-- Template Created For -->
16+
<entity name="PageBuilderTemplateCreatedFor" type="pagebuilder_template_created_for_property">
17+
<data key="any">Any</data>
18+
<data key="page">Page</data>
19+
<data key="product">Product</data>
20+
<data key="category">Category</data>
21+
<data key="block">Block</data>
22+
<data key="dynamicBlock">Dynamic Block</data>
23+
</entity>
24+
</entities>

app/code/Magento/PageBuilder/Test/Mftf/Section/PageBuilderStageSection.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd">
1111
<section name="PageBuilderStage">
1212
<element name="imageSource" type="text" selector="//img[contains(@src,'{{var1}}')]" parameterized="true"/>
13+
<element name="applyTemplateButton" type="button" selector="//button[contains(@data-bind,'toggleTemplateManger') and .='Apply Template']"/>
14+
<element name="saveAsTemplateButton" type="button" selector="//button[contains(@data-bind,'saveAsTemplate') and .='Save as Template']"/>
1315
<element name="openFullScreen" type="button" selector="//i[@class='icon-pagebuilder-fullscreen']"/>
1416
<element name="exitFullScreen" type="button" selector=".pagebuilder-header .icon-pagebuilder-fullscreen-exit"/>
1517
<element name="stageLoading" type="button" selector="div.pagebuilder-stage-loading"/>
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd">
11+
<section name="PageBuilderSaveTemplateModal">
12+
<element name="modal" type="text" selector="//aside[contains(@class,'template-manager-save')]"/>
13+
<element name="activeModal" type="text" selector="//aside[contains(@class,'template-manager-save') and contains(@class,'_show')]"/>
14+
<element name="title" type="text" selector="//aside[contains(@class,'template-manager-save') and contains(@class,'_show')]//header//h1"/>
15+
<element name="closeButton" type="button" selector="//aside[contains(@class,'template-manager-save') and contains(@class,'_show')]//header//button[contains(@class,'action-close')]//span[.='Close']"/>
16+
<element name="previewImage" type="text" selector="//aside[contains(@class,'template-manager-save') and contains(@class,'_show')]//*[@data-role='content']//form//img[@alt='Template Preview']"/>
17+
<element name="templateNameInput" type="text" selector="//aside[contains(@class,'template-manager-save') and contains(@class,'_show')]//*[@data-role='content']//form//input[@name='name']"/>
18+
<element name="createdForSelect" type="text" selector="//aside[contains(@class,'template-manager-save') and contains(@class,'_show')]//*[@data-role='content']//form//select[@name='created_for']"/>
19+
<element name="createdForHelperText" type="text" selector="//aside[contains(@class,'template-manager-save') and contains(@class,'_show')]//*[@data-role='content']//form//select[@name='created_for']//..//..//span"/>
20+
<element name="saveButton" type="button" selector="//aside[contains(@class,'template-manager-save') and contains(@class,'_show')]//footer//button[contains(@class,'action-save')]//span[.='Save']"/>
21+
<element name="cancelButton" type="button" selector="//aside[contains(@class,'template-manager-save') and contains(@class,'_show')]//footer//button[contains(@class,'action-dismiss')]//span[.='Cancel']"/>
22+
</section>
23+
<section name="PageBuilderSaveTemplateConfirmationModal">
24+
<element name="modal" type="text" selector="//aside[contains(@class,'confirm')]"/>
25+
<element name="title" type="text" selector="//aside[contains(@class,'confirm')]//header//h1"/>
26+
<element name="closeButton" type="button" selector="//aside[contains(@class,'confirm')]//header//button[contains(@class,'action-close')]//span[.='Close']"/>
27+
<element name="message" type="text" selector="//aside[contains(@class,'confirm')]//*[@data-role='content']//*"/>
28+
<element name="okButton" type="button" selector="//aside[contains(@class,'confirm')]//footer//button//span[.='OK']"/>
29+
</section>
30+
<section name="PageBuilderApplyTemplateSlideOut">
31+
<element name="slideOut" type="text" selector="//aside[contains(@class,'pagebuilder_stage_template_pagebuilder_stage_template_modal')]"/>
32+
<element name="activeSlideOut" type="text" selector="//aside[contains(@class,'pagebuilder_stage_template_pagebuilder_stage_template_modal') and contains(@class,'_show')]"/>
33+
<element name="title" type="text" selector="//aside[contains(@class,'pagebuilder_stage_template_pagebuilder_stage_template_modal')]//header//h1"/>
34+
<element name="closeButton" type="text" selector="//aside[contains(@class,'pagebuilder_stage_template_pagebuilder_stage_template_modal')]//header//button[contains(@class,'action-close')]//span[.='Close']"/>
35+
<!-- todo: filter stuff -->
36+
</section>
37+
<section name="PageBuilderApplyTemplateGrid">
38+
<!-- <element name="emptyGridMessage" type="text" parameterized="true" selector="//table[@data-role='grid']//td[@class='pagebuilder-empty-dynamic-row' and @align='center' and .='{{arg1}}']"/>-->
39+
<element name="base" type="text" selector="//table[@data-role='grid']"/>
40+
<element name="columnHeader" type="text" parameterized="true" selector="//table[@data-role='grid']//thead//th[{{columnIndex}}]//span[.='{{columnName}}']"/>
41+
<element name="pagination" type="text" selector=".admin__data-grid-pager"/>
42+
<element name="paginationLeftButton" type="button" selector=".admin__data-grid-pager button.action-previous"/>
43+
<element name="paginationRightButton" type="button" selector=".admin__data-grid-pager button.action-next"/>
44+
<element name="paginationPage" type="input" selector=".admin__data-grid-pager input.admin__control-text"/>
45+
<element name="paginationTotalPages" type="text" parameterized="true" selector="//div[@class='admin__data-grid-pager']//label[@class='admin__control-support-text' and .='of {{total}}']"/>
46+
<element name="allRows" type="text" selector="//table[@data-role='grid']//tbody//tr"/>
47+
<element name="applyButton" type="button" parameterized="true" selector="//tr//div[text()='{{textInRow}}']/parent::td/parent::tr//button[text()='Apply']"/>
48+
</section>
49+
</sections>
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
11+
<test name="PageBuilderCMSPageCreateAndApplyTemplate">
12+
<annotations>
13+
<features value="PageBuilder"/>
14+
<stories value="CMS Page"/>
15+
<title value="Create and Apply Page Builder Template to CMS Page"/>
16+
<description value="Verify that user can create and apply a Page Builder template to a CMS Page's content"/>
17+
<severity value="CRITICAL"/>
18+
<useCaseId value="PB-341"/>
19+
<testCaseId value="MC-30501"/>
20+
<group value="pagebuilder"/>
21+
<group value="pagebuilder-templates"/>
22+
<group value="pagebuilder-cms-page"/>
23+
</annotations>
24+
<before>
25+
<createData entity="_emptyCmsPage" stepKey="createCMSPage"/>
26+
<actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/>
27+
<actionGroup ref="NavigateToCreatedCMSPageActionGroup" stepKey="navigateToCreatedCMSPage">
28+
<argument name="CMSPage" value="$$createCMSPage$$"/>
29+
</actionGroup>
30+
<actionGroup ref="switchToPageBuilderStage" stepKey="switchToPageBuilderStage"/>
31+
<actionGroup ref="expandPageBuilderPanelMenuSection" stepKey="expandPageBuilderPanelMenuSection">
32+
<argument name="contentType" value="PageBuilderButtonsContentType"/>
33+
</actionGroup>
34+
<actionGroup ref="dragContentTypeToStage" stepKey="dragContentTypeToStage">
35+
<argument name="contentType" value="PageBuilderButtonsContentType"/>
36+
</actionGroup>
37+
<seeElement selector="{{ButtonItemOnStage.emptyButtonItemElement('1')}}" stepKey="seeEmptyButton"/>
38+
</before>
39+
<after>
40+
<deleteData createDataKey="createCMSPage" stepKey="deleteCreatedCategory"/>
41+
<actionGroup ref="logout" stepKey="logout"/>
42+
</after>
43+
<!-- Save Template -->
44+
<actionGroup ref="openSaveTemplateModal" stepKey="openSaveTemplateModal"/>
45+
<actionGroup ref="fillSaveTemplateForm" stepKey="fillSaveTemplateForm"/>
46+
<actionGroup ref="saveTemplate" stepKey="saveTemplate"/>
47+
<!-- Go to CMS Page -->
48+
<actionGroup ref="NavigateToCreatedCMSPageActionGroup" stepKey="navigateToCreatedCMSPage">
49+
<argument name="CMSPage" value="$$createCMSPage$$"/>
50+
</actionGroup>
51+
<actionGroup ref="switchToPageBuilderStage" stepKey="switchToPageBuilderStage"/>
52+
<!-- Validate Stage Empty -->
53+
<actionGroup ref="verifyEmptyStage" stepKey="verifyEmptyStage"/>
54+
<!-- Apply Template -->
55+
<actionGroup ref="openApplyTemplateSlideOut" stepKey="openApplyTemplateSlideOut"/>
56+
<actionGroup ref="clickApplyTemplateFromSlideOut" stepKey="clickApplyTemplateFromSlideOut"/>
57+
<actionGroup ref="confirmApplyTemplateFromSlideOut" stepKey="confirmApplyTemplateFromSlideOut"/>
58+
<!-- Validate Stage -->
59+
<seeElement selector="{{ButtonItemOnStage.emptyButtonItemElement('1')}}" stepKey="seeEmptyButton"/>
60+
</test>
61+
</tests>

0 commit comments

Comments
 (0)