Skip to content

Commit b8edbd9

Browse files
author
Hwashiang Yu
committed
MC-5363: Tabs Flakiness Causes Periodic MFTF Failures
- Resolved flakiness due to mismatched fragment identifier by adding a delay until to setActiveTab method - Added JS error checker to all drag and drop MFTF action group for test coverage
1 parent 28a01e8 commit b8edbd9

File tree

3 files changed

+55
-33
lines changed

3 files changed

+55
-33
lines changed

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
</arguments>
1515
<waitForElementVisible time="30" selector="{{PageBuilderPanel.draggableContentTypeInPanel(contentType.name)}}" stepKey="waitForContentTypeInPanel"/>
1616
<dragAndDrop selector1="{{PageBuilderPanel.draggableContentTypeInPanel(contentType.name)}}" selector2="{{PageBuilderStage.dropAreaInStage}}" stepKey="dropContentTypeIntoStage"/>
17+
<waitForPageLoad stepKey="waitForToolbarsToLoad" time="30"/>
18+
<dontSeeJsError stepKey="doNotSeeJSErrorInConsole"/>
1719
<waitForLoadingMaskToDisappear stepKey="waitForAnimation" />
1820
<waitForElementVisible time="10" selector="{{PageBuilderStage.contentTypeInStage(contentType.role)}}" stepKey="waitForContentTypeInStage" />
1921
<waitForPageLoad stepKey="waitForToolbarsToLoad" time="30"/>
@@ -25,6 +27,7 @@
2527
</arguments>
2628
<dragAndDrop selector1="{{PageBuilderPanel.draggableContentTypeInPanel(contentType.name)}}" selector2="{{PageBuilderStage.dropAreaInStage}}" stepKey="dropContentTypeIntoStage"/>
2729
<waitForPageLoad stepKey="waitForAnimation" time="30"/>
30+
<dontSeeJsError stepKey="doNotSeeJSErrorInConsole"/>
2831
<waitForElementVisible time="10" selector="{{PageBuilderStage.contentTypeInStageByIndex(contentType.role, contentTypeNumber)}}" stepKey="waitForContentTypeInStage" />
2932
<waitForPageLoad stepKey="waitForToolbarsToLoad" time="30"/>
3033
</actionGroup>
@@ -41,6 +44,7 @@
4144
<waitForElementVisible time="30" selector="{{PageBuilderPanel.draggableContentTypeInPanel(contentType.name)}}" stepKey="waitForContentTypeInPanel"/>
4245
<dragAndDrop selector1="{{PageBuilderPanel.draggableContentTypeInPanel(contentType.name)}}" selector2="{{PageBuilderStage.contentTypeContainer(containerTargetType.role, containerTargetIndex)}}" x="{{offsetXCoordinate}}" y="{{offsetYCoordinate}}" stepKey="dropContentTypeIntoStage"/>
4346
<waitForPageLoad stepKey="waitForAnimation" time="30"/>
47+
<dontSeeJsError stepKey="doNotSeeJSErrorInConsole"/>
4448
<waitForElementVisible time="10" selector="{{PageBuilderStage.contentTypeInStageByIndex(contentType.role, contentTypeIndex)}}" stepKey="waitForContentTypeInStage" />
4549
<waitForPageLoad stepKey="waitForToolbarsToLoad" time="30"/>
4650
</actionGroup>
@@ -57,6 +61,7 @@
5761
<waitForElementVisible time="30" selector="{{PageBuilderPanel.draggableContentTypeInPanel(contentType.name)}}" stepKey="waitForContentTypeInPanel"/>
5862
<dragAndDrop selector1="{{PageBuilderPanel.draggableContentTypeInPanel(contentType.name)}}" selector2="{{PageBuilderStage.contentTypeContainer(containerTargetType.role, containerTargetIndex)}}" x="{{offsetXCoordinate}}" y="{{offsetYCoordinate}}" stepKey="dropContentTypeIntoStage"/>
5963
<waitForPageLoad stepKey="waitForAnimation" time="30"/>
64+
<dontSeeJsError stepKey="doNotSeeJSErrorInConsole"/>
6065
<waitForElementNotVisible time="10" selector="{{PageBuilderStage.contentTypeInStageByIndex(contentType.role, contentTypeIndex)}}" stepKey="waitForContentTypeNotOnStage" />
6166
<dontSeeElementInDOM selector="{{PageBuilderStage.contentTypeInStageByIndex(contentType.role, contentTypeIndex)}}" stepKey="dontSeeElementInContainer" />
6267
</actionGroup>
@@ -72,6 +77,7 @@
7277
<scrollTo selector="{{CmsNewPagePageActionsSection.contentSectionName}}" stepKey="scrollToTopOfStage"/>
7378
<dragAndDrop selector1="{{PageBuilderPanel.draggableContentTypeInPanel(contentType.name)}}" selector2="{{PageBuilderStage.contentTypeInStage(targetBlockType.role)}}" x="{{offsetXCoordinate}}" y="{{offsetYCoordinate}}" stepKey="dropContentTypeIntoStage"/>
7479
<waitForPageLoad time="30" stepKey="waitForStageToLoad"/>
80+
<dontSeeJsError stepKey="doNotSeeJSErrorInConsole"/>
7581
<waitForElementVisible time="30" selector="{{PageBuilderStage.contentTypeInStageByIndex(contentType.role, contentTypeIndex)}}" stepKey="waitForContentTypeInStage"/>
7682
</actionGroup>
7783
<actionGroup name="dragContentTypeToDropZone">
@@ -88,6 +94,7 @@
8894
<waitForElement time="30" selector="{{PageBuilderStage.dropZone(containerTargetType.role, containerTargetIndex, dropZoneIndex)}}" stepKey="waitForStageActive"/>
8995
<dragAndDrop selector1="{{PageBuilderPanel.draggableContentTypeInPanel(contentType.name)}}" selector2="{{PageBuilderStage.dropZone(containerTargetType.role, containerTargetIndex, dropZoneIndex)}}" x="{{offsetXCoordinate}}" y="{{offsetYCoordinate}}" stepKey="dropContentTypeIntoStage"/>
9096
<waitForPageLoad time="30" stepKey="waitForAnimation"/>
97+
<dontSeeJsError stepKey="doNotSeeJSErrorInConsole"/>
9198
<waitForElementVisible time="30" selector="{{PageBuilderStage.contentTypeInStageByIndex(contentType.role, contentTypeIndex)}}" stepKey="waitForContentTypeInStage"/>
9299
</actionGroup>
93100
<actionGroup name="cannotDragContentTypeToTarget">
@@ -104,6 +111,7 @@
104111
<waitForElement time="30" selector="{{PageBuilderStage.dropZone(containerTargetType.role, containerTargetIndex, dropZoneIndex)}}" stepKey="waitForTargetActive"/>
105112
<dragAndDrop selector1="{{PageBuilderPanel.draggableContentTypeInPanel(contentType.name)}}" selector2="{{PageBuilderStage.dropZone(containerTargetType.role, containerTargetIndex, dropZoneIndex)}}" x="{{offsetXCoordinate}}" y="{{offsetYCoordinate}}" stepKey="dragContentTypeIntoTarget"/>
106113
<waitForPageLoad time="30" stepKey="waitForAnimation"/>
114+
<dontSeeJsError stepKey="doNotSeeJSErrorInConsole"/>
107115
<dontSeeElementInDOM selector="{{PageBuilderStage.contentTypeInStageByIndex(contentType.role, contentTypeIndex)}}" stepKey="dontSeeElement"/>
108116
</actionGroup>
109117
<actionGroup name="moveContentTypeToContainer">
@@ -125,6 +133,7 @@
125133
<waitForElementVisible selector="{{PageBuilderContentTypeOptionsMenu.contentTypeMoveByIndex(contentType.role, contentTypeIndex)}}" stepKey="waitForEditButton"/>
126134
<dragAndDrop selector1="{{PageBuilderContentTypeOptionsMenu.contentTypeMoveByIndex(contentType.role, contentTypeIndex)}}" selector2="{{PageBuilderStage.contentTypeContainer(containerTargetType.role, containerTargetIndex)}}" x="{{containerOffsetXCoordinate}}" y="{{containerOffsetYCoordinate}}" stepKey="moveContentTypeIntoContainer"/>
127135
<waitForPageLoad time="30" stepKey="waitForStageToLoad"/>
136+
<dontSeeJsError stepKey="doNotSeeJSErrorInConsole"/>
128137
<waitForElementVisible time="30" selector="{{PageBuilderStage.contentTypeInStageByIndex(contentType.role, contentTypeIndex)}}" stepKey="waitForContentTypeInStage"/>
129138
</actionGroup>
130139
<actionGroup name="cannotMoveContentTypeToContainer" extends="moveContentTypeToContainer">
@@ -146,6 +155,7 @@
146155
<scrollTo selector="{{CmsNewPagePageActionsSection.contentSectionName}}" stepKey="scrollToTopOfStage"/>
147156
<dragAndDrop selector1="{{PageBuilderPanel.draggableContentTypeInPanel(contentType.name)}}" selector2="{{PageBuilderStage.contentTypeInStageByIndex(existingContentType.role, existingContentTypeIndex)}}" x="{{offsetXCoordinate}}" y="{{offsetYCoordinate}}" stepKey="dropContentTypeIntoStage"/>
148157
<waitForPageLoad stepKey="waitForAnimation" time="30"/>
158+
<dontSeeJsError stepKey="doNotSeeJSErrorInConsole"/>
149159
<waitForElementVisible time="10" selector="{{PageBuilderStage.contentTypeInStageByIndex(contentType.role, contentTypeIndex)}}" stepKey="waitForContentTypeInStage" />
150160
<waitForPageLoad stepKey="waitForToolbarsToLoad" time="30"/>
151161
</actionGroup>

app/code/Magento/PageBuilder/view/adminhtml/web/js/content-type/tabs/preview.js

Lines changed: 33 additions & 25 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/content-type/tabs/preview.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -178,14 +178,18 @@ export default class Preview extends PreviewCollection {
178178
*/
179179
public setActiveTab(index: number) {
180180
if (index !== null) {
181-
$(this.element).tabs("option", "active", index);
182-
183-
this.activeTab(index);
184-
185-
events.trigger("contentType:redrawAfter", {
186-
id: this.parent.id,
187-
contentType: this,
188-
});
181+
// Added to prevent mismatched fragment error caused by not yet rendered tab-item
182+
delayUntil(
183+
() => {
184+
$(this.element).tabs("option", "active", index);
185+
this.activeTab(index);
186+
events.trigger("contentType:redrawAfter", {
187+
id: this.parent.id,
188+
contentType: this,
189+
});
190+
},
191+
() => $(this.element).find(".pagebuilder-tab-item").length >= index + 1,
192+
);
189193
}
190194
}
191195

0 commit comments

Comments
 (0)