Skip to content

Commit 4711583

Browse files
authored
Merge pull request #94 from magento-obsessive-owls/cms-team-1-delivery
[CMS Team 1] Extensible Grid & Column Vertical Alignment
2 parents bbfb539 + eb94320 commit 4711583

File tree

156 files changed

+6136
-2103
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

156 files changed

+6136
-2103
lines changed

app/code/Magento/PageBuilder/Model/Config/ContentType/Converter.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@ private function convertDataMapping(\DOMElement $childNode): array
203203
$elementData = [];
204204
foreach ($childNode->getElementsByTagName('element') as $elementNode) {
205205
$elementName = $elementNode->attributes->getNamedItem('name')->nodeValue;
206-
$elementPath = $elementNode->attributes->getNamedItem('path')->nodeValue;
206+
$elementPath = ($elementNode->attributes->getNamedItem('path')
207+
? $elementNode->attributes->getNamedItem('path')->nodeValue : '');
207208
$elementData[$elementName] = [
208209
'path' => $elementPath,
209210
'style' => $this->convertProperties($elementNode),

app/code/Magento/PageBuilder/Model/Stage/Config.php

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ class Config
1515
const DEFAULT_PREVIEW_COMPONENT = 'Magento_PageBuilder/js/content-type/preview';
1616
const DEFAULT_MASTER_COMPONENT = 'Magento_PageBuilder/js/content-type/master';
1717

18+
const XML_PATH_COLUMN_GRID_DEFAULT = 'cms/pagebuilder/column_grid_default';
19+
const XML_PATH_COLUMN_GRID_MAX = 'cms/pagebuilder/column_grid_max';
20+
1821
/**
1922
* @var \Magento\PageBuilder\Model\Config\ConfigInterface
2023
*/
@@ -46,13 +49,18 @@ class Config
4649
private $additionalDataParser;
4750

4851
/**
49-
* Constructor
50-
*
52+
* @var \Magento\Framework\App\Config\ScopeConfigInterface
53+
*/
54+
private $scopeConfig;
55+
56+
/**
57+
* Config constructor.
5158
* @param \Magento\PageBuilder\Model\Config\ConfigInterface $config
5259
* @param Config\UiComponentConfig $uiComponentConfig
53-
* @param \Magento\Framework\UrlInterface $urlBuilder
60+
* @param UrlInterface $urlBuilder
5461
* @param \Magento\Framework\Url $frontendUrlBuilder
5562
* @param \Magento\PageBuilder\Model\Config\ContentType\AdditionalData\Parser $additionalDataParser
63+
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
5664
* @param array $data
5765
*/
5866
public function __construct(
@@ -61,13 +69,15 @@ public function __construct(
6169
\Magento\Framework\UrlInterface $urlBuilder,
6270
\Magento\Framework\Url $frontendUrlBuilder,
6371
\Magento\PageBuilder\Model\Config\ContentType\AdditionalData\Parser $additionalDataParser,
72+
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
6473
array $data = []
6574
) {
6675
$this->config = $config;
6776
$this->uiComponentConfig = $uiComponentConfig;
6877
$this->urlBuilder = $urlBuilder;
6978
$this->frontendUrlBuilder = $frontendUrlBuilder;
7079
$this->additionalDataParser = $additionalDataParser;
80+
$this->scopeConfig = $scopeConfig;
7181
$this->data = $data;
7282
}
7383

@@ -83,7 +93,9 @@ public function getConfig()
8393
'content_types' => $this->getContentTypes(),
8494
'stage_config' => $this->data,
8595
'media_url' => $this->urlBuilder->getBaseUrl(['_type' => UrlInterface::URL_TYPE_MEDIA]),
86-
'preview_url' => $this->frontendUrlBuilder->getUrl('pagebuilder/contenttype/preview')
96+
'preview_url' => $this->frontendUrlBuilder->getUrl('pagebuilder/contenttype/preview'),
97+
'column_grid_default' => $this->scopeConfig->getValue(self::XML_PATH_COLUMN_GRID_DEFAULT),
98+
'column_grid_max' => $this->scopeConfig->getValue(self::XML_PATH_COLUMN_GRID_MAX),
8799
];
88100
}
89101

app/code/Magento/PageBuilder/Setup/DataConverter/ChildrenRenderer/Row.php

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,6 @@ private function getColumnWidth($column)
102102
return 0;
103103
}
104104

105-
$width = $column['formData']['width'];
106-
if (isset(Column::COLUMN_WIDTH_MAPPING[$width])) {
107-
$width = Column::COLUMN_WIDTH_MAPPING[$width];
108-
}
109-
110-
return $width;
105+
return $column['formData']['width'];
111106
}
112107
}

app/code/Magento/PageBuilder/Setup/DataConverter/Renderer/Column.php

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,16 @@
1313
*/
1414
class Column implements RendererInterface
1515
{
16-
// Defined column mapping to supported widths
16+
// We have to map as we are unable to calculate the new column width effectively for all sizes
1717
const COLUMN_WIDTH_MAPPING = [
18-
'0.250' => '0.167',
19-
'0.750' => '0.833'
18+
'0.167' => '16.6667',
19+
'0.250' => '25',
20+
'0.333' => '33.3333',
21+
'0.500' => '50',
22+
'0.666' => '66.6666',
23+
'0.750' => '75',
24+
'0.825' => '82.5000',
25+
'1.000' => '100',
2026
];
2127

2228
/**
@@ -74,13 +80,10 @@ public function render(array $itemData, array $additionalData = [])
7480
*/
7581
private function calculateColumnWidth($oldWidth)
7682
{
77-
// Map column sizes to suitable sizes for columns we don't yet support
78-
if (isset(self::COLUMN_WIDTH_MAPPING[$oldWidth])) {
79-
$oldWidth = self::COLUMN_WIDTH_MAPPING[$oldWidth];
83+
if (!isset(self::COLUMN_WIDTH_MAPPING[number_format($oldWidth, 3)])) {
84+
throw new \InvalidArgumentException('Width ' . $oldWidth .' has no valid mapping.');
8085
}
8186

82-
// Resolve issues with old system storing non exact percentages (e.g. 0.167 != 16.6667%)
83-
$percentage = 100 / round(100 / ($oldWidth * 100), 1);
84-
return floatval(number_format($percentage, 4, '.', '')) . '%';
87+
return self::COLUMN_WIDTH_MAPPING[number_format($oldWidth, 3)] . '%';
8588
}
8689
}

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

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,48 @@
2121
<waitForElementVisible time="10" selector="{{PageBuilderContentTypeOptionsMenu.contentTypeOptionsMenuByIndex(contentType.role, contentTypeIndex)}}" stepKey="waitForOptions"/>
2222
<waitForElementVisible selector="{{PageBuilderColumnSection.columnMoveByIndex(contentTypeIndex)}}" stepKey="waitForMoveHandle"/>
2323
<dragAndDrop selector1="{{PageBuilderColumnSection.columnMoveByIndex(contentTypeIndex)}}" selector2="{{PageBuilderStage.contentTypeContainer(contentType.role, containerTargetIndex)}}" stepKey="moveContentTypeIntoContainer"/>
24+
<waitForPageLoad stepKey="waitForDragOperation" />
25+
</actionGroup>
26+
<actionGroup name="openGridSizeForm">
27+
<arguments>
28+
<argument name="index" defaultValue="1" type="string"/>
29+
</arguments>
30+
<waitForElementVisible selector="{{PageBuilderColumnSection.gridSizeButton(index)}}" stepKey="waitForGridSizeButtonVisible" />
31+
<click selector="{{PageBuilderColumnSection.gridSizeButton(index)}}" stepKey="clickGridSizeButton" />
32+
<waitForPageLoad stepKey="waitForAnimation" />
33+
<waitForElementVisible selector="{{PageBuilderColumnSection.gridSizeInput(index)}}" stepKey="waitForGridVisible" />
34+
</actionGroup>
35+
<actionGroup name="closeGridSizeForm">
36+
<arguments>
37+
<argument name="index" defaultValue="1" type="string"/>
38+
</arguments>
39+
<click selector="{{PageBuilderColumnSection.columnX('1')}}" stepKey="clickColumn" />
40+
<waitForPageLoad stepKey="waitForAnimation" />
41+
<waitForElementNotVisible selector="{{PageBuilderColumnSection.gridSizeInput(index)}}" stepKey="waitForGridNotVisible" />
42+
</actionGroup>
43+
<actionGroup name="updateGridSize">
44+
<arguments>
45+
<argument name="index" defaultValue="1" type="string"/>
46+
<argument name="gridSize" defaultValue="12" type="string"/>
47+
</arguments>
48+
<waitForElementVisible selector="{{PageBuilderColumnSection.gridSizeButton(index)}}" stepKey="waitForGridSizeButtonVisible" />
49+
<click selector="{{PageBuilderColumnSection.gridSizeButton(index)}}" stepKey="clickGridSizeButton" />
50+
<waitForPageLoad stepKey="waitForAnimation" />
51+
<waitForElementVisible selector="{{PageBuilderColumnSection.gridSizeInput(index)}}" stepKey="waitForGridVisible" />
52+
<fillField selector="{{PageBuilderColumnSection.gridSizeInput(index)}}" userInput="{{gridSize}}" stepKey="enterGridSize"/>
53+
<pressKey selector="{{PageBuilderColumnSection.gridSizeInput(index)}}" parameterArray="['su',\Facebook\WebDriver\WebDriverKeys::ENTER]" stepKey="pressKeyEnter"/>
54+
<waitForPageLoad stepKey="waitForUpdate" />
55+
<waitForElementVisible selector="{{PageBuilderColumnSection.displayLabelGridSize(index, gridSize)}}" stepKey="validateGridSize" />
56+
</actionGroup>
57+
<actionGroup name="updateGridSizeInvalid">
58+
<arguments>
59+
<argument name="index" defaultValue="1" type="string"/>
60+
<argument name="gridSize" defaultValue="12" type="string"/>
61+
<argument name="errorMessage"/>
62+
</arguments>
63+
<fillField selector="{{PageBuilderColumnSection.gridSizeInput(index)}}" userInput="{{gridSize}}" stepKey="enterGridSize"/>
64+
<click selector="{{PageBuilderColumnSection.columnX(index)}}" stepKey="clickColumn" />
65+
<waitForPageLoad stepKey="waitForAnimation" />
66+
<waitForElementVisible selector="{{PageBuilderColumnSection.gridSizeError(index, errorMessage)}}" stepKey="verifyError"/>
2467
</actionGroup>
2568
</actionGroups>

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

Lines changed: 8 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -10,62 +10,28 @@
1010
xsi:noNamespaceSchemaLocation="../../../../../../../dev/tests/acceptance/vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/actionGroupSchema.xsd">
1111
<actionGroup name="switchSlide">
1212
<arguments>
13+
<argument name="section" defaultValue="SliderOnFrontend"/>
1314
<argument name="index" defaultValue="2" type="string"/>
1415
</arguments>
1516
<waitForElementVisible selector="{{SliderOnFrontend.slideNavigator(index)}}" stepKey="waitForSliderButton"/>
1617
<click selector="{{SliderOnFrontend.slideNavigator(index)}}" stepKey="clickSliderButton"/>
18+
<waitForPageLoad stepKey="waitForPageLoad"/>
1719
<waitForElementVisible selector="{{SlideOnFrontend.slide(index)}}" stepKey="waitForSlide"/>
1820
</actionGroup>
1921
<actionGroup name="unfocusSlideOptions">
2022
<click selector="{{PageBuilderPanel.searchPanel}}" stepKey="clickOutsideLiveEdit"/>
2123
<waitForPageLoad stepKey="waitForAnimation" time="30"/>
22-
<waitForElementNotVisible selector="{{SliderInAdmin.slideOptionsEdit}}" stepKey="dontSeeSlideOptionsEdit"/>
23-
</actionGroup>
24-
<actionGroup name="openSlideOptions">
25-
<comment userInput="Open slide options" stepKey="commentOpen"/>
26-
<waitForElementVisible time="10" selector="{{SliderInAdmin.sliderContainer}}" stepKey="waitForContentTypeInStageVisible" />
27-
<click stepKey="clickNavigationDot" selector="{{SliderInAdmin.firstSlideNavigationDot}}"/>
28-
<waitForElementVisible selector="{{SliderInAdmin.slideOptionsEdit}}" stepKey="waitForSlideOptionsEdit"/>
29-
<click selector="{{SliderInAdmin.slideOptionsEdit}}" stepKey="clickEditContentType"/>
30-
<waitForLoadingMaskToDisappear stepKey="waitForAnimation" />
31-
<waitForElementVisible time="5" selector="{{EditPanelForm.editForm}}" stepKey="waitForEditForm" />
32-
<see userInput="Edit Slide" selector="{{EditPanelForm.editFormTitle}}" stepKey="seeContentTypeNameInEditFormTitle"/>
33-
</actionGroup>
34-
<actionGroup name="openSlideOptionsByIndex">
35-
<arguments>
36-
<argument name="index" defaultValue="1" type="string"/>
37-
</arguments>
38-
<comment userInput="Open slide options by index" stepKey="commentOpenByIndex"/>
39-
<waitForElementVisible time="10" selector="{{SliderInAdmin.sliderContainer}}" stepKey="waitForContentTypeInStageVisible" />
40-
<click stepKey="clickNavigationDot" selector="{{SliderInAdmin.slideNavigationDot(index)}}"/>
41-
<waitForElementVisible selector="{{SliderInAdmin.slideOptionsEdit}}" stepKey="waitForSlideOptionsEdit"/>
42-
<click selector="{{SliderInAdmin.slideOptionsEdit}}" stepKey="clickEditContentType"/>
43-
<waitForLoadingMaskToDisappear stepKey="waitForAnimation" />
44-
<waitForElementVisible time="5" selector="{{EditPanelForm.editForm}}" stepKey="waitForEditForm" />
45-
<see userInput="Edit Slide" selector="{{EditPanelForm.editFormTitle}}" stepKey="seeContentTypeNameInEditFormTitle"/>
46-
</actionGroup>
47-
<actionGroup name="removeSlide">
48-
<waitForElementVisible time="10" selector="{{SliderInAdmin.sliderContainer}}" stepKey="waitForContentTypeInStageVisible" />
49-
<click selector="{{SliderInAdmin.activeSlideNavigationDot}}" stepKey="clickActiveSlideNavigationDot"/>
50-
<seeElement selector="{{SliderInAdmin.slideOptions}}" stepKey="seeContentTypeOptionsMenu"/>
51-
<click selector="{{SliderInAdmin.slideOptionsRemove}}" stepKey="clickRemoveContentType"/>
52-
<wait time="0.5" stepKey="waitForRemovalAnimation" />
53-
</actionGroup>
54-
<actionGroup name="duplicateSlide">
55-
<waitForElementVisible time="10" selector="{{SliderInAdmin.sliderContainer}}" stepKey="waitForContentBlockInStageVisible" />
56-
<click selector="{{SliderInAdmin.activeSlideNavigationDot}}" stepKey="clickActiveSlideNavigationDot"/>
57-
<seeElement selector="{{SliderInAdmin.slideOptions}}" stepKey="seeContentBlockOptionsMenu"/>
58-
<click selector="{{SliderInAdmin.slideOptionsDuplicate}}" stepKey="clickRemoveContentBlock"/>
24+
<waitForElementNotVisible selector="{{SlideOnBackend.optionTitle}}" stepKey="dontSeeSlideOptionsEdit"/>
5925
</actionGroup>
6026
<actionGroup name="addSlide">
6127
<waitForElementVisible time="10" selector="{{SliderInAdmin.sliderContainer}}" stepKey="waitForContentTypeInStageVisible" />
6228
<click stepKey="focusOnSlider" selector="{{SliderInAdmin.sliderContainer}}"/>
6329
<scrollTo selector="div.pagebuilder-header" x="0" y="-100" stepKey="scrollToTop"/>
6430
<moveMouseOver selector="{{SliderInAdmin.sliderContainer}}" x="10" y="10" stepKey="onMouseOverContentTypeStage"/>
65-
<waitForPageLoad stepKey="waitForPageLoad"/>
66-
<waitForElementVisible time="5" selector="{{SliderInAdmin.sliderOptions}}" stepKey="seeContentTypeOptionsMenu"/>
67-
<moveMouseOver selector="{{SliderInAdmin.sliderOptions}}" stepKey="onMouseOverOptionsMenu"/>
68-
<click selector="{{SliderInAdmin.addNewSlide}}" stepKey="clickAddNewSlideChild"/>
69-
<waitForLoadingMaskToDisappear stepKey="waitForAnimation"/>
31+
<waitForPageLoad stepKey="waitForPageLoad1"/>
32+
<waitForElementVisible time="5" selector="{{PageBuilderContentTypeOptionsMenu.contentTypeOptionsMenu(PageBuilderSliderContentType.role)}}" stepKey="seeContentTypeOptionsMenu"/>
33+
<moveMouseOver selector="{{PageBuilderContentTypeOptionsMenu.contentTypeOptionsMenu(PageBuilderSliderContentType.role)}}" stepKey="onMouseOverOptionsMenu"/>
34+
<click selector="{{PageBuilderContentTypeOptionsMenu.contentTypeAdd(PageBuilderSliderContentType.role)}}" stepKey="clickAddNewSlideChild"/>
35+
<waitForPageLoad stepKey="waitForPageLoad2"/>
7036
</actionGroup>
7137
</actionGroups>

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

Lines changed: 10 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -31,60 +31,24 @@
3131
<waitForPageLoad stepKey="waitForNewTab" time="30"/>
3232
<waitForElementVisible selector="{{TabOnStage.tabContent(to)}}" stepKey="waitForNewTabContent"/>
3333
<waitForElementVisible selector="{{TabOnStage.tabHeader(to)}}" stepKey="waitForNewTabHeader"/>
34-
<waitForElementVisible selector="{{TabOnStage.tabOptionsByIndex(to)}}" stepKey="waitForTabOptionsPanel"/>
35-
<waitForElementVisible selector="{{TabOnStage.tabOptionsEdit}}" stepKey="seeTabOptionsEdit2"/>
36-
<click selector="{{TabOnStage.tabOptionsEdit}}" stepKey="clickEditContentType2"/>
34+
<waitForElementVisible selector="{{TabOnStage.optionsMenu(to)}}" stepKey="waitForTabOptionsPanel"/>
35+
<waitForElementVisible selector="{{TabOnStage.optionsMenuButton(to, 'edit')}}" stepKey="seeTabOptionsEdit2"/>
36+
<click selector="{{TabOnStage.optionsMenuButton(to, 'edit')}}" stepKey="clickEditContentType2"/>
3737
<waitForElementVisible time="5" selector="{{EditPanelForm.editForm}}" stepKey="waitForEditForm" />
3838
<!-- Required time wait due to animation -->
3939
<waitForPageLoad stepKey="waitForAnimation" time="30"/>
4040
<see userInput="Edit Tab" selector="{{EditPanelForm.editFormTitle}}" stepKey="seeContentTypeNameInEditFormTitle"/>
4141
</actionGroup>
42-
<actionGroup name="duplicateTabByIndex">
43-
<arguments>
44-
<argument name="index" defaultValue="1" type="string"/>
45-
</arguments>
46-
<waitForElementVisible time="10" selector="{{TabOnStage.tabHeader(index)}}" stepKey="waitForContentTypeInStageVisible" />
47-
<click stepKey="clickTabTitle" selector="{{TabOnStage.tabHeader(index)}}"/>
48-
<waitForElementVisible time="30" selector="{{TabOnStage.tabOptionsEdit}}" stepKey="seeTabOptionsEdit"/>
49-
<click selector="{{TabOnStage.tabOptionsDuplicate}}" stepKey="clickEditContentType"/>
50-
</actionGroup>
51-
<actionGroup name="openTabOptionsByIndex">
52-
<arguments>
53-
<argument name="index" defaultValue="1" type="string"/>
54-
</arguments>
55-
<waitForElementVisible time="10" selector="{{TabOnStage.tabHeader(index)}}" stepKey="waitForContentTypeInStageVisible" />
56-
<click stepKey="clickTabTitle" selector="{{TabOnStage.tabHeader(index)}}"/>
57-
<waitForElementVisible selector="{{TabOnStage.tabOptionsEdit}}" stepKey="seeTabOptionsEdit"/>
58-
<click selector="{{TabOnStage.tabOptionsEdit}}" stepKey="clickEditContentType"/>
59-
<waitForElementVisible time="5" selector="{{EditPanelForm.editForm}}" stepKey="waitForEditForm" />
60-
<!-- Required time wait due to animation -->
61-
<waitForPageLoad stepKey="waitForAnimation" time="30"/>
62-
<see userInput="Edit Tab" selector="{{EditPanelForm.editFormTitle}}" stepKey="seeContentTypeNameInEditFormTitle"/>
63-
</actionGroup>
64-
<actionGroup name="switchTabsAdmin">
65-
<arguments>
66-
<argument name="from" defaultValue="1" type="string"/>
67-
<argument name="to" defaultValue="2" type="string"/>
68-
</arguments>
69-
<click selector="{{TabOnStage.tabHeader(to)}}" stepKey="switchToTab"/>
70-
<waitForPageLoad stepKey="waitForTabChangeAnimation" time="30"/>
71-
<waitForElementVisible time="30" selector="{{TabOnStage.tabHeaderItemActive(to)}}" stepKey="seeNewTabActive"/>
72-
<assertElementContainsAttribute selector="{{TabOnStage.tabPanel(from)}}" attribute="aria-hidden" expectedValue="true" stepKey="assertOldTabHidden"/>
73-
<assertElementContainsAttribute selector="{{TabOnStage.tabPanel(to)}}" attribute="aria-hidden" expectedValue="false" stepKey="assertNewTabVisible"/>
74-
</actionGroup>
75-
<actionGroup name="switchTabsStorefront">
42+
<actionGroup name="switchTabs">
7643
<arguments>
44+
<argument name="section"/>
7745
<argument name="from" defaultValue="1" type="string"/>
7846
<argument name="to" defaultValue="2" type="string"/>
7947
</arguments>
80-
<!-- requires reloadPage before for tabs to become active, see MAGETWO-92406 -->
81-
<click selector="{{TabOnStorefront.tabHeader(to)}}" stepKey="switchToTab"/>
82-
<waitForPageLoad stepKey="waitForTabChangeAnimationStorefront1" time="30"/>
83-
<scrollToTopOfPage stepKey="scrollToTopOfPage"/>
84-
<wait time="2" stepKey="waitForTabRender"/>
85-
<waitForPageLoad stepKey="waitForTabChangeAnimationStorefront2" time="30"/>
86-
<waitForElementVisible time="30" selector="{{TabOnStorefront.tabHeaderItemActive(to)}}" stepKey="seeNewTabActive"/>
87-
<assertElementContainsAttribute selector="{{TabOnStorefront.tabContent(from)}}" attribute="aria-hidden" expectedValue="true" stepKey="assertOldTabHidden"/>
88-
<assertElementContainsAttribute selector="{{TabOnStorefront.tabContent(to)}}" attribute="aria-hidden" expectedValue="false" stepKey="assertNewTabVisible"/>
48+
<click selector="{{section.tabHeader(to)}}" stepKey="switchToTab"/>
49+
<waitForPageLoad stepKey="waitForPageLoad" time="30"/>
50+
<waitForElementVisible time="30" selector="{{section.tabHeaderItemActive(to)}}" stepKey="seeNewTabActive"/>
51+
<assertElementContainsAttribute selector="{{section.tabPanel(from)}}" attribute="aria-hidden" expectedValue="true" stepKey="assertOldTabHidden"/>
52+
<assertElementContainsAttribute selector="{{section.tabPanel(to)}}" attribute="aria-hidden" expectedValue="false" stepKey="assertNewTabVisible"/>
8953
</actionGroup>
9054
</actionGroups>

0 commit comments

Comments
 (0)