{"id":1922,"date":"2024-07-29T10:25:29","date_gmt":"2024-07-29T17:25:29","guid":{"rendered":"https:\/\/felix-arntz.me\/?p=1922"},"modified":"2025-02-11T08:11:08","modified_gmt":"2025-02-11T16:11:08","slug":"block-editor-e2e-test-cross-version-compatibility","status":"publish","type":"post","link":"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/","title":{"rendered":"An issue with block editor e2e test cross-version compatibility"},"content":{"rendered":"\n<p>While I was making minor updates to my <a href=\"https:\/\/wordpress.org\/plugins\/attachment-taxonomies\/\">Attachment Taxonomies plugin<\/a> (<a href=\"https:\/\/github.com\/felixarntz\/attachment-taxonomies\">GitHub repository<\/a>) the other day, I noticed that the e2e tests were failing when run against WordPress version 6.1. Since the plugin&#8217;s minimum requirement is that version, I still run tests against it, to make sure it keeps working as expected.<\/p>\n\n\n\n<p>After some investigation, I noticed the issue was happening due to the way the block editor used to work prior to WordPress 6.3, when it <a href=\"https:\/\/make.wordpress.org\/core\/2023\/07\/18\/miscellaneous-editor-changes-in-wordpress-6-3\/#post-editor-iframed\">started to be iframed by default<\/a>. So the failure most likely wasn&#8217;t happening due to an actual bug in the plugin, but due to an issue with the e2e tests.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">A note on the importance of e2e tests<\/h2>\n\n\n\n<p>Before I get to the solution, let me just quickly highlight the importance of e2e tests. If you&#8217;re a plugin author and you haven&#8217;t looked into writing e2e tests for your plugin(s) yet, I strongly encourage you to start doing so. For what it&#8217;s worth, I am not at all an expert in this, and the clunkiness of writing tests and flakiness of running them used to scare me away. But a while ago WordPress and Gutenberg changed to use <a href=\"https:\/\/playwright.dev\/\">Playwright<\/a> for e2e tests, and it&#8217;s a difference like night and day. So especially if your plugin has slightly complex UI interactions or if you integrate with the block editor, having e2e tests coverage and running them for different WordPress versions in CI (e.g. GitHub Actions) is going to be a game changer in avoiding surprises where a plugin release suddenly doesn&#8217;t work in one of those versions anymore.<\/p>\n\n\n\n<p>To get started, I recommend you take a look at some of <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/trunk\/test\/e2e\">Gutenberg&#8217;s e2e tests<\/a> and read the documentation of the useful <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/trunk\/packages\/e2e-test-utils-playwright\">@wordpress\/e2e-tests-playwright package<\/a>.<\/p>\n\n\n\n<p>Anyway, let&#8217;s go back to the problem I had run into.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Supporting the iframed and non-iframed block editor in e2e tests<\/h2>\n\n\n\n<p>When you look at Gutenberg&#8217;s e2e tests, you will notice that it&#8217;s typically using <code><a href=\"https:\/\/github.com\/WordPress\/gutenberg\/blob\/v18.8.0\/packages\/e2e-test-utils-playwright\/src\/editor\/index.ts#L48\">editor.canvas<\/a><\/code> to access the locator from which you can further locate specific block content. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">await<\/span> admin.createNewPost();\n\n<span class=\"hljs-comment\">\/\/ Insert a new image block and ensure it's added.<\/span>\n<span class=\"hljs-keyword\">await<\/span> editor.insertBlock( { <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">'core\/image'<\/span> } );\n<span class=\"hljs-keyword\">const<\/span> imageBlock = editor.canvas.locator( <span class=\"hljs-string\">'role=document&#91;name=\"Block: Image\"i]'<\/span> );\n<span class=\"hljs-keyword\">await<\/span> expect( imageBlock ).toBeVisible();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This test would already fail in WordPress versions below 6.3 because <code>editor.canvas<\/code> looks for the iframe with the block editor content &#8211; which is not present in those older versions (and sometimes not even in current versions, depending on which third-party blocks are used on the site).<\/p>\n\n\n\n<p>In order to adjust this test to work for the non-iframed editor, I could simply replace <code>editor.canvas<\/code> with <code>page<\/code>, so that it tries to find the new image block directly within the current page, rather than within the iframe. Like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">await<\/span> admin.createNewPost();\n\n<span class=\"hljs-comment\">\/\/ Insert a new image block and ensure it's added.<\/span>\n<span class=\"hljs-keyword\">await<\/span> editor.insertBlock( { <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">'core\/image'<\/span> } );\n<span class=\"hljs-keyword\">const<\/span> imageBlock = page.locator( <span class=\"hljs-string\">'role=document&#91;name=\"Block: Image\"i]'<\/span> );\n<span class=\"hljs-keyword\">await<\/span> expect( imageBlock ).toBeVisible();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The problem with that approach though is that then it no longer works with the iframed variant of the block editor. So I needed to find a way to conditionally use <code>editor.canvas<\/code> or <code>page<\/code>. After some searching the web, I found an <a href=\"https:\/\/playwrightsolutions.com\/is-it-possible-in-playwright-to-conditionally-click-an-element-depending-on-which-one-is-present\/\">article that had a nice and simple solution<\/a>: Use a promise with both locators, where whichever locator resolves first is then used. I took that approach and put it into a little helper function that I called <code>oneOfLocators()<\/code>. Here&#8217;s what that could look like for the previous code example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">waitForLocator<\/span>(<span class=\"hljs-params\"> locator <\/span>) <\/span>{\n\t<span class=\"hljs-keyword\">return<\/span> locator.waitFor().then( <span class=\"hljs-function\"><span class=\"hljs-params\">()<\/span> =&gt;<\/span> locator );\n};\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">oneOfLocators<\/span>(<span class=\"hljs-params\"> ...locators <\/span>) <\/span>{\n\t<span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">Promise<\/span>.race( locators.map( waitForLocator ) );\n}\n\n<span class=\"hljs-keyword\">await<\/span> admin.createNewPost();\n\n<span class=\"hljs-comment\">\/\/ Insert a new image block and ensure it's added.<\/span>\n<span class=\"hljs-keyword\">await<\/span> editor.insertBlock( { <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">'core\/image'<\/span> } );\n<span class=\"hljs-keyword\">const<\/span> imageBlock = <span class=\"hljs-keyword\">await<\/span> oneOfLocators(\n\teditor.canvas.locator( <span class=\"hljs-string\">'role=document&#91;name=\"Block: Image\"i]'<\/span> ),\n\tpage.locator( <span class=\"hljs-string\">'role=document&#91;name=\"Block: Image\"i]'<\/span> )\n);\n<span class=\"hljs-keyword\">await<\/span> expect( imageBlock ).toBeVisible();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>It worked like a charm! And my Attachment Taxonomies unit tests are now passing again across all supported WordPress versions.<\/p>\n\n\n\n<p>Maybe you have run into this problem, so maybe this is helpful to you. That said, I&#8217;m also curious if you have suggestions for an alternative solution? Potentially we could make the condition more specific, e.g. use <code>editor.canvas<\/code> on WordPress versions 6.3 or later while using <code>page<\/code> on WordPress versions older than 6.3. If you have ideas in that regard, please share them in the comments.<\/p>\n\n\n\n<p>Potentially we can even improve this upstream in the <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/trunk\/packages\/e2e-test-utils-playwright\">@wordpress\/e2e-tests-playwright package<\/a> where <code>editor.canvas<\/code> is defined. A new utility that conditionally returns the correct locator could be helpful.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>While I was making minor updates to my Attachment Taxonomies plugin (GitHub repository) the other day, I noticed that the e2e tests were failing when run against WordPress version 6.1. Since the plugin&#8217;s minimum requirement is that version, I still run tests against it, to make sure it keeps working as expected. After some investigation, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1924,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[95,97],"tags":[],"class_list":["post-1922","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-plugin-development","category-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>An issue with block editor e2e test cross-version compatibility - felix-arntz.me<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"An issue with block editor e2e test cross-version compatibility - felix-arntz.me\" \/>\n<meta property=\"og:description\" content=\"While I was making minor updates to my Attachment Taxonomies plugin (GitHub repository) the other day, I noticed that the e2e tests were failing when run against WordPress version 6.1. Since the plugin&#8217;s minimum requirement is that version, I still run tests against it, to make sure it keeps working as expected. After some investigation, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/\" \/>\n<meta property=\"og:site_name\" content=\"felix-arntz.me\" \/>\n<meta property=\"article:published_time\" content=\"2024-07-29T17:25:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-11T16:11:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/07\/e2e-block-editor-canvas-jpg.avif\" \/>\n\t<meta property=\"og:image:width\" content=\"2016\" \/>\n\t<meta property=\"og:image:height\" content=\"534\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Felix\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@felixarntz\" \/>\n<meta name=\"twitter:site\" content=\"@felixarntz\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Felix\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/\"},\"author\":{\"name\":\"Felix\",\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55\"},\"headline\":\"An issue with block editor e2e test cross-version compatibility\",\"datePublished\":\"2024-07-29T17:25:29+00:00\",\"dateModified\":\"2025-02-11T16:11:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/\"},\"wordCount\":656,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55\"},\"image\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/07\/e2e-block-editor-canvas-jpg.avif\",\"articleSection\":[\"Plugin Development\",\"WordPress\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/\",\"url\":\"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/\",\"name\":\"An issue with block editor e2e test cross-version compatibility - felix-arntz.me\",\"isPartOf\":{\"@id\":\"https:\/\/felix-arntz.me\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/07\/e2e-block-editor-canvas-jpg.avif\",\"datePublished\":\"2024-07-29T17:25:29+00:00\",\"dateModified\":\"2025-02-11T16:11:08+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/#primaryimage\",\"url\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/07\/e2e-block-editor-canvas-jpg.avif\",\"contentUrl\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/07\/e2e-block-editor-canvas-jpg.avif\",\"width\":2016,\"height\":534,\"caption\":\"e2e block editor canvas\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/felix-arntz.me\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Plugin Development\",\"item\":\"https:\/\/felix-arntz.me\/blog\/category\/plugin-development\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"An issue with block editor e2e test cross-version compatibility\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/felix-arntz.me\/#website\",\"url\":\"https:\/\/felix-arntz.me\/\",\"name\":\"felix-arntz.me\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/felix-arntz.me\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55\",\"name\":\"Felix\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2018\/09\/felix-arntz-site-icon.png\",\"contentUrl\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2018\/09\/felix-arntz-site-icon.png\",\"width\":512,\"height\":512,\"caption\":\"Felix\"},\"logo\":{\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/image\/\"},\"description\":\"Developer Programs Engineer at Google. WordPress Core Committer. Previously Yoast. Runner, musician, movie geek. Aprendiendo espa\u00f1ol. Fueled by Mountain Dew.\",\"sameAs\":[\"https:\/\/x.com\/felixarntz\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"An issue with block editor e2e test cross-version compatibility - felix-arntz.me","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/","og_locale":"en_US","og_type":"article","og_title":"An issue with block editor e2e test cross-version compatibility - felix-arntz.me","og_description":"While I was making minor updates to my Attachment Taxonomies plugin (GitHub repository) the other day, I noticed that the e2e tests were failing when run against WordPress version 6.1. Since the plugin&#8217;s minimum requirement is that version, I still run tests against it, to make sure it keeps working as expected. After some investigation, [&hellip;]","og_url":"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/","og_site_name":"felix-arntz.me","article_published_time":"2024-07-29T17:25:29+00:00","article_modified_time":"2025-02-11T16:11:08+00:00","og_image":[{"width":2016,"height":534,"url":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/07\/e2e-block-editor-canvas-jpg.avif","type":"image\/jpeg"}],"author":"Felix","twitter_card":"summary_large_image","twitter_creator":"@felixarntz","twitter_site":"@felixarntz","twitter_misc":{"Written by":"Felix","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/#article","isPartOf":{"@id":"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/"},"author":{"name":"Felix","@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55"},"headline":"An issue with block editor e2e test cross-version compatibility","datePublished":"2024-07-29T17:25:29+00:00","dateModified":"2025-02-11T16:11:08+00:00","mainEntityOfPage":{"@id":"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/"},"wordCount":656,"commentCount":0,"publisher":{"@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55"},"image":{"@id":"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/#primaryimage"},"thumbnailUrl":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/07\/e2e-block-editor-canvas-jpg.avif","articleSection":["Plugin Development","WordPress"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/","url":"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/","name":"An issue with block editor e2e test cross-version compatibility - felix-arntz.me","isPartOf":{"@id":"https:\/\/felix-arntz.me\/#website"},"primaryImageOfPage":{"@id":"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/#primaryimage"},"image":{"@id":"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/#primaryimage"},"thumbnailUrl":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/07\/e2e-block-editor-canvas-jpg.avif","datePublished":"2024-07-29T17:25:29+00:00","dateModified":"2025-02-11T16:11:08+00:00","breadcrumb":{"@id":"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/#primaryimage","url":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/07\/e2e-block-editor-canvas-jpg.avif","contentUrl":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/07\/e2e-block-editor-canvas-jpg.avif","width":2016,"height":534,"caption":"e2e block editor canvas"},{"@type":"BreadcrumbList","@id":"https:\/\/felix-arntz.me\/blog\/block-editor-e2e-test-cross-version-compatibility\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/felix-arntz.me\/"},{"@type":"ListItem","position":2,"name":"Plugin Development","item":"https:\/\/felix-arntz.me\/blog\/category\/plugin-development\/"},{"@type":"ListItem","position":3,"name":"An issue with block editor e2e test cross-version compatibility"}]},{"@type":"WebSite","@id":"https:\/\/felix-arntz.me\/#website","url":"https:\/\/felix-arntz.me\/","name":"felix-arntz.me","description":"","publisher":{"@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/felix-arntz.me\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55","name":"Felix","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/image\/","url":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2018\/09\/felix-arntz-site-icon.png","contentUrl":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2018\/09\/felix-arntz-site-icon.png","width":512,"height":512,"caption":"Felix"},"logo":{"@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/image\/"},"description":"Developer Programs Engineer at Google. WordPress Core Committer. Previously Yoast. Runner, musician, movie geek. Aprendiendo espa\u00f1ol. Fueled by Mountain Dew.","sameAs":["https:\/\/x.com\/felixarntz"]}]}},"jetpack_featured_media_url":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2024\/07\/e2e-block-editor-canvas-jpg.avif","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/posts\/1922","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/comments?post=1922"}],"version-history":[{"count":2,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/posts\/1922\/revisions"}],"predecessor-version":[{"id":1925,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/posts\/1922\/revisions\/1925"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/media\/1924"}],"wp:attachment":[{"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/media?parent=1922"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/categories?post=1922"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/tags?post=1922"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}