Skip to content

Commit 0823f53

Browse files
Merge branch 'ACQE-7462' into functional-mainline-deployment-branch
2 parents 1942bed + 980badb commit 0823f53

7 files changed

+296
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 Adobe
5+
* All Rights Reserved.
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="AdminAddOptionsToDropdownAttributeActionGroup">
12+
<annotations>
13+
<description>Adds options to a product attribute of type "dropdown" in the Admin panel.</description>
14+
</annotations>
15+
<arguments>
16+
<argument name="optionIndex" type="string" defaultValue="0"/>
17+
<argument name="optionValue" type="string"/>
18+
</arguments>
19+
<click selector="{{AdminNewAttributePanel.addOption}}" stepKey="clickOnAddOption"/>
20+
<waitForElementVisible selector="{{AdminNewAttributePanel.optionAdminValue(optionIndex)}}" stepKey="waitForAdminLabel"/>
21+
<fillField selector="{{AdminNewAttributePanel.optionAdminValue(optionIndex)}}" userInput="{{optionValue}}" stepKey="fillAdminLabel"/>
22+
</actionGroup>
23+
</actionGroups>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 Adobe
5+
* All Rights Reserved.
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="AdminRemoveOptionsFromColorAttributeActionGroup">
12+
<annotations>
13+
<description>Remove options from color attribute</description>
14+
</annotations>
15+
<click stepKey="deleteOption1" selector="{{AdminNewAttributePanel.deleteOptionByName('black')}}"/>
16+
<click stepKey="deleteOption2" selector="{{AdminNewAttributePanel.deleteOptionByName('red')}}"/>
17+
<!-- Save attribute -->
18+
<click selector="{{AdminNewAttributePanel.saveAttribute}}" stepKey="clickOnNewAttributePanel"/>
19+
<waitForPageLoad time="30" stepKey="waitForSaveAttribute"/>
20+
<switchToIFrame stepKey="switchOutOfIFrame"/>
21+
</actionGroup>
22+
</actionGroups>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 Adobe
5+
* All Rights Reserved.
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="AdminUnassignAttributeFromDefaultSetActionGroup">
12+
<annotations>
13+
<description>Unassign given attribute from default attribute set</description>
14+
</annotations>
15+
<arguments>
16+
<argument name="ProductAttributeCode" type="string"/>
17+
</arguments>
18+
<amOnPage url="{{AdminProductAttributeSetGridPage.url}}" stepKey="goToAttributeSetPage"/>
19+
<click selector="{{AdminProductAttributeSetGridSection.resetFilter}}" stepKey="clickResetButton"/>
20+
<fillField selector="{{AdminProductAttributeSetGridSection.filter}}" userInput="Default" stepKey="filterByName"/>
21+
<click selector="{{AdminProductAttributeSetGridSection.searchBtn}}" stepKey="clickSearchBtn"/>
22+
<click selector="{{AdminProductAttributeSetGridSection.nthRow('1')}}" stepKey="clickFirstRow"/>
23+
<waitForPageLoad stepKey="waitForSelectCustomGroup"/>
24+
<dragAndDrop selector1="{{AdminProductAttributeSetSection.attribute(ProductAttributeCode)}}" selector2="{{AdminProductAttributeSetSection.attribute('manufacturer')}}" stepKey="unassignAttributeFromDefaultAttributeSet"/>
25+
<click selector="{{AdminProductAttributeSetSection.saveBtn}}" stepKey="clickSaveDefaultAttributeSet"/>
26+
</actionGroup>
27+
</actionGroups>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 Adobe
5+
* All Rights Reserved.
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="CreateCustomAttributeActionGroup">
12+
<arguments>
13+
<argument name="attributeScope" type="string" defaultValue="Store View"/>
14+
</arguments>
15+
<selectOption selector="{{AttributePropertiesSection.Scope}}" userInput="{{attributeScope}}" stepKey="selectAttributeScopeDropdown" after="fillAttributeCode"/>
16+
</actionGroup>
17+
</actionGroups>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 Adobe
5+
* All Rights Reserved.
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="StorefrontVerifyConfigurableProductImagesActionGroup">
12+
<annotations>
13+
<description>Verify unique image visibility for configurable product option on storefront</description>
14+
</annotations>
15+
<arguments>
16+
<argument name="attributeOption1" type="string"/>
17+
<argument name="attributeOption2" type="string"/>
18+
</arguments>
19+
<selectOption selector="{{StorefrontProductInfoMainSection.productOptionSelect(attributeOption1)}}" userInput="{{ConfigurableProduct1.color_option1}}" stepKey="fillColorDownAttributeOption1"/>
20+
<selectOption selector="{{StorefrontProductInfoMainSection.productOptionSelect(attributeOption2)}}" userInput="{{ConfigurableProduct1.size_option1}}" stepKey="fillSizeAttributeOption1"/>
21+
<waitForPageLoad time="30" stepKey="waitForPreviewLoadForOptionBlack"/>
22+
<waitForElementVisible selector="{{StorefrontProductMediaSection.productImageActive(TestImageNew.filename)}}" time="30" stepKey="waitImageToBeLoadedForColorOptionBlack"/>
23+
<selectOption selector="{{StorefrontProductInfoMainSection.productOptionSelect(attributeOption1)}}" userInput="{{ConfigurableProduct1.color_option2}}" stepKey="fillColorDownAttributeOption2"/>
24+
<selectOption selector="{{StorefrontProductInfoMainSection.productOptionSelect(attributeOption2)}}" userInput="{{ConfigurableProduct1.size_option2}}" stepKey="fillSizeAttributeOption2"/>
25+
<waitForPageLoad time="30" stepKey="waitForPreviewLoadForOptionRed"/>
26+
<waitForElementVisible selector="{{StorefrontProductMediaSection.productImageActive(MagentoLogo.filename)}}" time="30" stepKey="waitImageToBeLoadedForColorOptionRed"/>
27+
</actionGroup>
28+
</actionGroups>

app/code/Magento/ConfigurableProduct/Test/Mftf/Data/ConfigurableProductData.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,4 +123,19 @@
123123
<data key="name">API Configurable Export Import Product</data>
124124
<data key="urlKey">api-configurable-export-import-product</data>
125125
</entity>
126+
<entity name="ConfigurableProduct1" type="product">
127+
<data key="name" unique="suffix">conf1</data>
128+
<data key="sku" unique="suffix">conf1</data>
129+
<data key="type_id">configurable</data>
130+
<data key="attribute_set_id">4</data>
131+
<data key="status">1</data>
132+
<data key="quantity">10000</data>
133+
<data key="price">10</data>
134+
<data key="color_label">Color</data>
135+
<data key="size_label">Size</data>
136+
<data key="color_option1">black</data>
137+
<data key="color_option2">red</data>
138+
<data key="size_option1">8</data>
139+
<data key="size_option2">10</data>
140+
</entity>
126141
</entities>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 Adobe
5+
* All Rights Reserved.
6+
*/
7+
-->
8+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
10+
<test name="StorefrontConfigurableProductUniqueImageDisplayTest">
11+
<annotations>
12+
<features value="Backend"/>
13+
<stories value="Display unique images for a configurable product on storefront"/>
14+
<title value="Unique images should be displayed on storefront correctly for Configurable product"/>
15+
<description value="Admin should be able to add images for configurable products and unique images should display on storefront correctly based configurable attribute options"/>
16+
<severity value="MAJOR"/>
17+
<testCaseId value="AC-4825"/>
18+
<group value="catalog"/>
19+
</annotations>
20+
<before>
21+
<!-- Admin Login -->
22+
<actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/>
23+
24+
<!-- Goto, Stores > Attributes > Product > Filter by attribute label 'Color' > Edit-->
25+
<actionGroup ref="AdminNavigateToProductAttributeEditPageActionGroup" stepKey="navigateToColorProductAttribute1">
26+
<argument name="ProductAttributeLabel" value="Color"/>
27+
</actionGroup>
28+
<!-- Use the action group to add the 'black' option to the Color attribute -->
29+
<actionGroup ref="AdminAddOptionsToDropdownAttributeActionGroup" stepKey="addOptionBlackForColorAttribute">
30+
<argument name="optionIndex" value="0"/>
31+
<argument name="optionValue" value="{{ConfigurableProduct1.color_option1}}"/>
32+
</actionGroup>
33+
<!-- Use the action group to add the 'red' option to the Color attribute -->
34+
<actionGroup ref="AdminAddOptionsToDropdownAttributeActionGroup" stepKey="addOptionRedForColorAttribute">
35+
<argument name="optionIndex" value="1"/>
36+
<argument name="optionValue" value="{{ConfigurableProduct1.color_option2}}"/>
37+
</actionGroup>
38+
<!-- Save attribute -->
39+
<actionGroup ref="AdminProductAttributeSaveActionGroup" stepKey="saveColorAttribute"/>
40+
41+
<!-- Create new attribute 'Size'-->
42+
<actionGroup ref="CreateCustomAttributeActionGroup" stepKey="createCustomProductAttributeSize">
43+
<argument name="attributeLabel" value="Size"/>
44+
<argument name="attributeCode" value="size"/>
45+
<argument name="valueRequired" value="No"/>
46+
<argument name="adminOption1" value="{{ConfigurableProduct1.size_option1}}"/>
47+
<argument name="adminOption1Value" value="{{ConfigurableProduct1.size_option1}}"/>
48+
<argument name="adminOption2" value="{{ConfigurableProduct1.size_option2}}"/>
49+
<argument name="adminOption2Value" value="{{ConfigurableProduct1.size_option2}}"/>
50+
<argument name="attributeScope" value="Global"/>
51+
</actionGroup>
52+
53+
<!--Crete new category-->
54+
<actionGroup ref="AdminOpenCategoryPageActionGroup" stepKey="goToCategoryPage"/>
55+
<actionGroup ref="CreateCategoryActionGroup" stepKey="createNewSubcategory">
56+
<argument name="categoryEntity" value="CategoryB"/>
57+
</actionGroup>
58+
</before>
59+
<after>
60+
<!--Delete category-->
61+
<actionGroup ref="DeleteCategoryActionGroup" stepKey="deleteSubcategory">
62+
<argument name="categoryEntity" value="CategoryB"/>
63+
</actionGroup>
64+
65+
<!-- Delete product -->
66+
<actionGroup ref="DeleteProductBySkuActionGroup" stepKey="deleteConfigurableProduct">
67+
<argument name="sku" value="{{ConfigurableProduct1.sku}}"/>
68+
</actionGroup>
69+
70+
<!-- Goto, Stores > Attributes > Product > Filter by attribute label 'Color' > Edit-->
71+
<actionGroup ref="AdminNavigateToProductAttributeEditPageActionGroup" stepKey="navigateToColorProductAttribute2">
72+
<argument name="ProductAttributeLabel" value="{{ConfigurableProduct1.color_label}}"/>
73+
</actionGroup>
74+
<!-- Remove color attribute options -->
75+
<actionGroup ref="AdminRemoveOptionsFromColorAttributeActionGroup" stepKey="removeOptionsFromColorAttribute"/>
76+
77+
<!-- Goto, Stores > Attributes > Product > Filter by attribute label 'Size' > Edit and Perform attribute deletion-->
78+
<actionGroup ref="AdminNavigateToProductAttributeEditPageActionGroup" stepKey="navigateToSizeProductAttribute">
79+
<argument name="ProductAttributeLabel" value="Size"/>
80+
</actionGroup>
81+
<!-- Delete attribute - Size -->
82+
<actionGroup ref="DeleteProductAttributeByAttributeCodeActionGroup" stepKey="deleteProductAttributeSize" />
83+
84+
<!-- Unassign product attribute from Default attribute set -->
85+
<actionGroup ref="AdminUnassignAttributeFromDefaultSetActionGroup" stepKey="unassignColorAttributeFromDefaultAttributeSet">
86+
<argument name="ProductAttributeCode" value="color"/>
87+
</actionGroup>
88+
89+
<!-- Admin Logout -->
90+
<actionGroup ref="AdminLogoutActionGroup" stepKey="amOnLogoutPage"/>
91+
</after>
92+
93+
<!--Create a configurable product-->
94+
<actionGroup ref="AdminOpenNewProductFormPageActionGroup" stepKey="goToProductCreatePage">
95+
<argument name="attributeSetId" value="{{AddToDefaultSet.attributeSetId}}"/>
96+
<argument name="productType" value="configurable"/>
97+
</actionGroup>
98+
<fillField selector="{{AdminProductFormSection.productName}}" userInput="{{ConfigurableProduct1.name}}" stepKey="fillProductName"/>
99+
<fillField selector="{{AdminProductFormSection.productSku}}" userInput="{{ConfigurableProduct1.sku}}" stepKey="fillProductSku"/>
100+
<fillField selector="{{AdminProductFormSection.productPrice}}" userInput="{{ConfigurableProduct1.price}}" stepKey="fillProductPrice"/>
101+
<searchAndMultiSelectOption selector="{{AdminProductFormSection.categoriesDropdown}}" parameterArray="[{{CategoryB.name}}]" stepKey="selectCategory"/>
102+
<!-- Setup configurations-->
103+
<click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" stepKey="clickCreateConfigurations"/>
104+
<waitForElementVisible selector="{{AdminCreateProductConfigurationsPanel.createNewAttribute}}" time="30" stepKey="waitForConfigurationModalOpen" after="clickCreateConfigurations"/>
105+
<!--Add attributes and select all options -->
106+
<click selector="{{AdminCreateProductConfigurationsPanel.attributeRowByAttributeCode('color')}}" stepKey="clickOnColorAttributeCheckbox"/>
107+
<click selector="{{AdminCreateProductConfigurationsPanel.attributeRowByAttributeCode('size')}}" stepKey="clickOnSizeAttributeCheckbox"/>
108+
<click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButton1"/>
109+
<click selector="{{AdminCreateProductConfigurationsPanel.selectAllByAttribute('Color')}}" stepKey="clickOnSelectAllInColorAttribute"/>
110+
<click selector="{{AdminCreateProductConfigurationsPanel.selectAllByAttribute('Size')}}" stepKey="clickOnSelectAllInSizeAttribute"/>
111+
<click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButton2"/>
112+
<!-- Add unique images to product attribute options -->
113+
<actionGroup ref="AddUniqueImageToConfigurableProductOptionActionGroup" stepKey="addImageToConfigurableProductOption1">
114+
<argument name="image" value="TestImageNew"/>
115+
<argument name="frontend_label" value="{{ConfigurableProduct1.color_label}}"/>
116+
<argument name="label" value="{{ConfigurableProduct1.color_option1}}"/>
117+
</actionGroup>
118+
<actionGroup ref="AddUniqueImageToConfigurableProductOptionActionGroup" stepKey="addImageToConfigurableProductOption2">
119+
<argument name="image" value="MagentoLogo"/>
120+
<argument name="frontend_label" value="{{ConfigurableProduct1.color_label}}"/>
121+
<argument name="label" value="{{ConfigurableProduct1.color_option2}}"/>
122+
</actionGroup>
123+
<!-- Add unique price to product attribute options -->
124+
<actionGroup ref="AddUniquePriceToConfigurableProductOptionActionGroup" stepKey="addPriceToConfigurableProductOption1">
125+
<argument name="frontend_label" value="Size"/>
126+
<argument name="label" value="{{ConfigurableProduct1.size_option1}}"/>
127+
<argument name="price" value="4"/>
128+
</actionGroup>
129+
<actionGroup ref="AddUniquePriceToConfigurableProductOptionActionGroup" stepKey="addPriceToConfigurableProductOption2">
130+
<argument name="frontend_label" value="Size"/>
131+
<argument name="label" value="{{ConfigurableProduct1.size_option2}}"/>
132+
<argument name="price" value="6"/>
133+
</actionGroup>
134+
<!-- Add quantity to product attribute options -->
135+
<click selector="{{AdminCreateProductConfigurationsPanel.applySingleQuantityToEachSkus}}" stepKey="clickOnApplySingleQuantityToEachSku"/>
136+
<fillField selector="{{AdminCreateProductConfigurationsPanel.quantity}}" userInput="10000" stepKey="enterAttributeQuantity"/>
137+
<click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButton3"/>
138+
<click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButton4"/>
139+
<!-- Save product -->
140+
<actionGroup ref="SaveConfigurableProductAddToCurrentAttributeSetActionGroup" stepKey="saveProduct"/>
141+
142+
<!-- Reindex invalidated indices for the product to be visible in Storefront -->
143+
<actionGroup ref="CliIndexerReindexActionGroup" stepKey="reindexInvalidatedIndicesPostChangingConfigurationSettings">
144+
<argument name="indices" value=""/>
145+
</actionGroup>
146+
147+
<!-- Verify on storefront that category and product is visible -->
148+
<actionGroup ref="StorefrontNavigateToCategoryUrlActionGroup" stepKey="goToCategoryStorefrontPage">
149+
<argument name="categoryUrl" value="{{CategoryB.urlKey}}"/>
150+
</actionGroup>
151+
<waitForText userInput="{{CategoryB.name}}" selector="{{StorefrontCategoryMainSection.CategoryTitle}}" stepKey="assertCategoryNameOnStorefront"/>
152+
<waitForText userInput="{{ConfigurableProduct1.name}}" selector="{{StorefrontCategoryMainSection.productName}}" stepKey="assertProductVisibleInStorefront"/>
153+
154+
<!-- Navigate to Product Page -->
155+
<click selector="{{StorefrontCategoryMainSection.productLink}}" stepKey="openConfigurableProduct"/>
156+
<waitForPageLoad stepKey="waitForProductPageLoad"/>
157+
158+
<!-- Select configurable product option on Storefront and Verify that unique images are visible for different color options -->
159+
<actionGroup ref="StorefrontVerifyConfigurableProductImagesActionGroup" stepKey="storefrontVerifyUniqueImagesForConfigurableProductOption">
160+
<argument name="attributeOption1" value="{{ConfigurableProduct1.color_label}}"/>
161+
<argument name="attributeOption2" value="{{ConfigurableProduct1.size_label}}"/>
162+
</actionGroup>
163+
</test>
164+
</tests>

0 commit comments

Comments
 (0)