Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RNMobile] Initial HTML E2E test #26405

Merged
merged 85 commits into from
Mar 31, 2021
Merged

Conversation

jd-alexander
Copy link
Contributor

@jd-alexander jd-alexander commented Oct 22, 2020

Fixes #26146

Gutenberg Mobile PR wordpress-mobile/gutenberg-mobile#2753

Description

This change introduces a React Native E2E test that renders the initial HTML content that's used during development.

How has this been tested?

I tested this on Android, by running TEST_RN_PLATFORM=android npm run native device-tests:local gutenberg-editor-blocks.test. I will await the results of this PR for iOS because I have been having some issues when running iOS tests locally.

Types of changes

  • The test that's run on gutenberg PR has been changed from the Gallery test to the initial html test.
  • A function was created to scroll to the last block within the post to ensure that all blocks are rendered. I noticed that the test took a while to run because the swipe functionality within the test helper waits 3 seconds each time a swipe is done. I am assuming this is done to ensure that all elements on the screen are loaded and such forth so I didn't modify it. I am sharing this here in case this needs to be optimized.
  • the initial html content was added to the test-data.js file. I am not sure if there's a way to include the initial html being used in the other part of the app. If there is, please let me know so I can reduce the duplicate code. I just utilized this approach since I saw that all the test data resided in the test directory and I wasn't able to import the initialHtml module.

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR.

@jd-alexander jd-alexander added [Type] Automated Testing Testing infrastructure changes impacting the execution of end-to-end (E2E) and/or unit tests. Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change) labels Oct 22, 2020
@github-actions
Copy link

github-actions bot commented Oct 22, 2020

Size Change: 0 B

Total Size: 1.42 MB

ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.78 kB 0 B
build/api-fetch/index.js 3.42 kB 0 B
build/autop/index.js 2.82 kB 0 B
build/blob/index.js 664 B 0 B
build/block-directory/index.js 8.63 kB 0 B
build/block-directory/style-rtl.css 1 kB 0 B
build/block-directory/style.css 1.01 kB 0 B
build/block-editor/index.js 127 kB 0 B
build/block-editor/style-rtl.css 12.4 kB 0 B
build/block-editor/style.css 12.4 kB 0 B
build/block-library/blocks/archives/editor-rtl.css 61 B 0 B
build/block-library/blocks/archives/editor.css 60 B 0 B
build/block-library/blocks/audio/editor-rtl.css 58 B 0 B
build/block-library/blocks/audio/editor.css 58 B 0 B
build/block-library/blocks/audio/style-rtl.css 112 B 0 B
build/block-library/blocks/audio/style.css 112 B 0 B
build/block-library/blocks/block/editor-rtl.css 161 B 0 B
build/block-library/blocks/block/editor.css 161 B 0 B
build/block-library/blocks/button/editor-rtl.css 475 B 0 B
build/block-library/blocks/button/editor.css 474 B 0 B
build/block-library/blocks/button/style-rtl.css 551 B 0 B
build/block-library/blocks/button/style.css 551 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 315 B 0 B
build/block-library/blocks/buttons/editor.css 315 B 0 B
build/block-library/blocks/buttons/style-rtl.css 370 B 0 B
build/block-library/blocks/buttons/style.css 370 B 0 B
build/block-library/blocks/calendar/style-rtl.css 208 B 0 B
build/block-library/blocks/calendar/style.css 208 B 0 B
build/block-library/blocks/categories/editor-rtl.css 84 B 0 B
build/block-library/blocks/categories/editor.css 83 B 0 B
build/block-library/blocks/categories/style-rtl.css 79 B 0 B
build/block-library/blocks/categories/style.css 79 B 0 B
build/block-library/blocks/code/style-rtl.css 90 B 0 B
build/block-library/blocks/code/style.css 90 B 0 B
build/block-library/blocks/columns/editor-rtl.css 190 B 0 B
build/block-library/blocks/columns/editor.css 190 B 0 B
build/block-library/blocks/columns/style-rtl.css 436 B 0 B
build/block-library/blocks/columns/style.css 435 B 0 B
build/block-library/blocks/cover/editor-rtl.css 605 B 0 B
build/block-library/blocks/cover/editor.css 605 B 0 B
build/block-library/blocks/cover/style-rtl.css 1.24 kB 0 B
build/block-library/blocks/cover/style.css 1.24 kB 0 B
build/block-library/blocks/embed/editor-rtl.css 486 B 0 B
build/block-library/blocks/embed/editor.css 486 B 0 B
build/block-library/blocks/embed/style-rtl.css 401 B 0 B
build/block-library/blocks/embed/style.css 400 B 0 B
build/block-library/blocks/file/editor-rtl.css 175 B 0 B
build/block-library/blocks/file/editor.css 174 B 0 B
build/block-library/blocks/file/style-rtl.css 248 B 0 B
build/block-library/blocks/file/style.css 248 B 0 B
build/block-library/blocks/freeform/editor-rtl.css 2.45 kB 0 B
build/block-library/blocks/freeform/editor.css 2.45 kB 0 B
build/block-library/blocks/gallery/editor-rtl.css 704 B 0 B
build/block-library/blocks/gallery/editor.css 705 B 0 B
build/block-library/blocks/gallery/style-rtl.css 1.11 kB 0 B
build/block-library/blocks/gallery/style.css 1.1 kB 0 B
build/block-library/blocks/group/editor-rtl.css 160 B 0 B
build/block-library/blocks/group/editor.css 160 B 0 B
build/block-library/blocks/group/style-rtl.css 57 B 0 B
build/block-library/blocks/group/style.css 57 B 0 B
build/block-library/blocks/heading/editor-rtl.css 129 B 0 B
build/block-library/blocks/heading/editor.css 129 B 0 B
build/block-library/blocks/heading/style-rtl.css 76 B 0 B
build/block-library/blocks/heading/style.css 76 B 0 B
build/block-library/blocks/html/editor-rtl.css 281 B 0 B
build/block-library/blocks/html/editor.css 281 B 0 B
build/block-library/blocks/image/editor-rtl.css 717 B 0 B
build/block-library/blocks/image/editor.css 716 B 0 B
build/block-library/blocks/image/style-rtl.css 476 B 0 B
build/block-library/blocks/image/style.css 478 B 0 B
build/block-library/blocks/latest-comments/style-rtl.css 281 B 0 B
build/block-library/blocks/latest-comments/style.css 282 B 0 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B 0 B
build/block-library/blocks/latest-posts/editor.css 137 B 0 B
build/block-library/blocks/latest-posts/style-rtl.css 523 B 0 B
build/block-library/blocks/latest-posts/style.css 522 B 0 B
build/block-library/blocks/legacy-widget/editor-rtl.css 398 B 0 B
build/block-library/blocks/legacy-widget/editor.css 399 B 0 B
build/block-library/blocks/list/style-rtl.css 63 B 0 B
build/block-library/blocks/list/style.css 63 B 0 B
build/block-library/blocks/media-text/editor-rtl.css 191 B 0 B
build/block-library/blocks/media-text/editor.css 191 B 0 B
build/block-library/blocks/media-text/style-rtl.css 535 B 0 B
build/block-library/blocks/media-text/style.css 532 B 0 B
build/block-library/blocks/more/editor-rtl.css 434 B 0 B
build/block-library/blocks/more/editor.css 434 B 0 B
build/block-library/blocks/navigation-link/editor-rtl.css 597 B 0 B
build/block-library/blocks/navigation-link/editor.css 597 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 957 B 0 B
build/block-library/blocks/navigation-link/style.css 955 B 0 B
build/block-library/blocks/navigation/editor-rtl.css 1.13 kB 0 B
build/block-library/blocks/navigation/editor.css 1.13 kB 0 B
build/block-library/blocks/navigation/style-rtl.css 204 B 0 B
build/block-library/blocks/navigation/style.css 205 B 0 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B 0 B
build/block-library/blocks/nextpage/editor.css 395 B 0 B
build/block-library/blocks/page-list/editor-rtl.css 170 B 0 B
build/block-library/blocks/page-list/editor.css 170 B 0 B
build/block-library/blocks/page-list/style-rtl.css 167 B 0 B
build/block-library/blocks/page-list/style.css 167 B 0 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B 0 B
build/block-library/blocks/paragraph/editor.css 157 B 0 B
build/block-library/blocks/paragraph/style-rtl.css 247 B 0 B
build/block-library/blocks/paragraph/style.css 248 B 0 B
build/block-library/blocks/post-author/editor-rtl.css 209 B 0 B
build/block-library/blocks/post-author/editor.css 209 B 0 B
build/block-library/blocks/post-author/style-rtl.css 183 B 0 B
build/block-library/blocks/post-author/style.css 184 B 0 B
build/block-library/blocks/post-comments-form/style-rtl.css 250 B 0 B
build/block-library/blocks/post-comments-form/style.css 250 B 0 B
build/block-library/blocks/post-content/editor-rtl.css 139 B 0 B
build/block-library/blocks/post-content/editor.css 139 B 0 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B 0 B
build/block-library/blocks/post-excerpt/editor.css 73 B 0 B
build/block-library/blocks/post-featured-image/editor-rtl.css 338 B 0 B
build/block-library/blocks/post-featured-image/editor.css 338 B 0 B
build/block-library/blocks/post-featured-image/style-rtl.css 100 B 0 B
build/block-library/blocks/post-featured-image/style.css 100 B 0 B
build/block-library/blocks/preformatted/style-rtl.css 103 B 0 B
build/block-library/blocks/preformatted/style.css 103 B 0 B
build/block-library/blocks/pullquote/editor-rtl.css 183 B 0 B
build/block-library/blocks/pullquote/editor.css 183 B 0 B
build/block-library/blocks/pullquote/style-rtl.css 318 B 0 B
build/block-library/blocks/pullquote/style.css 318 B 0 B
build/block-library/blocks/query-loop/editor-rtl.css 83 B 0 B
build/block-library/blocks/query-loop/editor.css 82 B 0 B
build/block-library/blocks/query-loop/style-rtl.css 315 B 0 B
build/block-library/blocks/query-loop/style.css 317 B 0 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B 0 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B 0 B
build/block-library/blocks/query-pagination/editor-rtl.css 270 B 0 B
build/block-library/blocks/query-pagination/editor.css 262 B 0 B
build/block-library/blocks/query-pagination/style-rtl.css 168 B 0 B
build/block-library/blocks/query-pagination/style.css 168 B 0 B
build/block-library/blocks/query-title/editor-rtl.css 86 B 0 B
build/block-library/blocks/query-title/editor.css 86 B 0 B
build/block-library/blocks/query/editor-rtl.css 795 B 0 B
build/block-library/blocks/query/editor.css 794 B 0 B
build/block-library/blocks/quote/style-rtl.css 169 B 0 B
build/block-library/blocks/quote/style.css 169 B 0 B
build/block-library/blocks/rss/editor-rtl.css 201 B 0 B
build/block-library/blocks/rss/editor.css 202 B 0 B
build/block-library/blocks/rss/style-rtl.css 290 B 0 B
build/block-library/blocks/rss/style.css 290 B 0 B
build/block-library/blocks/search/editor-rtl.css 165 B 0 B
build/block-library/blocks/search/editor.css 165 B 0 B
build/block-library/blocks/search/style-rtl.css 342 B 0 B
build/block-library/blocks/search/style.css 344 B 0 B
build/block-library/blocks/separator/editor-rtl.css 99 B 0 B
build/block-library/blocks/separator/editor.css 99 B 0 B
build/block-library/blocks/separator/style-rtl.css 251 B 0 B
build/block-library/blocks/separator/style.css 251 B 0 B
build/block-library/blocks/shortcode/editor-rtl.css 512 B 0 B
build/block-library/blocks/shortcode/editor.css 512 B 0 B
build/block-library/blocks/site-logo/editor-rtl.css 201 B 0 B
build/block-library/blocks/site-logo/editor.css 201 B 0 B
build/block-library/blocks/site-logo/style-rtl.css 115 B 0 B
build/block-library/blocks/site-logo/style.css 115 B 0 B
build/block-library/blocks/social-link/editor-rtl.css 164 B 0 B
build/block-library/blocks/social-link/editor.css 165 B 0 B
build/block-library/blocks/social-links/editor-rtl.css 776 B 0 B
build/block-library/blocks/social-links/editor.css 776 B 0 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB 0 B
build/block-library/blocks/social-links/style.css 1.33 kB 0 B
build/block-library/blocks/spacer/editor-rtl.css 317 B 0 B
build/block-library/blocks/spacer/editor.css 317 B 0 B
build/block-library/blocks/spacer/style-rtl.css 48 B 0 B
build/block-library/blocks/spacer/style.css 48 B 0 B
build/block-library/blocks/table/editor-rtl.css 478 B 0 B
build/block-library/blocks/table/editor.css 478 B 0 B
build/block-library/blocks/table/style-rtl.css 402 B 0 B
build/block-library/blocks/table/style.css 402 B 0 B
build/block-library/blocks/tag-cloud/editor-rtl.css 118 B 0 B
build/block-library/blocks/tag-cloud/editor.css 118 B 0 B
build/block-library/blocks/tag-cloud/style-rtl.css 94 B 0 B
build/block-library/blocks/tag-cloud/style.css 94 B 0 B
build/block-library/blocks/template-part/editor-rtl.css 552 B 0 B
build/block-library/blocks/template-part/editor.css 551 B 0 B
build/block-library/blocks/term-description/editor-rtl.css 90 B 0 B
build/block-library/blocks/term-description/editor.css 90 B 0 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B 0 B
build/block-library/blocks/text-columns/editor.css 95 B 0 B
build/block-library/blocks/text-columns/style-rtl.css 166 B 0 B
build/block-library/blocks/text-columns/style.css 166 B 0 B
build/block-library/blocks/verse/editor-rtl.css 50 B 0 B
build/block-library/blocks/verse/editor.css 50 B 0 B
build/block-library/blocks/verse/style-rtl.css 87 B 0 B
build/block-library/blocks/verse/style.css 87 B 0 B
build/block-library/blocks/video/editor-rtl.css 504 B 0 B
build/block-library/blocks/video/editor.css 503 B 0 B
build/block-library/blocks/video/style-rtl.css 187 B 0 B
build/block-library/blocks/video/style.css 187 B 0 B
build/block-library/common-rtl.css 1.31 kB 0 B
build/block-library/common.css 1.31 kB 0 B
build/block-library/editor-rtl.css 9.53 kB 0 B
build/block-library/editor.css 9.52 kB 0 B
build/block-library/index.js 151 kB 0 B
build/block-library/reset-rtl.css 503 B 0 B
build/block-library/reset.css 504 B 0 B
build/block-library/style-rtl.css 9.25 kB 0 B
build/block-library/style.css 9.25 kB 0 B
build/block-library/theme-rtl.css 692 B 0 B
build/block-library/theme.css 693 B 0 B
build/block-serialization-default-parser/index.js 1.87 kB 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/blocks/index.js 48.4 kB 0 B
build/components/index.js 284 kB 0 B
build/components/style-rtl.css 16.2 kB 0 B
build/components/style.css 16.2 kB 0 B
build/compose/index.js 11.2 kB 0 B
build/core-data/index.js 16.6 kB 0 B
build/customize-widgets/index.js 7.33 kB 0 B
build/customize-widgets/style-rtl.css 676 B 0 B
build/customize-widgets/style.css 677 B 0 B
build/data-controls/index.js 838 B 0 B
build/data/index.js 8.89 kB 0 B
build/date/index.js 31.9 kB 0 B
build/deprecated/index.js 787 B 0 B
build/dom-ready/index.js 576 B 0 B
build/dom/index.js 5.08 kB 0 B
build/edit-navigation/index.js 17.4 kB 0 B
build/edit-navigation/style-rtl.css 2.86 kB 0 B
build/edit-navigation/style.css 2.86 kB 0 B
build/edit-post/index.js 307 kB 0 B
build/edit-post/style-rtl.css 7.05 kB 0 B
build/edit-post/style.css 7.04 kB 0 B
build/edit-site/index.js 27.5 kB 0 B
build/edit-site/style-rtl.css 4.51 kB 0 B
build/edit-site/style.css 4.5 kB 0 B
build/edit-widgets/index.js 15.8 kB 0 B
build/edit-widgets/style-rtl.css 2.98 kB 0 B
build/edit-widgets/style.css 2.98 kB 0 B
build/editor/index.js 42.7 kB 0 B
build/editor/style-rtl.css 3.96 kB 0 B
build/editor/style.css 3.96 kB 0 B
build/element/index.js 4.62 kB 0 B
build/escape-html/index.js 735 B 0 B
build/format-library/index.js 6.76 kB 0 B
build/format-library/style-rtl.css 637 B 0 B
build/format-library/style.css 639 B 0 B
build/hooks/index.js 2.28 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 4.02 kB 0 B
build/is-shallow-equal/index.js 699 B 0 B
build/keyboard-shortcuts/index.js 2.53 kB 0 B
build/keycodes/index.js 1.96 kB 0 B
build/list-reusable-blocks/index.js 3.19 kB 0 B
build/list-reusable-blocks/style-rtl.css 629 B 0 B
build/list-reusable-blocks/style.css 628 B 0 B
build/media-utils/index.js 5.39 kB 0 B
build/notices/index.js 1.85 kB 0 B
build/nux/index.js 3.42 kB 0 B
build/nux/style-rtl.css 731 B 0 B
build/nux/style.css 727 B 0 B
build/plugins/index.js 2.95 kB 0 B
build/primitives/index.js 1.42 kB 0 B
build/priority-queue/index.js 791 B 0 B
build/react-i18n/index.js 1.46 kB 0 B
build/redux-routine/index.js 2.84 kB 0 B
build/reusable-blocks/index.js 3.79 kB 0 B
build/reusable-blocks/style-rtl.css 225 B 0 B
build/reusable-blocks/style.css 225 B 0 B
build/rich-text/index.js 13.5 kB 0 B
build/server-side-render/index.js 2.6 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/url/index.js 3.02 kB 0 B
build/viewport/index.js 1.86 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.22 kB 0 B

compressed-size-action

@jd-alexander
Copy link
Contributor Author

So as seen above the test was run successfully. I did download the video generated from Saucelabs and I noticed that the Android test video length was 3mins and the iOS test video length was 5 mins. Just noting that here for discussion :)

@ceyhun
Copy link
Member

ceyhun commented Oct 23, 2020

Thanks a lot for this @jd-alexander 🎉

I will await the results of this PR for iOS because I have been having some issues when running iOS tests locally.

There could be some issues if you're using Xcode 12: #26283 (review). You can install Xcode 11 aside 12 for now until that PR is merged.

the initial html content was added to the test-data.js file. I am not sure if there's a way to include the initial html being used in the other part of the app. If there is, please let me know so I can reduce the duplicate code. I just utilized this approach since I saw that all the test data resided in the test directory and I wasn't able to import the initialHtml module.

I think import initialHtml from '../src/initial-html'; should work in this case.

So as seen above the test was run successfully. I did download the video generated from Saucelabs and I noticed that the Android test video length was 3mins and the iOS test video length was 5 mins. Just noting that here for discussion :)

I wasn't able to find the Sauce Labs video link for this test in the CircleCI output but I was able to watch it from GitHub Actions artifacts.

For iOS I checked this run: https://github.com/WordPress/gutenberg/pull/26405/checks?check_run_id=1294846308. The most time consuming thing was typing the content in the text view. It took 5 minutes to type the whole initialHtml. I think a way to paste the initialHtml instead of typing on iOS would be really nice. It also didn't seem to scroll the list at all at the end of the test (maybe just a few pixels).

For Android I checked the artifacts in this run: https://github.com/WordPress/gutenberg/pull/26405/checks?check_run_id=1294846311. It was very fast to type the content (maybe it was pasting) and the rest of the time (~2:30mins) was taken by scrolling. It was waiting 3 seconds each time like you mentioned but the scrolling itself seemed very slow as well.

@jd-alexander
Copy link
Contributor Author

Thanks a lot for this @jd-alexander 🎉

Thanks for your review @ceyhun 🙇

There could be some issues if you're using Xcode 12: #26283 (review). You can install Xcode 11 aside 12 for now until that PR is merged.

Thanks I am going to do that.

I think import initialHtml from '../src/initial-html'; should work in this case.

Nice 😄

For iOS I checked this run: https://github.com/WordPress/gutenberg/pull/26405/checks?check_run_id=1294846308. The most time consuming thing was typing the content in the text view. It took 5 minutes to type the whole initialHtml. I think a way to paste the initialHtml instead of typing on iOS would be really nice. It also didn't seem to scroll the list at all at the end of the test (maybe just a few pixels).

Indeed! I am going to work on a way of doing the typing more instantaneously and yes, I am also going to look into why it doesn't do the scroll completely. I am wondering if it because it discover the element so it just stops. I will see what I can come up with.

For Android I checked the artifacts in this run: https://github.com/WordPress/gutenberg/pull/26405/checks?check_run_id=1294846311. It was very fast to type the content (maybe it was pasting) and the rest of the time (~2:30mins) was taken by scrolling. It was waiting 3 seconds each time like you mentioned but the scrolling itself seemed very slow as well

Indeed. I am going to modify the function that does the swipes so that I can pass in a delay param so that the scrolling doesn't operate so slowly.

@jd-alexander
Copy link
Contributor Author

So today I did some work to make these changes more optimized.

  • I got the swipe functionality to delay
  • I also utilized the initialHtml from the src and removed it from the testData

From an iOS standpoint, I still didn't get the test running on iOS 😞

This is the output I am getting

   [init({"browserName":"","platformName":"iOS","platformVersion":"13.4","deviceName":"iPhone 11","os":"iOS","deviceOrientation":"portrait","automationName":"XCUITest","appiumVersion":"1.16.0","app":"/Users/joeldean/Projects/gutenberg/packages/react-native-editor/ios/build/GutenbergDemo/Build/Products/Release-iphonesimulator/GutenbergDemo.app","processArguments":{"args":["uitesting"]}})] The environment you requested was unavailable.
    An unknown server-side error occurred while processing the command. Original error: Bad app: /Users/joeldean/Projects/gutenberg/packages/react-native-editor/ios/build/GutenbergDemo/Build/Products/Release-iphonesimulator/GutenbergDemo.app. App paths need to be absolute or an URL to a compressed app file: The application at '/Users/joeldean/Projects/gutenberg/packages/react-native-editor/ios/build/GutenbergDemo/Build/Products/Release-iphonesimulator/GutenbergDemo.app' does not exist or is not accessible

I also tried to utilize the copy and paste functionality, within the app using this function I wrote below. The weird thing that I think is happening is the content being escaped by the driver.

	// copy and paste html editor content explicitly
	async copyAndPasteHtmlContent( html ) {
		await toggleHtmlMode( this.driver, true );

		await this.driver.setClipboard(html,'plaintext');
		const htmlContentView = await this.getTextViewForHtmlViewContent();

		await longPressMiddleOfElement( this.driver, htmlContentView );
		await tapPasteAboveElement( this.driver, htmlContentView );

		await toggleHtmlMode( this.driver, false );
	}

The escaped content looks like

<!-- wp:heading -->\n<h2>Text Blocks</h2>\n<!-- /wp:heading -->\n\n<!-- wp:heading -->\n<h2 id=\"this-is-an-anchor\">What is Gutenberg?</h2>\n<!-- /wp:heading -->\n\n<!-- wp:paragraph -->\n<p><strong>Bold</strong> <em>Italic</em> <s>Striked</s> Superscript<sup>(1)</sup> Subscript<sub>(2)</sub> <a href=\"http://www.wordpress.org\" target=\"_blank\" rel=\"noreferrer noopener\">Link</a></p>\n<!-- /wp:paragraph -->\n\n<!-- wp:heading {\"level\":4} -->\n<h4>List</h4>\n<!-- /wp:heading -->\n\n<!-- wp:list -->\n<ul><li>First Item</li><li>Second Item</li><li>Third Item</li></ul>\n<!-- /wp:list -->\n\n<!-- wp:heading {\"level\":4} -->\n<h4>Quote</h4>\n<!-- /wp:heading -->\n\n<!-- wp:quote {\"align\":\"left\",\"className\":\"is-style-large\"} -->\n<blockquote class=\"wp-block-quote has-text-align-left is-style-large\"><p>\"This will make running your own blog a viable alternative again.\"</p><cite>— <a href=\"https://twitter.com/azumbrunnen_/status/1019347243084800005\">Adrian Zumbrunnen</a></cite></blockquote>\n<!-- /wp:quote -->\n\n<!-- wp:pullquote -->\n<figure class=\"wp-block-pullquote\"><blockquote><p>One of the hardest things to do in technology is disrupt yourself.</p><cite>Matt Mullenweg</cite></blockquote></figure>\n<!-- /wp:pullquote -->\n\n<!-- wp:heading {\"level\":4} -->\n<h4>Style Paragraph</h4>\n<!-- /wp:heading -->\n\n<!-- wp:paragraph {\"dropCap\":true,

I haven't figured out what exactly is causing this as yet.

Also while I was watching the video, I think the code that presses the paste button may be outdated so I will need to run a check on the coordinate algorithm being used to determine where on the screen should be clicked.

@ceyhun
Copy link
Member

ceyhun commented Oct 27, 2020

From an iOS standpoint, I still didn't get the test running on iOS 😞

Is the folder gutenberg/packages/react-native-editor/ios/build/GutenbergDemo/Build/Products/Release-iphonesimulator/GutenbergDemo.app empty in this case?

Are you using Xcode 11 on the command-line? You can check via running xcodebuild -version and switch using sudo xcode-select --switch /Applications/Xcode_11_path.app

@jd-alexander
Copy link
Contributor Author

Thanks much @ceyhun that fixed the XCode issue. I am now having another issue

    [init({"browserName":"","platformName":"iOS","platformVersion":"13.4","deviceName":"iPhone 11","os":"iOS","deviceOrientation":"portrait","automationName":"XCUITest","appiumVersion":"1.16.0","app":"/Users/joeldean/Projects/gutenberg/packages/react-native-editor/ios/build/GutenbergDemo/Build/Products/Release-iphonesimulator/GutenbergDemo.app","processArguments":{"args":["uitesting"]}})] The environment you requested was unavailable.
    An unknown server-side error occurred while processing the command. Original error: Bad app: /Users/joeldean/Projects/gutenberg/packages/react-native-editor/ios/build/GutenbergDemo/Build/Products/Release-iphonesimulator/GutenbergDemo.app. App paths need to be absolute or an URL to a compressed app file: The application at '/Users/joeldean/Projects/gutenberg/packages/react-native-editor/ios/build/GutenbergDemo/Build/Products/Release-iphonesimulator/GutenbergDemo.app' does not exist or is not accessible

So it seems the GutenbergDemo release project is not being generated

Is the folder gutenberg/packages/react-native-editor/ios/build/GutenbergDemo/Build/Products/Release-iphonesimulator/GutenbergDemo.app empty in this case

Yes, you are indeed correct with this one.

Following the testing steps in the README.md file I ran the appium doctor commands for ios and I got the output below, which means I need to fix some issues ( some of them seem unrelated) so I will do that to see if it will help.

info AppiumDoctor ### Diagnostic for optional dependencies starting ###
WARN AppiumDoctor  ✖ opencv4nodejs cannot be found.
WARN AppiumDoctor  ✖ ffmpeg cannot be found
WARN AppiumDoctor  ✖ mjpeg-consumer cannot be found.
WARN AppiumDoctor  ✖ set-simulator-location is not installed
WARN AppiumDoctor  ✖ idb and idb_companion are not installed
WARN AppiumDoctor  ✖ applesimutils cannot be found
WARN AppiumDoctor  ✖ ios-deploy cannot be found
info AppiumDoctor ### Diagnostic for optional dependencies completed, 7 fixes possible. ###
info AppiumDoctor
info AppiumDoctor ### Manual Fixes Needed ###
info AppiumDoctor The configuration cannot be automatically fixed, please do the following first:
WARN AppiumDoctor  ➜ Please install Carthage. Visit https://github.com/Carthage/Carthage#installing-carthage for more information.
info AppiumDoctor
info AppiumDoctor ### Optional Manual Fixes ###
info AppiumDoctor The configuration can install optionally. Please do the following manually:
WARN AppiumDoctor  ➜ Why opencv4nodejs is needed and how to install it: https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/image-comparison.md
WARN AppiumDoctor  ➜ ffmpeg is needed to record screen features. Please read https://www.ffmpeg.org/ to install it
WARN AppiumDoctor  ➜ mjpeg-consumer module is required to use MJPEG-over-HTTP features. Please install it with 'npm i -g mjpeg-consumer'.
WARN AppiumDoctor  ➜ set-simulator-location is needed to set location for Simulator. Please read https://github.com/lyft/set-simulator-location to install it
WARN AppiumDoctor  ➜ Why idb is needed and how to install it: https://github.com/appium/appium-idb
WARN AppiumDoctor  ➜ Why applesimutils is needed and how to install it: http://appium.io/docs/en/drivers/ios-xcuitest/
WARN AppiumDoctor  ➜ ios-deploy is used as a fallback command to install iOS applications to real device. Please read https://github.com/ios-control/ios-deploy/ to install it
info AppiumDoctor
info AppiumDoctor ###
info AppiumDoctor
info AppiumDoctor Bye! Run appium-doctor again when all manual fixes have been applied!

@jd-alexander
Copy link
Contributor Author

@ceyhun would you mind giving me some help on the iOS side of things? I lessened the swipe delay and other updates and that is working great but on iOS, I still haven't figured out how to get the pasting working right. I wanted to dig a bit deeper today but I am wrangling the release process for the first time so it ending up consuming most of my time. So yes, let me know if you are able to have a look as I want us to get a working solution merged in so we can prevent breakages like the recent Verse breakage that was being wrangled today. Thanks for your help.

@ceyhun
Copy link
Member

ceyhun commented Jan 15, 2021

I think I found a way to paste HTML instead of typing. Let's see if this passes on CI and how long it takes. If it takes too long, we can check if we can still catch the crashes if we don't scroll at all. Maybe just rendering the block list is enough.

@ceyhun
Copy link
Member

ceyhun commented Mar 25, 2021

Yay 🎉🎊🎆 All the 8 are green ✅ Let's run 8 more!!!

BTW here's the command I use to push empty commits:

for i in `seq 1 8`; do git commit --allow-empty -m "Run $i" && git push; done

@jd-alexander
Copy link
Contributor Author

Yay 🎉🎊🎆 All the 8 are green ✅ Let's run 8 more!!!

Awesome!!!! 🥳

Bumped the action hash to use v2.15.0, and also tried temporarily deleting the non-native jobs again. We should revert these 2 commits before merging:
b31695a
ff5a3c4

I will keep the reverting of these commits in mind. I am hoping the v2.15.0 really stabilises things on Android. Let's see what these 8 new runs have in store.

BTW here's the command I use to push empty commits:

for i in `seq 1 8`; do git commit --allow-empty -m "Run $i" && git push; done

Pretty neat. Beats doing it manually 😅

@jd-alexander
Copy link
Contributor Author

The results are in! We got 16 consecutive ✅ successful runs @ceyhun Things are looking good 😎🚀🚇🚢

@jd-alexander
Copy link
Contributor Author

jd-alexander commented Mar 30, 2021

@ceyhun I just saw the conversation about flaky tests here 👍🏾 👍🏾 👍🏾 👍🏾

I am quite confident we are in a good place from a stability standpoint. When we do merge these changes we can monitor for stability and if any hiccups arise we have several Android-related desired capabilities ( in particular timeout-related caps ) that we can leverage to resolve any flaky issues that may occur.

@ceyhun
Copy link
Member

ceyhun commented Mar 30, 2021

@jd-alexander I've reverted the commits deleting other workflows and also updated the gb-mobile PR with the gutenberg's current ref. If that's also green, I think we can go forward with both 🎉

@@ -11,7 +11,7 @@ jobs:
strategy:
matrix:
native-test-name: [
gutenberg-editor-gallery
gutenberg-editor-blocks
Copy link
Member

@ceyhun ceyhun Mar 30, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you think about renaming this to gutenberg-editor-initial-html and also keeping gutenberg-editor-gallery, but maybe making them run one after another instead of running in parallel?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with the renaming. What is the rationale for keeping the gallery test ? I thought this test would cover all cases and I'm wondering if that test could be more flaky than this one. Also I'm wondering about the collective time of both them running one after the other as well. Let me know what you think.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To be honest, I'm not interested in gallery block in this case 😄 But the gallery test checks some other aspects of the editor that are not covered by the initial HTML tests, mainly around the inserter menu, like opening the inserter menu, scrolling the inserter menu, and inserting a block.

The primary time-consuming task is building the js bundle and the native code (the ipa and the apk). The gallery test itself runs in ~5 seconds on iOS and ~50 seconds on Android. Android is slower due to iOS having a larger inserter, so there's no need to scroll the inserter to find the gallery block on iOS.

Gallery test has been around for quite some time now, and I think it should be stable enough. But I realized now that we had made some changes around scrolling in this PR, that could be affecting the gallery test's stability. So it could be better to leave the gallery test out for now and maybe add it back in, in a separate PR making sure again it's flawless 💯

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To be honest, I'm not interested in gallery block in this case 😄 But the gallery test checks some other aspects of the editor that are not covered by the initial HTML tests, mainly around the inserter menu, like opening the inserter menu, scrolling the inserter menu, and inserting a block.

I understand. This makes a lot of sense.

The primary time-consuming task is building the js bundle and the native code (the ipa and the apk). The gallery test itself runs in ~5 seconds on iOS and ~50 seconds on Android. Android is slower due to iOS having a larger inserter, so there's no need to scroll the inserter to find the gallery block on iOS
Gallery test has been around for quite some time now, and I think it should be stable enough. But I realized now that we had made some changes around scrolling in this PR, that could be affecting the gallery test's stability. So it could be better to leave the gallery test out for now and maybe add it back in, in a separate PR making sure again it's flawless 💯

Sounds like a good plan to me to re-add it after we have done some more tests! Thanks for expounding here @ceyhun

@jd-alexander
Copy link
Contributor Author

@jd-alexander I've reverted the commits deleting other workflows and also updated the gb-mobile PR with the gutenberg's current ref. If that's also green, I think we can go forward with both 🎉

Agreed. Thanks @ceyhun 😄 Once we have resolved the comment, we are good to go.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change) [Type] Automated Testing Testing infrastructure changes impacting the execution of end-to-end (E2E) and/or unit tests.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add a React Native E2E test to render the initial html content
3 participants