Skip to content

Commit dd4aba1

Browse files
committed
MC-3329: Add Missing P0-P1 MFTF Tests For PageBuilder On Catalog Product (Description, Short Description, Attribute)
- Adding mftf test PageBuilderWorksForEachProductAttribute - Adding/updating supporting actiongroups, data, sections
1 parent 82bc558 commit dd4aba1

8 files changed

+295
-36
lines changed

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

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@
1212
<arguments>
1313
<argument name="attributeCode" defaultValue="description" type="string"/>
1414
<argument name="section" defaultValue="PageBuilderProductAttribute"/>
15+
<argument name="pageBuilderArea" defaultValue="" type="string"/>
1516
</arguments>
1617
<comment userInput="Opening Page Builder for attribute" stepKey="commentOpeningPageBuilder"/>
1718
<waitForElementVisible selector="{{section.PageBuilderBtn(attributeCode)}}" stepKey="waitForPageBuilderButton"/>
1819
<click selector="{{section.PageBuilderBtn(attributeCode)}}" stepKey="clickOpenPageBuilder"/>
1920
<waitForPageLoad stepKey="waitForPageBuilderToOpen"/>
20-
<waitForElementVisible selector="{{PageBuilderPanel.layoutGroup}}" stepKey="waiForPageBuilderVisible"/>
21+
<waitForElementVisible selector="{{pageBuilderArea}}{{PageBuilderPanel.layoutGroup}}" stepKey="waiForPageBuilderVisible"/>
2122
</actionGroup>
2223
<actionGroup name="expandAdminProductSection">
2324
<!-- This goes in CE repo -->
@@ -57,4 +58,31 @@
5758
<amOnPage url="{{AdminProductIndexPage.url}}" before="clickClearFilters" stepKey="goToAdminProductIndexPage"/>
5859
<waitForPageLoad after="goToAdminProductIndexPage" stepKey="waitForProductIndexPageToLoad"/>
5960
</actionGroup>
61+
<actionGroup name="saveProductAttribute">
62+
<!-- This goes in CE repo -->
63+
<waitForElementVisible selector="{{AttributePropertiesSection.Save}}" stepKey="waitForSaveButton"/>
64+
<click selector="{{AttributePropertiesSection.Save}}" stepKey="clickSaveButton"/>
65+
<waitForPageLoad stepKey="waitForAttributeToSave"/>
66+
<seeElement selector="{{AdminProductMessagesSection.successMessage}}" stepKey="seeSuccessMessage"/>
67+
</actionGroup>
68+
<actionGroup name="confirmChangeInputTypeModal">
69+
<!-- This goes in CE repo -->
70+
<waitForElementVisible selector="{{AdminEditProductAttributesSection.ProductDataMayBeLostConfirmButton}}" stepKey="waitForChangeInputTypeButton"/>
71+
<click selector="{{AdminEditProductAttributesSection.ProductDataMayBeLostConfirmButton}}" stepKey="clickChangeInputTypeButton"/>
72+
<waitForElementNotVisible selector="{{AdminEditProductAttributesSection.ProductDataMayBeLostModal}}" stepKey="waitForChangeInputTypeModalGone"/>
73+
</actionGroup>
74+
<actionGroup name="saveProductAttributeInUse">
75+
<!-- This goes in CE repo -->
76+
<waitForElementVisible selector="{{AttributePropertiesSection.Save}}" stepKey="waitForSaveButton"/>
77+
<click selector="{{AttributePropertiesSection.Save}}" stepKey="clickSaveButton"/>
78+
<waitForPageLoad stepKey="waitForAttributeToSave"/>
79+
<seeElement selector="{{AdminProductMessagesSection.successMessage}}" stepKey="seeSuccessMessage"/>
80+
</actionGroup>
81+
<actionGroup name="NavigateToAndResetProductAttributeGridToDefaultView">
82+
<!-- This goes in CE repo -->
83+
<amOnPage url="{{AdminProductAttributeGridPage.url}}" stepKey="navigateToProductAttributeGrid"/>
84+
<waitForPageLoad stepKey="waitForPageLoad"/>
85+
<conditionalClick selector="{{AdminProductGridFilterSection.clearFilters}}" dependentSelector="{{AdminProductGridFilterSection.clearFilters}}" visible="true" stepKey="clickClearFilters"/>
86+
<waitForPageLoad stepKey="waitForGridLoad"/>
87+
</actionGroup>
6088
</actionGroups>

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,11 @@
4949
<argument name="index" defaultValue="1" type="string"/>
5050
<argument name="headingType" defaultValue="PageBuilderHeadingTypeDefaultProperty"/>
5151
<argument name="headingAlignment" defaultValue="PageBuilderHeadingAlignmentProperty_left"/>
52+
<argument name="pageBuilderArea" defaultValue="" type="string"/>
5253
</arguments>
5354
<comment userInput="Click outside heading editable area" stepKey="commentClickOutside"/>
54-
<moveMouseOver selector="{{PageBuilderPanel.searchPanel}}" stepKey="moveMouseOutsideLiveEdit"/>
55-
<click selector="{{PageBuilderPanel.searchPanel}}" stepKey="clickOutsideLiveEdit"/>
55+
<moveMouseOver selector="{{pageBuilderArea}}{{PageBuilderPanel.searchPanel}}" stepKey="moveMouseOutsideLiveEdit"/>
56+
<click selector="{{pageBuilderArea}}{{PageBuilderPanel.searchPanel}}" stepKey="clickOutsideLiveEdit"/>
5657
<waitForPageLoad stepKey="waitForAnimation2"/>
5758
<dontSeeElement selector="{{HeadingOnStage.headingTypeToolbar(index, headingType.toolbar)}}" stepKey="dontSeeHeadingTypeToolbar"/>
5859
<dontSeeElement selector="{{HeadingOnStage.headingTextAlignToolbar(index, headingAlignment.toolbar)}}" stepKey="dontSeeHeadingAlignmentToolbar"/>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<argument name="pageBuilderArea" defaultValue="" type="string"/>
1515
</arguments>
1616
<waitForElementVisible selector="{{pageBuilderArea}}{{PageBuilderPanel.panelGroup(group.section)}}" stepKey="waitForGroupVisible"/>
17-
<conditionalClick selector="{{pageBuilderArea}}{{PageBuilderPanel.panelGroup(group.section)}}" dependentSelector="{{PageBuilderPanel.panelGroupActive(group.section)}}" visible="false" stepKey="expandGroup"/>
17+
<conditionalClick selector="{{pageBuilderArea}}{{PageBuilderPanel.panelGroup(group.section)}}" dependentSelector="{{pageBuilderArea}}{{PageBuilderPanel.panelGroupActive(group.section)}}" visible="false" stepKey="expandGroup"/>
1818
<waitForElementVisible selector="{{pageBuilderArea}}{{PageBuilderPanel.panelGroupActive(group.section)}}" stepKey="waitForGroupExpanded"/>
1919
</actionGroup>
2020
<actionGroup name="closePageBuilderPanelGroups">

app/code/Magento/PageBuilder/Test/Mftf/Data/CatalogProductData.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,15 @@
1111
<entity name="EditWithPageBuilderButton" type="pagebuilder_button">
1212
<data key="value">Edit with Page Builder</data>
1313
</entity>
14+
<entity name="ProductShortDescription" type="ProductAttribute">
15+
<!-- This goes in CE repo -->
16+
<data key="attribute_code">short_description</data>
17+
</entity>
18+
<entity name="AddToDefaultSetContentSectionBelowShortDescription" type="ProductAttributeSet">
19+
<!-- This goes in CE repo -->
20+
<var key="attributeCode" entityKey="attribute_code" entityType="ProductAttribute"/>
21+
<data key="attributeSetId">4</data>
22+
<data key="attributeGroupId">13</data>
23+
<data key="sortOrder">4</data>
24+
</entity>
1425
</entities>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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="AdminEditProductAttributesSection">
12+
<!-- This goes in CE repo -->
13+
<element name="ProductDataMayBeLostModal" type="button" selector="//aside[contains(@class,'_show')]//header[contains(.,'Product data may be lost')]"/>
14+
<element name="ProductDataMayBeLostConfirmButton" type="button" selector="//aside[contains(@class,'_show')]//button[.='Change Input Type']"/>
15+
</section>
16+
</sections>

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

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@
1313
<element name="base" type="text" selector="(//*[@data-role='heading'])[{{arg1}}]" parameterized="true"/>
1414
<element name="hidden" type="text" selector="(//*[@data-role='heading'])[{{arg1}}]/ancestor::*[contains(@class, 'pagebuilder-content-type-wrapper') and contains(@class, 'pagebuilder-content-type-hidden')]" parameterized="true"/>
1515
<element name="notHidden" type="text" selector="(//div[contains(@class,'pagebuilder-heading')])[{{arg1}}]/parent::*[contains(@class, 'pagebuilder-content-type-wrapper') and not(contains(@class, 'pagebuilder-content-type-hidden'))][1]" parameterized="true"/>
16-
<element name="baseByTagName" type="text" selector="(//{{arg1}})[{{arg2}}]" parameterized="true"/>
16+
<element name="baseByTagName" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}]" parameterized="true"/>
1717
<element name="allHeadingsInContainer" type="button" selector="(//div[contains(@class, '{{arg1}}-container')])[{{arg2}}]//div[contains(@class,'pagebuilder-heading')]" parameterized="true"/>
18-
<element name="headingText" type="button" selector="(//{{arg1}}[.= '{{arg2}}'])[{{arg3}}]" parameterized="true"/>
19-
<element name="headingPlaceholder" type="button" selector="(//{{arg1}}[contains(@data-placeholder,'{{arg2}}')])[{{arg3}}]" parameterized="true"/>
20-
<element name="headingOnStage" type="text" selector="(//{{arg1}}[contains(@data-bind,'heading_text')])[{{arg2}}]" parameterized="true"/>
21-
<element name="headingType" type="button" selector="(//{{arg1}})[{{arg2}}]" parameterized="true"/>
18+
<element name="headingText" type="button" selector="(//{{arg1}}[@data-role='heading'][.= '{{arg2}}'])[{{arg3}}]" parameterized="true"/>
19+
<element name="headingPlaceholder" type="button" selector="(//{{arg1}}[@data-role='heading'][contains(@data-placeholder,'{{arg2}}')])[{{arg3}}]" parameterized="true"/>
20+
<element name="headingOnStage" type="text" selector="(//{{arg1}}[@data-role='heading'][contains(@data-bind,'heading_text')])[{{arg2}}]" parameterized="true"/>
21+
<element name="headingType" type="button" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}]" parameterized="true"/>
2222
<element name="headingEditableText" type="button" selector="(//div[contains(@class, 'pagebuilder-heading')])[{{arg1}}]//h2[contains(@contenteditable, 'true')]" parameterized="true"/>
2323
<element name="headingTypeToolbar" type="text" selector="(//div[contains(@class,'pagebuilder-heading')])[{{arg1}}]//span[text()='{{arg2}}']" parameterized="true"/>
2424
<element name="headingTypeToolbarSelected" type="text" selector="(//div[contains(@class,'pagebuilder-heading')])[{{arg1}}]//a[contains(@class, 'toolbar-active')]//span[text()='{{arg2}}']" parameterized="true"/>
@@ -27,41 +27,41 @@
2727
<element name="headingToolbarButtonViewportPositionTop" type="button" selector="return document.querySelector('.pagebuilder-toolbar-options-wrapper ul:{{arg1}}-child li:{{arg1}}-child').getBoundingClientRect().top;" parameterized="true"/>
2828
<!-- Advanced Configuration -->
2929
<element name="alignment" type="text" selector="(//div[contains(@class,'pagebuilder-heading')]//{{arg1}})[{{arg2}}][contains(@style,'text-align: {{arg3}};')]" parameterized="true"/>
30-
<element name="noAlignment" type="text" selector="(//{{arg1}})[{{arg2}}][not(contains(@style,'text-align:'))]" parameterized="true"/>
31-
<element name="border" type="text" selector="(//{{arg1}})[{{arg2}}][contains(@style,'border-style: {{arg3}};')]" parameterized="true"/>
32-
<element name="borderColor" type="text" selector="(//{{arg1}})[{{arg2}}][contains(@style,'border-color: {{arg3}};')]" parameterized="true"/>
33-
<element name="noBorderColor" type="text" selector="(//{{arg1}})[{{arg2}}][not(contains(@style,'border-color:'))]" parameterized="true"/>
34-
<element name="borderWidth" type="text" selector="(//{{arg1}})[{{arg2}}][contains(@style,'border-width: {{arg3}}px;')]" parameterized="true"/>
35-
<element name="borderRadius" type="text" selector="(//{{arg1}})[{{arg2}}][contains(@style,'border-radius: {{arg3}}px;')]" parameterized="true"/>
36-
<element name="cssClasses" type="text" selector="(//{{arg1}})[{{arg2}}][contains(@class,'{{arg3}}')]" parameterized="true"/>
37-
<element name="noCssClasses" type="text" selector="(//{{arg1}})[{{arg2}}][@class='placeholder-text' or not(@class)]" parameterized="true"/>
38-
<element name="margins" type="text" selector="(//{{arg1}})[{{arg2}}][contains(@style,'margin: {{arg3}}px;')]" parameterized="true"/>
39-
<element name="noMargins" type="text" selector="(//{{arg1}})[{{arg2}}][not(contains(@style,'margin:'))]" parameterized="true"/>
40-
<element name="padding" type="text" selector="(//{{arg1}})[{{arg2}}][contains(@style,'padding: {{arg3}}px;')]" parameterized="true"/>
41-
<element name="noPadding" type="text" selector="(//{{arg1}})[{{arg2}}][not(contains(@style,'padding:'))]" parameterized="true"/>
30+
<element name="noAlignment" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][not(contains(@style,'text-align:'))]" parameterized="true"/>
31+
<element name="border" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][contains(@style,'border-style: {{arg3}};')]" parameterized="true"/>
32+
<element name="borderColor" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][contains(@style,'border-color: {{arg3}};')]" parameterized="true"/>
33+
<element name="noBorderColor" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][not(contains(@style,'border-color:'))]" parameterized="true"/>
34+
<element name="borderWidth" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][contains(@style,'border-width: {{arg3}}px;')]" parameterized="true"/>
35+
<element name="borderRadius" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][contains(@style,'border-radius: {{arg3}}px;')]" parameterized="true"/>
36+
<element name="cssClasses" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][contains(@class,'{{arg3}}')]" parameterized="true"/>
37+
<element name="noCssClasses" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][@class='placeholder-text' or not(@class)]" parameterized="true"/>
38+
<element name="margins" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][contains(@style,'margin: {{arg3}}px;')]" parameterized="true"/>
39+
<element name="noMargins" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][not(contains(@style,'margin:'))]" parameterized="true"/>
40+
<element name="padding" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][contains(@style,'padding: {{arg3}}px;')]" parameterized="true"/>
41+
<element name="noPadding" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][not(contains(@style,'padding:'))]" parameterized="true"/>
4242
</section>
4343
<section name="HeadingOnStorefront">
4444
<element name="base" type="text" selector="(//*[@data-role='heading'])[{{arg2}}]" parameterized="true"/>
45-
<element name="baseByTagName" type="text" selector="(//{{arg1}})[{{arg2}}]" parameterized="true"/>
45+
<element name="baseByTagName" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}]" parameterized="true"/>
4646
<element name="baseJs" type="text" selector="document.querySelectorAll('[data-role=\'heading\']')[{{arg1}}]" parameterized="true"/>
4747
<element name="hidden" type="text" selector="(//*[@data-role='heading'])[{{arg1}}][contains(@style, 'display: none')]" parameterized="true"/>
4848
<element name="notHidden" type="text" selector="(//*[@data-role='heading'])[{{arg1}}][not(contains(@style, 'display: none'))]" parameterized="true"/>
4949
<element name="headingNoText" type="button" selector="(//{{arg1}}[@data-role='heading' and .=''])[{{arg2}}]" parameterized="true"/>
5050
<element name="headingText" type="button" selector="(//{{arg1}}[@data-role='heading' and .='{{arg2}}'])[{{arg3}}]" parameterized="true"/>
5151
<element name="headingType" type="button" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}]" parameterized="true"/>
5252
<!-- Advanced Configuration -->
53-
<element name="alignment" type="text" selector="(//{{arg1}})[{{arg2}}][contains(@style,'text-align: {{arg3}};')]" parameterized="true"/>
54-
<element name="noAlignment" type="text" selector="(//{{arg1}})[{{arg2}}][not(contains(@style,'text-align:'))]" parameterized="true"/>
55-
<element name="border" type="text" selector="(//{{arg1}})[{{arg2}}][contains(@style,'border-style: {{arg3}};')]" parameterized="true"/>
56-
<element name="borderColor" type="text" selector="(//{{arg1}})[{{arg2}}][contains(@style,'border-color: {{arg3}};')]" parameterized="true"/>
57-
<element name="noBorderColor" type="text" selector="(//{{arg1}})[{{arg2}}][not(contains(@style,'border-color:'))]" parameterized="true"/>
58-
<element name="borderWidth" type="text" selector="(//{{arg1}})[{{arg2}}][contains(@style,'border-width: {{arg3}}px;')]" parameterized="true"/>
59-
<element name="borderRadius" type="text" selector="(//{{arg1}})[{{arg2}}][contains(@style,'border-radius: {{arg3}}px;')]" parameterized="true"/>
60-
<element name="cssClasses" type="text" selector="(//{{arg1}})[{{arg2}}][contains(@class,'{{arg3}}')]" parameterized="true"/>
61-
<element name="noCssClasses" type="text" selector="(//{{arg1}})[{{arg2}}][not(@class)]" parameterized="true"/>
62-
<element name="margins" type="text" selector="(//{{arg1}})[{{arg2}}][contains(@style,'margin: {{arg3}}px;')]" parameterized="true"/>
63-
<element name="noMargins" type="text" selector="(//{{arg1}})[{{arg2}}][not(contains(@style,'margin:'))]" parameterized="true"/>
64-
<element name="padding" type="text" selector="(//{{arg1}})[{{arg2}}][contains(@style,'padding: {{arg3}}px;')]" parameterized="true"/>
65-
<element name="noPadding" type="text" selector="(//{{arg1}})[{{arg2}}][not(contains(@style,'padding:'))]" parameterized="true"/>
53+
<element name="alignment" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][contains(@style,'text-align: {{arg3}};')]" parameterized="true"/>
54+
<element name="noAlignment" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][not(contains(@style,'text-align:'))]" parameterized="true"/>
55+
<element name="border" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][contains(@style,'border-style: {{arg3}};')]" parameterized="true"/>
56+
<element name="borderColor" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][contains(@style,'border-color: {{arg3}};')]" parameterized="true"/>
57+
<element name="noBorderColor" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][not(contains(@style,'border-color:'))]" parameterized="true"/>
58+
<element name="borderWidth" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][contains(@style,'border-width: {{arg3}}px;')]" parameterized="true"/>
59+
<element name="borderRadius" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][contains(@style,'border-radius: {{arg3}}px;')]" parameterized="true"/>
60+
<element name="cssClasses" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][contains(@class,'{{arg3}}')]" parameterized="true"/>
61+
<element name="noCssClasses" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][not(@class)]" parameterized="true"/>
62+
<element name="margins" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][contains(@style,'margin: {{arg3}}px;')]" parameterized="true"/>
63+
<element name="noMargins" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][not(contains(@style,'margin:'))]" parameterized="true"/>
64+
<element name="padding" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][contains(@style,'padding: {{arg3}}px;')]" parameterized="true"/>
65+
<element name="noPadding" type="text" selector="(//{{arg1}}[@data-role='heading'])[{{arg2}}][not(contains(@style,'padding:'))]" parameterized="true"/>
6666
</section>
6767
</sections>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
1010
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd">
1111
<section name="PageBuilderProductAttribute">
12+
<element name="PageBuilderArea" type="text" selector="//div[@data-index='{{var1}}']" parameterized="true"/>
1213
<element name="PageBuilderBtn" type="text" selector="[data-index='{{var1}}'] button.action-default" parameterized="true"/>
1314
<element name="WarningMsg" type="text" selector=".pagebuilder-modal-content-body"/>
1415
<element name="AcceptBtn" type="button" selector=".action-primary.action-accept"/>

0 commit comments

Comments
 (0)