Skip to content

Commit 53de45d

Browse files
committed
Merge remote-tracking branch 'origin/develop' into MFTF-3.0.0
2 parents 4f4f614 + fe9daa1 commit 53de45d

File tree

19 files changed

+917
-72
lines changed

19 files changed

+917
-72
lines changed

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

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,74 @@
5050
<actualResult type="variable">ratioDifference</actualResult>
5151
</assertLessThanOrEqual>
5252
</actionGroup>
53+
<actionGroup name="validateVideoWithOnlyVideoUrl">
54+
<arguments>
55+
<argument name="page" defaultValue=""/>
56+
<argument name="index" defaultValue="1" type="string"/>
57+
<argument name="url" defaultValue=""/>
58+
<!-- This is 2 because the width and the height may both have fractions that could round by a maximum of 1 for each which makes the maximum 2-->
59+
<argument name="acceptableOffset" defaultValue="2" type="string"/>
60+
</arguments>
61+
<waitForElementVisible selector="{{page.base(index)}}" stepKey="waitForElement"/>
62+
<waitForElementVisible selector="{{page.source(index, url.renderedValue)}}" stepKey="waitForUrl"/>
63+
<waitForElementVisible selector="{{page.noWidth(index)}}" stepKey="waitForWidth"/>
64+
<comment userInput="Validate Aspect Ratio" stepKey="commentValidateAspectRatio"/>
65+
<executeJS function="return window.calculatedHeight = parseInt(getComputedStyle(document.evaluate(&quot;{{page.iframe(index)}}&quot;,document.body).iterateNext()).width) / 16 * 9" stepKey="calculatedHeight"/>
66+
<executeJS function="return window.actualHeight = parseInt(getComputedStyle(document.evaluate(&quot;{{page.iframe(index)}}&quot;,document.body).iterateNext()).height)" stepKey="actualHeight"/>
67+
<executeJS function="return Math.abs(window.calculatedHeight - window.actualHeight)" stepKey="ratioDifference"/>
68+
<assertLessThanOrEqual stepKey="assertRatio">
69+
<expectedResult type="int">{{acceptableOffset}}</expectedResult>
70+
<actualResult type="variable">ratioDifference</actualResult>
71+
</assertLessThanOrEqual>
72+
<grabAttributeFrom selector="{{page.iframe(index)}}" userInput="src" stepKey="videoSrc"/>
73+
<assertNotContains stepKey="assertNoAutoplay">
74+
<expectedResult type="string">autoplay</expectedResult>
75+
<actualResult type="variable">$videoSrc</actualResult>
76+
</assertNotContains>
77+
</actionGroup>
78+
<actionGroup name="validateVideoWithOnlyVideoUrlMp4">
79+
<arguments>
80+
<argument name="page" defaultValue=""/>
81+
<argument name="index" defaultValue="1" type="string"/>
82+
<argument name="url" defaultValue=""/>
83+
<!-- This is 2 because the width and the height may both have fractions that could round by a maximum of 1 for each which makes the maximum 2-->
84+
<argument name="acceptableOffset" defaultValue="2" type="string"/>
85+
</arguments>
86+
<waitForElementVisible selector="{{page.base(index)}}" stepKey="waitForElement"/>
87+
<waitForElementVisible selector="{{page.sourceVideo(index, url.renderedValue)}}" stepKey="waitForUrl"/>
88+
<waitForElementVisible selector="{{page.noWidth(index)}}" stepKey="waitForWidth"/>
89+
<comment userInput="Validate Aspect Ratio" stepKey="commentValidateAspectRatio"/>
90+
<executeJS function="return window.calculatedHeight = parseInt(getComputedStyle(document.evaluate(&quot;{{page.video(index)}}&quot;,document.body).iterateNext()).width) / 16 * 9" stepKey="calculatedHeight"/>
91+
<executeJS function="return window.actualHeight = parseInt(getComputedStyle(document.evaluate(&quot;{{page.video(index)}}&quot;,document.body).iterateNext()).height)" stepKey="actualHeight"/>
92+
<executeJS function="return Math.abs(window.calculatedHeight - window.actualHeight)" stepKey="ratioDifference"/>
93+
<assertLessThanOrEqual stepKey="assertRatio">
94+
<expectedResult type="int">{{acceptableOffset}}</expectedResult>
95+
<actualResult type="variable">ratioDifference</actualResult>
96+
</assertLessThanOrEqual>
97+
<waitForElementNotVisible selector="{{page.videoAutoplay(index)}}" stepKey="assertNoAutoplay"/>
98+
</actionGroup>
99+
<actionGroup name="validateVideoPlaying">
100+
<annotations>
101+
<description>Validates that the video content type is playing.</description>
102+
</annotations>
103+
<arguments>
104+
<argument name="page" defaultValue="VideoOnStage"/>
105+
<argument name="url" defaultValue="PageBuilderVideoUrl_Empty"/>
106+
<argument name="index" defaultValue="1" type="string"/>
107+
</arguments>
108+
<waitForPageLoad stepKey="waitForPageLoad"/>
109+
<waitForElementVisible selector="{{page.videoElement(index)}}" stepKey="waitForVideoVisible"/>
110+
<executeJS function="document.querySelector('[data-element=\'video\']').id = 'video-iframe'" stepKey="setIframeId"/>
111+
<switchToIFrame userInput="video-iframe" stepKey="switchToVideoIframe"/>
112+
<waitForElementVisible selector="{{page.iframePlaying(index)}}" stepKey="seeIframePlaying"/>
113+
<switchToIFrame stepKey="switchBackFromIframe"/>
114+
</actionGroup>
115+
<actionGroup name="validateVideoNotAutoplaying" extends="validateVideoPlaying">
116+
<annotations>
117+
<description>Validates that the video content type is not autoplaying.</description>
118+
</annotations>
119+
<waitForElementVisible selector="{{page.iframeNotAutoplaying(index)}}" stepKey="seeIframePlaying"/>
120+
</actionGroup>
53121
<actionGroup name="validateEmptyVideoStage">
54122
<arguments>
55123
<argument name="index" defaultValue="1" type="string"/>

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

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@
2727
<data key="section">general</data>
2828
<data key="fieldName">video_source</data>
2929
<data key="value">Test</data>
30-
<data key="errorMessage">Please enter a valid video URL.</data>
30+
<data key="errorMessage">Please enter a valid video URL. Valid URLs have a video file extension (.mp4, .webm, .ogv) or links to videos on YouTube or Vimeo.</data>
3131
</entity>
3232
<entity name="PageBuilder_InvalidVideoURL_HTML" type="pagebuilder_video_url_property">
3333
<data key="name">Video URL</data>
3434
<data key="section">general</data>
3535
<data key="fieldName">video_source</data>
3636
<data key="value">&lt;iframe width=&quot;1280&quot; height=&quot;720&quot; src=&quot;https://www.youtube.com/embed/bLXEUP6vKEk"&gt;&lt;/iframe&gt;</data>
37-
<data key="errorMessage">Please enter a valid video URL.</data>
37+
<data key="errorMessage">Please enter a valid video URL. Valid URLs have a video file extension (.mp4, .webm, .ogv) or links to videos on YouTube or Vimeo.</data>
3838
</entity>
3939
<entity name="PageBuilderVideoUrl_NonEmbedded" type="pagebuilder_video_url_property">
4040
<data key="name">Video URL</data>
@@ -43,6 +43,57 @@
4343
<data key="value">https://www.youtube.com/watch?v=slOtnjsbff0</data>
4444
<data key="renderedValue">https://www.youtube.com/embed/slOtnjsbff0</data>
4545
</entity>
46+
<entity name="PageBuilderVideoUrl_Empty" type="pagebuilder_video_url_property">
47+
<data key="name">Video URL</data>
48+
<data key="section">general</data>
49+
<data key="fieldName">video_source</data>
50+
<data key="value"/>
51+
<data key="tooltipText">Video URLs can be links to videos on YouTube or Vimeo, or HTTP(S) links to files with valid video extensions (we recommend .mp4)</data>
52+
</entity>
53+
<entity name="PageBuilderVideoUrl_YouTube_Insecure" type="pagebuilder_video_url_property">
54+
<data key="name">Video URL</data>
55+
<data key="section">general</data>
56+
<data key="fieldName">video_source</data>
57+
<data key="value">http://www.youtube.com/watch?v=slOtnjsbff0</data>
58+
<data key="renderedValue">https://www.youtube.com/embed/slOtnjsbff0</data>
59+
</entity>
60+
<entity name="PageBuilderVideoUrl_Vimeo_Embedded" type="pagebuilder_video_url_property">
61+
<data key="name">Video URL</data>
62+
<data key="section">general</data>
63+
<data key="fieldName">video_source</data>
64+
<data key="value">https://player.vimeo.com/video/2393127</data>
65+
<data key="renderedValue">https://player.vimeo.com/video/2393127</data>
66+
</entity>
67+
<entity name="PageBuilderVideoUrl_Vimeo_NonEmbedded" type="pagebuilder_video_url_property">
68+
<data key="name">Video URL</data>
69+
<data key="section">general</data>
70+
<data key="fieldName">video_source</data>
71+
<data key="value">https://vimeo.com/2393127</data>
72+
<data key="renderedValue">https://player.vimeo.com/video/2393127</data>
73+
</entity>
74+
<entity name="PageBuilderVideoUrl_Vimeo_Insecure" type="pagebuilder_video_url_property">
75+
<data key="name">Video URL</data>
76+
<data key="section">general</data>
77+
<data key="fieldName">video_source</data>
78+
<data key="value">http://vimeo.com/2393127</data>
79+
<data key="renderedValue">https://player.vimeo.com/video/2393127</data>
80+
</entity>
81+
<entity name="PageBuilderVideoUrl_Mp4_URL" type="pagebuilder_video_url_property">
82+
<data key="name">Video URL</data>
83+
<data key="section">general</data>
84+
<data key="fieldName">video_source</data>
85+
<data key="value">https://obsessive-owls.s3.us-east-2.amazonaws.com/MFTF/avocado.mp4</data>
86+
<data key="renderedValue">https://obsessive-owls.s3.us-east-2.amazonaws.com/MFTF/avocado.mp4</data>
87+
</entity>
88+
<entity name="PageBuilderVideoUrl_Mp4_URL_Insecure" type="pagebuilder_video_url_property">
89+
<data key="name">Video URL</data>
90+
<data key="section">general</data>
91+
<data key="fieldName">video_source</data>
92+
<data key="value">http://obsessive-owls.s3.us-east-2.amazonaws.com/MFTF/avocado.mp4</data>
93+
<data key="renderedValue">http://obsessive-owls.s3.us-east-2.amazonaws.com/MFTF/avocado.mp4</data>
94+
<data key="width">320px</data>
95+
<data key="height">320px</data>
96+
</entity>
4697
<!-- Width -->
4798
<entity name="PageBuilderVideoWidth_500" type="pagebuilder_video_width_property">
4899
<data key="name">Maximum Width</data>
@@ -54,4 +105,17 @@
54105
<entity name="PageBuilderVideoContainerHeight" type="pagebuilder_video_height_property">
55106
<data key="value">281</data>
56107
</entity>
108+
<!-- Autoplay -->
109+
<entity name="PageBuilderVideoAutoplay_Enabled" type="pagebuilder_video_autoplay_property">
110+
<data key="name">Autoplay</data>
111+
<data key="section">general</data>
112+
<data key="fieldName">autoplay</data>
113+
<data key="value">true</data>
114+
</entity>
115+
<entity name="PageBuilderVideoAutoplay_Disabled" type="pagebuilder_video_autoplay_property">
116+
<data key="name">Autoplay</data>
117+
<data key="section">general</data>
118+
<data key="fieldName">autoplay</data>
119+
<data key="value">false</data>
120+
</entity>
57121
</entities>

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

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,22 @@
1212
<element name="mainCSS" type="text" selector="[data-content-type=video][data-element=main]"/>
1313
<element name="wrapperCSS" type="text" selector="[data-content-type=video] [data-element=wrapper]"/>
1414
<!-- Empty Video -->
15-
<element name="empty" type="text" selector="(//div[contains(@class,'pagebuilder-video-wrapper')])[{{arg1}}]//iframe" parameterized="true"/>
15+
<element name="empty" type="text" selector="(//div[contains(@class,'pagebuilder-video-wrapper')])[{{arg1}}]//video" parameterized="true"/>
16+
<element name="video" type="text" selector="(//div[contains(@class,'pagebuilder-video-wrapper')])[{{videoIndex}}]//video" parameterized="true"/>
17+
<element name="videoAutoplay" type="text" selector="(//div[contains(@class,'pagebuilder-video-wrapper')])[{{videoIndex}}]//video[contains(@autoplay,'true')]" parameterized="true"/>
1618
<element name="iframe" type="text" selector="(//div[contains(@class,'pagebuilder-video-wrapper')])[{{arg1}}]//iframe" parameterized="true"/>
1719
<element name="icon" type="text" selector="(//div[contains(@class,'pagebuilder-video-wrapper')])[{{arg1}}]//i[contains(@class,'icon-pagebuilder-video')]" parameterized="true"/>
1820
<element name="text" type="text" selector="(//div[contains(@class,'pagebuilder-video-wrapper')])[{{arg1}}]//span[.='{{arg2}}']" parameterized="true"/>
1921
<!-- General Configuration -->
2022
<element name="base" type="text" selector="(//div[contains(@class,'pagebuilder-video-wrapper')])[{{arg1}}]" parameterized="true"/>
2123
<element name="hidden" type="text" selector="(//div[contains(@class,'pagebuilder-video-wrapper')])[{{arg1}}]/ancestor::*[contains(@class, 'pagebuilder-content-type-wrapper') and contains(@class, 'pagebuilder-content-type-hidden')]" parameterized="true"/>
2224
<element name="notHidden" type="text" selector="(//div[contains(@class,'pagebuilder-content-type') and contains(@class,'pagebuilder-video')])[{{arg1}}]/parent::*[contains(@class, 'pagebuilder-content-type-wrapper') and not(contains(@class, 'pagebuilder-content-type-hidden'))][1]" parameterized="true"/>
23-
<element name="source" type="text" selector="(//div[contains(@class,'pagebuilder-video-wrapper')])[{{arg1}}]//iframe[@src='{{arg2}}']" parameterized="true"/>
25+
<element name="source" type="text" selector="(//div[contains(@class,'pagebuilder-video-wrapper')])[{{arg1}}]//iframe[contains(@src, '{{arg2}}')]" parameterized="true"/>
26+
<element name="sourceVideo" type="text" selector="(//div[contains(@class,'pagebuilder-video-wrapper')])[{{arg1}}]//video[contains(@src, '{{arg2}}')]" parameterized="true"/>
27+
<element name="src" type="text" selector="(//div[contains(@class,'pagebuilder-video-wrapper')])[{{arg1}}]//iframe[src]" parameterized="true"/>
28+
<element name="videoElement" type="text" selector="(//div[contains(@class,'pagebuilder-content-type') and contains(@class,'pagebuilder-video')])[{{videoIndex}}]//iframe|(//div[contains(@class,'pagebuilder-content-type') and contains(@class,'pagebuilder-video')])[{{videoIndex}}]//video" parameterized="true"/>
29+
<element name="iframePlaying" type="text" selector="(//div[@id='player'])[{{playerIndex}}]//div[contains(@class, 'playing-mode')]" parameterized="true"/>
30+
<element name="iframeNotAutoplaying" type="text" selector="(//div[@id='player'])[{{playerIndex}}]//div[contains(@class, 'unstarted-mode')]" parameterized="true"/>
2431
<element name="width" type="text" selector="(//div[contains(@class,'pagebuilder-video-inner')])[{{arg1}}][contains(@style,'max-width: {{arg2}}px;')]" parameterized="true"/>
2532
<element name="noWidth" type="text" selector="(//div[contains(@class,'pagebuilder-video-wrapper')])[{{arg1}}][not(starts-with(@style,'width:')) and not(contains(@style,' width:'))][contains(@class,'pagebuilder-video-wrapper')]" parameterized="true"/>
2633
<!-- Advanced Configuration -->
@@ -46,9 +53,12 @@
4653
<element name="hidden" type="text" selector="(//div[@data-content-type='video'])[{{arg1}}][contains(@style, 'display: none')]" parameterized="true"/>
4754
<element name="notHidden" type="text" selector="(//div[@data-content-type='video'])[{{arg1}}][not(contains(@style, 'display: none'))]" parameterized="true"/>
4855
<element name="iframe" type="text" selector="(//div[@data-content-type='video']//iframe)[{{arg1}}]" parameterized="true"/>
49-
<element name="source" type="text" selector="(//div[@data-content-type='video']//iframe)[{{arg1}}][@src='{{arg2}}']" parameterized="true"/>
56+
<element name="source" type="text" selector="(//div[@data-content-type='video']//iframe)[{{arg1}}][contains(@src, '{{arg2}}')]" parameterized="true"/>
5057
<element name="width" type="text" selector="(//div[@data-content-type='video'])[{{arg1}}]//div[@data-element='inner'][contains(@style,'max-width: {{arg2}}')]" parameterized="true"/>
5158
<element name="noWidth" type="text" selector="(//div[@data-content-type='video']//iframe)[{{arg1}}][not(starts-with(@style,'width:')) and not(contains(@style,' width:'))]" parameterized="true"/>
59+
<element name="videoElement" type="text" parameterized="true" selector="(//div[@data-content-type='video'])[{{videoIndex}}]//iframe|(//div[@data-content-type='row'])[{{videoIndex}}]//video"/>
60+
<element name="iframePlaying" type="text" selector="(//div[@id='player'])[{{playerIndex}}]//div[contains(@class, 'playing-mode')]" parameterized="true"/>
61+
<element name="iframeNotAutoplaying" type="text" selector="(//div[@id='player'])[{{playerIndex}}]//div[contains(@class, 'unstarted-mode')]" parameterized="true"/>
5262
<!-- Advanced Configuration -->
5363
<element name="alignment" type="text" selector="(//div[@data-content-type='video'])[{{arg1}}][contains(@style,'text-align: {{arg2}};')]" parameterized="true"/>
5464
<element name="noAlignment" type="text" selector="(//div[@data-content-type='video'])[{{arg1}}][not(contains(@style,'text-align'))]" parameterized="true"/>

0 commit comments

Comments
 (0)