Skip to content

Conversation

@ThomThomson
Copy link
Contributor

@ThomThomson ThomThomson commented Apr 7, 2020

Summary

This PR changes the process for saving visualizations and lens visualizations when the user has been redirected there from another application.

How it works

The edit panel action and the visualize embeddable factory subscribe to currentAppId from the application service. When activated, they add a new param, embeddableOriginatingApp to the url which contains the current app id before redirecting to the edit url or getting explicit input. This allows for the below flow for dashboard panel adding & editing.

Screen Shot 2020-05-02 at 7 32 12 PM

Changes

The visualize and lens plugins read the embeddableOriginatingApp param and use it to help make the following changes.

Top Nav

If the originating application param exists, and the embeddable has been saved before:

  • A new, emphasized Save and return button is added, which saves the visualization / lens visualization without showing the save modal, and immediately redirects back to the originating app.

  • The save button is renamed Save as, and when clicked, it opens the new save modal with the options Save as new visualization, and Add to dashboard after saving checked by default.

Screen Shot 2020-05-02 at 7 52 16 PM

If the originating application param exists, and the embeddable has not been saved before:

  • The save button is emphasized and when clicked, it opens the new save modal with the option Add to dashboard after saving checked by default.

Screen Shot 2020-05-02 at 7 55 24 PM

If the originating application param does not exist:

  • The save button will be emphasized, but everything else will work the same as it did before this PR.

Save modal

A new option has been added to the save modal, which either reads Add to dashboard after saving or Return to dashboard after saving.

  • If the embeddable is newly created, or Save as new visualization is checked, the button will be in Add mode, and saving will add the new embeddable onto the end of the dashboard.

  • If the embeddable is not newly created, the button will be in Return mode, and saving will return to the originating app without adding anything

Screen Shot 2020-05-02 at 7 45 14 PM

Bonus

Because of the structure of this change, it also works correctly with canvas!
Note: when redirected from canvas, the save modal will hide Add to canvas after saving option when the save as new option is checked, because Canvas does not yet support adding an embeddable on redirect (Please correct me if I'm wrong!)

Screen Shot 2020-05-02 at 8 07 06 PM

Checklist

Delete any items that are not applicable to this PR.

For maintainers

@ThomThomson ThomThomson self-assigned this Apr 7, 2020
@botelastic botelastic bot added the Feature:Embedding Embedding content via iFrame label Apr 7, 2020
@ThomThomson ThomThomson linked an issue Apr 7, 2020 that may be closed by this pull request
@ThomThomson ThomThomson force-pushed the dashboard/visEditRedirect branch from 62ba757 to 4060495 Compare April 23, 2020 19:32
…of specific dashboard functionality. Changed save modal copy on save behavior
' argument. Changed the currentAppId observable into a behaviorSubject to make it easier to grab the current app Id from anywhere
@ThomThomson ThomThomson marked this pull request as ready for review May 3, 2020 20:28
@ThomThomson ThomThomson requested a review from a team May 3, 2020 20:28
@ThomThomson ThomThomson requested a review from a team as a code owner May 3, 2020 20:28
@ThomThomson ThomThomson added the Team:Visualizations Team label for Lens, elastic-charts, Graph, legacy editors (TSVB, Visualize, Timelion) t// label May 3, 2020
@elasticmachine
Copy link
Contributor

Pinging @elastic/kibana-app (Team:KibanaApp)

Copy link
Contributor

@ryankeairns ryankeairns left a comment

Choose a reason for hiding this comment

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

LGTM.

This is a really nice improvement and well executed. The 'Save as' dialog is a little challenging to sort through (mentally), but I was able to quickly figure out what each switch allowed me to do. In the end, it provides a lot of flexibility and does so within the confines of what had already existed.

Only one small thought that may/may not be worth changing. When in the 'Save as' dialog, should the button label be 'Save and return' when you have enabled the 'Add panel to Dashboard' switch? That would make it clearer that you about to navigate away from Visualize and would align with the other 'Save and return' button.

@elastic/kibana-canvas Check this out! If you create a new Visualization from Lens, then add it to your workpad (using the flyout), you can now use the 'Edit Lens' link from that new embedded element and (after editing) return to Canvas. Once Canvas adds the ability to 'Create new' visualization embeddable from Canvas, the circle will be complete. 😎

Copy link
Contributor

@wylieconlon wylieconlon left a comment

Choose a reason for hiding this comment

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

Overall LGTM. Tested in Chrome in the following scenarios in both the default space and a custom space:

  • Editing and saving Lens visualizations normally
  • Adding a Lens visualization to a dashboard.
  • Editing the previously saved visualization, using both "save as new" and not
  • Adding Lens to Canvas, and editing

let originitingAppParam = this.currentAppId;
// TODO: Remove this after https://github.com/elastic/kibana/pull/63443
if (originitingAppParam === 'kibana') {
originitingAppParam += `:${window.location.hash.split(/[\/\?]/)[1]}`;
Copy link
Contributor

Choose a reason for hiding this comment

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

Not a big fan of needing to know the exact positional order of the parameter in the URL: can you use one of the URL parsing libs we have, like query-string to convert this into a named argument?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This whole section will thankfully not be necessary after @flash1293 is finished #63443. in the meantime, some URL parsing is necessary to grab dashboard out of:
#/dashboard/722b74f0-b882-11e8-a6d9-e546fe2bba5f ....

as far as I can see , it's not exactly possible to get a named argument for it using query-string, because it isn't really a param. That said, something like this:

const urlSplit = window.location.href.split('/');
editUrl += urlSplit[urlSplit.indexOf('kibana#') + 1]

Can isolate 'dashboard' without the exact positional order, but I'm not sure if the change is worth it. Any thoughts?

@ThomThomson
Copy link
Contributor Author

Only one small thought that may/may not be worth changing. When in the 'Save as' dialog, should the button label be 'Save and return' when you have enabled the 'Add panel to Dashboard' switch? That would make it clearer that you about to navigate away from Visualize and would align with the other 'Save and return' button.

Great idea, got it in there!
Screen Shot 2020-05-04 at 3 30 28 PM

) {}
) {
if (this.application?.currentAppId$) {
this.application.currentAppId$.subscribe(
Copy link
Contributor

Choose a reason for hiding this comment

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

I think we have to somehow unsubscribe here, otherwise will get a memory leak
maybe we could just .pipe(first()) to make sure it unsubscribed itself (if that is sufficient)
same here: https://github.com/elastic/kibana/pull/62865/files#diff-85e9be7a6b60df87e48500d65f596d1aR101

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Oh, good eye. The subscription in edit_panel_action I've cleaned up by using a pipe as suggested.

The subscription in visualize_embeddable_factory is a little different, as it needs to update correctly when the app id changes. To unsubscribe that, I have a method in the factory called unsubscribeSubscriptions. The plugin keeps a reference to the factory, then calls that method in its stop method. This was the best way I could think of to clean up that subscription.

Copy link
Contributor

@streamich streamich May 5, 2020

Choose a reason for hiding this comment

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

The this.application.currentAppId$ is actually a BehaviorSubject it always has a value and it can be accessed synchronously.

My guess is that you should be able to do

let originatingAppParam = getObservableCurrentValue(this.params.start().core.application.currentAppId$);

where

const getObservableCurrentValue = (obs$) => {
  let value;
  obs$.pipe(take(1)).subscribe(anotherValue => value = anotherValue);
  return value;
};

🤞

@mattkime
Copy link
Contributor

mattkime commented May 5, 2020

I'm wondering if this new functionality needs to be expressed via query params or if the same result could be achieved via functions exposed through plugin contracts. I don't see a reason from a browser perspective why it must be this way but we might be limited based on our existing toolset for navigating between apps.

Anyway, I know its a disruptive thought that probably shouldn't alter the progress of this PR but I think its a question worth asking.

@AlonaNadler
Copy link

AlonaNadler commented May 5, 2020

Hey I played with the pr.
It works really awesome, such an improvement! instead of editing, going back to the dashboard, app, and refreshing the page. just save and return this is so clean and elegant.
I think the save as is better now. It's still a bit odd that it's added to the dashboard, mainly since if users don't scroll down they might not realize it was added. But overall big improvement 👏
We can improve the save as in the future when we will have save to a library if we see its cause confusion

Copy link
Contributor

@streamich streamich left a comment

Choose a reason for hiding this comment

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

Added few suggestions, but other than that AppArch code changes LGTM.

Comment on lines +46 to +48
this.application.currentAppId$
.pipe(take(1))
.subscribe((appId: string | undefined) => (this.currentAppId = appId));
Copy link
Contributor

Choose a reason for hiding this comment

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

I've created a discuss issue to improve this syntax: #65224

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is a great issue to bring up. I did switch currentAppId$ to a behaviorSubject at some point in this PR, but most tests aren't set up to ignore the first value and were failing, so I figured it would be better to do it in a separate PR.

public async create() {
// TODO: This is a bit of a hack to preserve the original functionality. Ideally we will clean this up
// to allow for in place creation of visualizations without having to navigate away to a new URL.
let originatingAppParam = this.currentAppId;
Copy link
Contributor

@streamich streamich May 5, 2020

Choose a reason for hiding this comment

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

Instead of subscribing in constructor and having .unsubscribeSubscriptions() method, could this line be something like

Suggested change
let originatingAppParam = this.currentAppId;
let originatingAppParam = await this.getCurrentAppId();

Maybe it could even be synchronous

Suggested change
let originatingAppParam = this.currentAppId;
let originatingAppParam = getObservableValue(this.params.start().core.application.currentAppId$);

Copy link
Contributor

Choose a reason for hiding this comment

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

Or may be inlining the pipe trick

let originatingAppParam;
core.application.currentAppId$
  .pipe(take(1))
  .subscribe(appId => originatingAppParam = appId);

Copy link
Contributor

Choose a reason for hiding this comment

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

I like @streamich 's suggestion here for using await instead of a subscription ☝️

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Implemented this suggestion!

embeddable.registerEmbeddableFactory(VISUALIZE_EMBEDDABLE_TYPE, embeddableFactory);
this.embeddableFactory = new VisualizeEmbeddableFactory(
{ start },
async () => (await core.getStartServices())[0].application
Copy link
Contributor

Choose a reason for hiding this comment

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

You should already have Application service in that start variable above.

start().core.application
Suggested change
async () => (await core.getStartServices())[0].application

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Implemented this suggestion. It's a lot cleaner now, thanks @streamich !

Copy link
Contributor

@majagrubic majagrubic left a comment

Choose a reason for hiding this comment

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

I tested this in Chrome 80 on Mac OS for following scenarios:

  • editing existing Lens visualization
  • editing existing regular visualization
  • editing maps
  • adding a new Lens visualization
  • adding a new TSVB visualization
  • all of the above but with session storage turned on

All work as expected.

Code looks good. I'd just apply that one suggestion from @streamich as mentioned above.

Just one UX comment:
I find the "Add to Dashboard" switch in the "Save Visualization" modal confusing - if the user had come from a dashboard, why would the user opt NOT to save edited visualization to the dashboard? And assuming this flow will go away by 7.9, it's even more confusing we're introducing this for just one minor? cc @AlonaNadler @ryankeairns

…ing create instead of managing a subscription
@stacey-gammon
Copy link

Great work @ThomThomson! Really awesome to see this, great tests too 👍 . I think you are aware of this and mention it, but the "edit" flow for canvas redirects back to landing page, not the workpad. Still less clicks to get back to where you were, anyway.

🍾

@ThomThomson
Copy link
Contributor Author

@elasticmachine merge upstream

@kibanamachine
Copy link
Contributor

💛 Build succeeded, but was flaky


Test Failures

Kibana Pipeline / kibana-xpack-agent / Chrome X-Pack UI Functional Tests.x-pack/test/functional/apps/canvas/custom_elements·ts.Canvas app custom elements deletes custom element when prompted

Link to Jenkins

Standard Out

Failed Tests Reporter:
  - Test has failed 15 times on tracked branches: https://github.com/elastic/kibana/issues/63004

[00:00:00]       │
[00:01:23]         └-: Canvas app
[00:01:23]           └-> "before all" hook
[00:02:17]           └-: custom elements
[00:02:17]             └-> "before all" hook
[00:02:17]             └-> "before all" hook
[00:02:17]               │ info [logstash_functional] Loading "mappings.json"
[00:02:17]               │ info [logstash_functional] Loading "data.json.gz"
[00:02:17]               │ info [logstash_functional] Skipped restore for existing index "logstash-2015.09.22"
[00:02:17]               │ info [logstash_functional] Skipped restore for existing index "logstash-2015.09.20"
[00:02:17]               │ info [logstash_functional] Skipped restore for existing index "logstash-2015.09.21"
[00:02:18]               │ info [canvas/default] Loading "mappings.json"
[00:02:18]               │ info [canvas/default] Loading "data.json.gz"
[00:02:18]               │ info [o.e.c.m.MetadataDeleteIndexService] [kibana-ci-immutable-ubuntu-18-tests-xl-1588706002329015761] [.kibana_1/qWeqplY8TqeDPjRawclQSA] deleting index
[00:02:18]               │ info [o.e.c.m.MetadataDeleteIndexService] [kibana-ci-immutable-ubuntu-18-tests-xl-1588706002329015761] [.kibana_2/-yQj7lvGRkOMrO6B3bh5AA] deleting index
[00:02:18]               │ info [canvas/default] Deleted existing index [".kibana_2",".kibana_1"]
[00:02:18]               │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-ubuntu-18-tests-xl-1588706002329015761] applying create index request using v1 templates []
[00:02:18]               │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-ubuntu-18-tests-xl-1588706002329015761] [.kibana_1] creating index, cause [api], templates [], shards [1]/[1], mappings [_doc]
[00:02:18]               │ info [canvas/default] Created index ".kibana_1"
[00:02:18]               │ debg [canvas/default] ".kibana_1" settings {"index":{"number_of_replicas":"1","number_of_shards":"1"}}
[00:02:18]               │ info [canvas/default] Indexed 3 docs into ".kibana_1"
[00:02:18]               │ info [o.e.c.m.MetadataMappingService] [kibana-ci-immutable-ubuntu-18-tests-xl-1588706002329015761] [.kibana_1/oWgnB2zIS7avkax912tx8Q] update_mapping [_doc]
[00:02:18]               │ debg Migrating saved objects
[00:02:19]               │ proc [kibana]   log   [19:53:07.946] [info][savedobjects-service] Creating index .kibana_2.
[00:02:19]               │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-ubuntu-18-tests-xl-1588706002329015761] applying create index request using v1 templates []
[00:02:19]               │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-ubuntu-18-tests-xl-1588706002329015761] [.kibana_2] creating index, cause [api], templates [], shards [1]/[1], mappings [_doc]
[00:02:19]               │ info [o.e.c.r.a.AllocationService] [kibana-ci-immutable-ubuntu-18-tests-xl-1588706002329015761] updating number_of_replicas to [0] for indices [.kibana_2]
[00:02:20]               │ proc [kibana]   log   [19:53:08.058] [info][savedobjects-service] Migrating .kibana_1 saved objects to .kibana_2
[00:02:20]               │ info [o.e.c.m.MetadataMappingService] [kibana-ci-immutable-ubuntu-18-tests-xl-1588706002329015761] [.kibana_2/DnIdhCbeQeiCMvHKSuu_IA] update_mapping [_doc]
[00:02:20]               │ info [o.e.c.m.MetadataMappingService] [kibana-ci-immutable-ubuntu-18-tests-xl-1588706002329015761] [.kibana_2/DnIdhCbeQeiCMvHKSuu_IA] update_mapping [_doc]
[00:02:20]               │ proc [kibana]   log   [19:53:08.192] [info][savedobjects-service] Pointing alias .kibana to .kibana_2.
[00:02:20]               │ proc [kibana]   log   [19:53:08.259] [info][savedobjects-service] Finished in 316ms.
[00:02:20]               │ debg navigating to canvas url: http://localhost:6131/app/canvas#/
[00:02:20]               │ debg navigate to: http://localhost:6131/app/canvas#/
[00:02:20]               │ debg browser[INFO] http://localhost:6131/app/canvas?_t=1588708388267#/ 341 Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'unsafe-eval' 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-P5polb1UreUSOe5V/Pv7tc+yeZuJXiOi/3fqhGsU7BE='), or a nonce ('nonce-...') is required to enable inline execution.
[00:02:20]               │
[00:02:20]               │ debg browser[INFO] http://localhost:6131/bundles/app/core/bootstrap.js 10:19 "^ A single error about an inline script not firing due to content security policy is expected!"
[00:02:20]               │ debg ... sleep(700) start
[00:02:21]               │ debg ... sleep(700) end
[00:02:21]               │ debg returned from get, calling refresh
[00:02:23]               │ debg browser[INFO] http://localhost:6131/32923/bundles/kbn-ui-shared-deps/kbn-ui-shared-deps.js 380:106115 "INFO: 2020-05-05T19:53:10Z
[00:02:23]               │        Adding connection to http://localhost:6131/elasticsearch
[00:02:23]               │
[00:02:23]               │      "
[00:02:23]               │ERROR browser[SEVERE] http://localhost:6131/32923/bundles/core/core.entry.js 32:89553 TypeError: Failed to fetch
[00:02:23]               │          at Fetch._callee3$ (http://localhost:6131/32923/bundles/core/core.entry.js:33:131511)
[00:02:23]               │          at l (http://localhost:6131/32923/bundles/kbn-ui-shared-deps/kbn-ui-shared-deps.js:288:969136)
[00:02:23]               │          at Generator._invoke (http://localhost:6131/32923/bundles/kbn-ui-shared-deps/kbn-ui-shared-deps.js:288:968889)
[00:02:23]               │          at Generator.forEach.e.<computed> [as throw] (http://localhost:6131/32923/bundles/kbn-ui-shared-deps/kbn-ui-shared-deps.js:288:969493)
[00:02:23]               │          at asyncGeneratorStep (http://localhost:6131/32923/bundles/core/core.entry.js:33:126008)
[00:02:23]               │          at _throw (http://localhost:6131/32923/bundles/core/core.entry.js:33:126405)
[00:02:23]               │ debg browser[INFO] http://localhost:6131/app/canvas?_t=1588708388267#/ 341 Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'unsafe-eval' 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-P5polb1UreUSOe5V/Pv7tc+yeZuJXiOi/3fqhGsU7BE='), or a nonce ('nonce-...') is required to enable inline execution.
[00:02:23]               │
[00:02:23]               │ debg browser[INFO] http://localhost:6131/bundles/app/core/bootstrap.js 10:19 "^ A single error about an inline script not firing due to content security policy is expected!"
[00:02:23]               │ debg currentUrl = http://localhost:6131/app/canvas#/
[00:02:23]               │          appUrl = http://localhost:6131/app/canvas#/
[00:02:23]               │ debg TestSubjects.find(kibanaChrome)
[00:02:23]               │ debg Find.findByCssSelector('[data-test-subj="kibanaChrome"]') with timeout=60000
[00:02:24]               │ debg browser[INFO] http://localhost:6131/32923/bundles/kbn-ui-shared-deps/kbn-ui-shared-deps.js 380:106115 "INFO: 2020-05-05T19:53:11Z
[00:02:24]               │        Adding connection to http://localhost:6131/elasticsearch
[00:02:24]               │
[00:02:24]               │      "
[00:02:24]               │ debg ... sleep(501) start
[00:02:24]               │ debg ... sleep(501) end
[00:02:24]               │ debg in navigateTo url = http://localhost:6131/app/canvas#/
[00:02:24]               │ debg TestSubjects.exists(statusPageContainer)
[00:02:24]               │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="statusPageContainer"]') with timeout=2500
[00:02:27]               │ debg --- retry.tryForTime error: [data-test-subj="statusPageContainer"] is not displayed
[00:02:27]               │ debg navigating to canvas url: http://localhost:6131/app/canvas#/workpad/workpad-1705f884-6224-47de-ba49-ca224fe6ec31/page/1
[00:02:27]               │ debg navigate to: http://localhost:6131/app/canvas#/workpad/workpad-1705f884-6224-47de-ba49-ca224fe6ec31/page/1
[00:02:28]               │ debg browser[INFO] http://localhost:6131/app/canvas?_t=1588708396003#/workpad/workpad-1705f884-6224-47de-ba49-ca224fe6ec31/page/1 341 Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'unsafe-eval' 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-P5polb1UreUSOe5V/Pv7tc+yeZuJXiOi/3fqhGsU7BE='), or a nonce ('nonce-...') is required to enable inline execution.
[00:02:28]               │
[00:02:28]               │ debg browser[INFO] http://localhost:6131/bundles/app/core/bootstrap.js 10:19 "^ A single error about an inline script not firing due to content security policy is expected!"
[00:02:28]               │ debg ... sleep(700) start
[00:02:28]               │ debg ... sleep(700) end
[00:02:28]               │ debg returned from get, calling refresh
[00:02:30]               │ debg browser[INFO] http://localhost:6131/app/canvas?_t=1588708396003#/workpad/workpad-1705f884-6224-47de-ba49-ca224fe6ec31/page/1 341 Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'unsafe-eval' 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-P5polb1UreUSOe5V/Pv7tc+yeZuJXiOi/3fqhGsU7BE='), or a nonce ('nonce-...') is required to enable inline execution.
[00:02:30]               │
[00:02:30]               │ debg browser[INFO] http://localhost:6131/bundles/app/core/bootstrap.js 10:19 "^ A single error about an inline script not firing due to content security policy is expected!"
[00:02:30]               │ debg currentUrl = http://localhost:6131/app/canvas#/workpad/workpad-1705f884-6224-47de-ba49-ca224fe6ec31/page/1
[00:02:30]               │          appUrl = http://localhost:6131/app/canvas#/workpad/workpad-1705f884-6224-47de-ba49-ca224fe6ec31/page/1
[00:02:30]               │ debg TestSubjects.find(kibanaChrome)
[00:02:30]               │ debg Find.findByCssSelector('[data-test-subj="kibanaChrome"]') with timeout=60000
[00:02:31]               │ debg browser[INFO] http://localhost:6131/32923/bundles/kbn-ui-shared-deps/kbn-ui-shared-deps.js 380:106115 "INFO: 2020-05-05T19:53:19Z
[00:02:31]               │        Adding connection to http://localhost:6131/elasticsearch
[00:02:31]               │
[00:02:31]               │      "
[00:02:31]               │ debg ... sleep(501) start
[00:02:32]               │ debg ... sleep(501) end
[00:02:32]               │ debg in navigateTo url = http://localhost:6131/app/canvas#/workpad/workpad-1705f884-6224-47de-ba49-ca224fe6ec31/page/1
[00:02:32]               │ debg TestSubjects.exists(statusPageContainer)
[00:02:32]               │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="statusPageContainer"]') with timeout=2500
[00:02:35]               │ debg --- retry.tryForTime error: [data-test-subj="statusPageContainer"] is not displayed
[00:02:35]             └-> creates a custom element from an element when prompted
[00:02:35]               └-> "before each" hook: global before each
[00:02:35]               │ debg TestSubjects.click(canvasWorkpadPage > canvasWorkpadPageElementContent)
[00:02:35]               │ debg Find.clickByCssSelector('[data-test-subj="canvasWorkpadPage"] [data-test-subj="canvasWorkpadPageElementContent"]') with timeout=20000
[00:02:35]               │ debg Find.findByCssSelector('[data-test-subj="canvasWorkpadPage"] [data-test-subj="canvasWorkpadPageElementContent"]') with timeout=20000
[00:02:35]               │ debg TestSubjects.click(canvasWorkpadEditMenuButton)
[00:02:35]               │ debg Find.clickByCssSelector('[data-test-subj="canvasWorkpadEditMenuButton"]') with timeout=20000
[00:02:35]               │ debg Find.findByCssSelector('[data-test-subj="canvasWorkpadEditMenuButton"]') with timeout=20000
[00:02:36]               │ debg TestSubjects.click(canvasWorkpadEditMenu__saveElementButton)
[00:02:36]               │ debg Find.clickByCssSelector('[data-test-subj="canvasWorkpadEditMenu__saveElementButton"]') with timeout=20000
[00:02:36]               │ debg Find.findByCssSelector('[data-test-subj="canvasWorkpadEditMenu__saveElementButton"]') with timeout=20000
[00:02:36]               │ debg TestSubjects.setValue(canvasCustomElementForm-name, My New Element)
[00:02:36]               │ debg TestSubjects.click(canvasCustomElementForm-name)
[00:02:36]               │ debg Find.clickByCssSelector('[data-test-subj="canvasCustomElementForm-name"]') with timeout=10000
[00:02:36]               │ debg Find.findByCssSelector('[data-test-subj="canvasCustomElementForm-name"]') with timeout=10000
[00:02:36]               │ debg TestSubjects.setValue(canvasCustomElementForm-description, An excellent new element)
[00:02:36]               │ debg TestSubjects.click(canvasCustomElementForm-description)
[00:02:36]               │ debg Find.clickByCssSelector('[data-test-subj="canvasCustomElementForm-description"]') with timeout=10000
[00:02:36]               │ debg Find.findByCssSelector('[data-test-subj="canvasCustomElementForm-description"]') with timeout=10000
[00:02:37]               │ debg TestSubjects.click(canvasCustomElementForm-submit)
[00:02:37]               │ debg Find.clickByCssSelector('[data-test-subj="canvasCustomElementForm-submit"]') with timeout=10000
[00:02:37]               │ debg Find.findByCssSelector('[data-test-subj="canvasCustomElementForm-submit"]') with timeout=10000
[00:02:37]               │ debg TestSubjects.exists(canvasCustomElementCreate-success)
[00:02:37]               │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="canvasCustomElementCreate-success"]') with timeout=30000
[00:02:38]               └- ✓ pass  (2.5s) "Canvas app custom elements creates a custom element from an element when prompted"
[00:02:38]             └-> adds the custom element to the workpad when prompted
[00:02:38]               └-> "before each" hook: global before each
[00:02:38]               │ debg TestSubjects.click(add-element-button)
[00:02:38]               │ debg Find.clickByCssSelector('[data-test-subj="add-element-button"]') with timeout=10000
[00:02:38]               │ debg Find.findByCssSelector('[data-test-subj="add-element-button"]') with timeout=10000
[00:02:38]               │ debg TestSubjects.click(saved-elements-menu-option)
[00:02:38]               │ debg Find.clickByCssSelector('[data-test-subj="saved-elements-menu-option"]') with timeout=10000
[00:02:38]               │ debg Find.findByCssSelector('[data-test-subj="saved-elements-menu-option"]') with timeout=10000
[00:02:38]               │ debg Find.findByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:38]               │ debg TestSubjects.findAll(canvasWorkpadPage > canvasWorkpadPageElementContent)
[00:02:38]               │ debg Find.allByCssSelector('[data-test-subj="canvasWorkpadPage"] [data-test-subj="canvasWorkpadPageElementContent"]') with timeout=10000
[00:02:39]               │ debg --- retry.try error: expected [ { _webElement: { driver_: [Object], id_: {} },
[00:02:39]               │          locator: null,
[00:02:39]               │          webDriver: 
[00:02:39]               │           { driver: [Object],
[00:02:39]               │             By: 
[00:02:39]               │              [Function: name(name) {
[00:02:39]               │                  return By.css('*[name="' + escapeCss(name) + '"]');
[00:02:39]               │                }],
[00:02:39]               │             until: [Object],
[00:02:39]               │             browserType: 'chrome',
[00:02:39]               │             'consoleLog$': [Object] },
[00:02:39]               │          timeout: 10000,
[00:02:39]               │          fixedHeaderHeight: 50,
[00:02:39]               │          logger: 
[00:02:39]               │           { identWidth: 14,
[00:02:39]               │             writers: [Object],
[00:02:39]               │             'written$': [Object] },
[00:02:39]               │          browserType: 'chrome',
[00:02:39]               │          By: 
[00:02:39]               │           [Function: name(name) {
[00:02:39]               │               return By.css('*[name="' + escapeCss(name) + '"]');
[00:02:39]               │             }],
[00:02:39]               │          driver: 
[00:02:39]               │           { session_: {},
[00:02:39]               │             executor_: [Object],
[00:02:39]               │             fileDetector_: null,
[00:02:39]               │             onQuit_: [Function: onQuit] },
[00:02:39]               │          Keys: 
[00:02:39]               │           { NULL: '',
[00:02:39]               │             CANCEL: '',
[00:02:39]               │             HELP: '',
[00:02:39]               │             BACK_SPACE: '',
[00:02:39]               │             TAB: '',
[00:02:39]               │             CLEAR: '',
[00:02:39]               │             RETURN: '',
[00:02:39]               │             ENTER: '',
[00:02:39]               │             SHIFT: '',
[00:02:39]               │             CONTROL: '',
[00:02:39]               │             ALT: '',
[00:02:39]               │             PAUSE: '',
[00:02:39]               │             ESCAPE: '',
[00:02:39]               │             SPACE: '',
[00:02:39]               │             PAGE_UP: '',
[00:02:39]               │             PAGE_DOWN: '',
[00:02:39]               │             END: '',
[00:02:39]               │             HOME: '',
[00:02:39]               │             ARROW_LEFT: '',
[00:02:39]               │             LEFT: '',
[00:02:39]               │             ARROW_UP: '',
[00:02:39]               │             UP: '',
[00:02:39]               │             ARROW_RIGHT: '',
[00:02:39]               │             RIGHT: '',
[00:02:39]               │             ARROW_DOWN: '',
[00:02:39]               │             DOWN: '',
[00:02:39]               │             INSERT: '',
[00:02:39]               │             DELETE: '',
[00:02:39]               │             SEMICOLON: '',
[00:02:39]               │             EQUALS: '',
[00:02:39]               │             NUMPAD0: '',
[00:02:39]               │             NUMPAD1: '',
[00:02:39]               │             NUMPAD2: '',
[00:02:39]               │             NUMPAD3: '',
[00:02:39]               │             NUMPAD4: '',
[00:02:39]               │             NUMPAD5: '',
[00:02:39]               │             NUMPAD6: '',
[00:02:39]               │             NUMPAD7: '',
[00:02:39]               │             NUMPAD8: '',
[00:02:39]               │             NUMPAD9: '',
[00:02:39]               │             MULTIPLY: '',
[00:02:39]               │             ADD: '',
[00:02:39]               │             SEPARATOR: '',
[00:02:39]               │             SUBTRACT: '',
[00:02:39]               │             DECIMAL: '',
[00:02:39]               │             DIVIDE: '',
[00:02:39]               │             F1: '',
[00:02:39]               │             F2: '',
[00:02:39]               │             F3: '',
[00:02:39]               │             F4: '',
[00:02:39]               │             F5: '',
[00:02:39]               │             F6: '',
[00:02:39]               │             F7: '',
[00:02:39]               │             F8: '',
[00:02:39]               │             F9: '',
[00:02:39]               │             F10: '',
[00:02:39]               │             F11: '',
[00:02:39]               │             F12: '',
[00:02:39]               │             COMMAND: '',
[00:02:39]               │             META: '',
[00:02:39]               │             ZENKAKU_HANKAKU: '',
[00:02:39]               │             chord: [Function] },
[00:02:39]               │          isW3CEnabled: true,
[00:02:39]               │          isChromium: true },
[00:02:39]               │        { _webElement: { driver_: [Object], id_: {} },
[00:02:39]               │          locator: null,
[00:02:39]               │          webDriver: 
[00:02:39]               │           { driver: [Object],
[00:02:39]               │             By: 
[00:02:39]               │              [Function: name(name) {
[00:02:39]               │                  return By.css('*[name="' + escapeCss(name) + '"]');
[00:02:39]               │                }],
[00:02:39]               │             until: [Object],
[00:02:39]               │             browserType: 'chrome',
[00:02:39]               │             'consoleLog$': [Object] },
[00:02:39]               │          timeout: 10000,
[00:02:39]               │          fixedHeaderHeight: 50,
[00:02:39]               │          logger: 
[00:02:39]               │           { identWidth: 14,
[00:02:39]               │             writers: [Object],
[00:02:39]               │             'written$': [Object] },
[00:02:39]               │          browserType: 'chrome',
[00:02:39]               │          By: 
[00:02:39]               │           [Function: name(name) {
[00:02:39]               │               return By.css('*[name="' + escapeCss(name) + '"]');
[00:02:39]               │             }],
[00:02:39]               │          driver: 
[00:02:39]               │           { session_: {},
[00:02:39]               │             executor_: [Object],
[00:02:39]               │             fileDetector_: null,
[00:02:39]               │             onQuit_: [Function: onQuit] },
[00:02:39]               │          Keys: 
[00:02:39]               │           { NULL: '',
[00:02:39]               │             CANCEL: '',
[00:02:39]               │             HELP: '',
[00:02:39]               │             BACK_SPACE: '',
[00:02:39]               │             TAB: '',
[00:02:39]               │             CLEAR: '',
[00:02:39]               │             RETURN: '',
[00:02:39]               │             ENTER: '',
[00:02:39]               │             SHIFT: '',
[00:02:39]               │             CONTROL: '',
[00:02:39]               │             ALT: '',
[00:02:39]               │             PAUSE: '',
[00:02:39]               │             ESCAPE: '',
[00:02:39]               │             SPACE: '',
[00:02:39]               │             PAGE_UP: '',
[00:02:39]               │             PAGE_DOWN: '',
[00:02:39]               │             END: '',
[00:02:39]               │             HOME: '',
[00:02:39]               │             ARROW_LEFT: '',
[00:02:39]               │             LEFT: '',
[00:02:39]               │             ARROW_UP: '',
[00:02:39]               │             UP: '',
[00:02:39]               │             ARROW_RIGHT: '',
[00:02:39]               │             RIGHT: '',
[00:02:39]               │             ARROW_DOWN: '',
[00:02:39]               │             DOWN: '',
[00:02:39]               │             INSERT: '',
[00:02:39]               │             DELETE: '',
[00:02:39]               │             SEMICOLON: '',
[00:02:39]               │             EQUALS: '',
[00:02:39]               │             NUMPAD0: '',
[00:02:39]               │             NUMPAD1: '',
[00:02:39]               │             NUMPAD2: '',
[00:02:39]               │             NUMPAD3: '',
[00:02:39]               │             NUMPAD4: '',
[00:02:39]               │             NUMPAD5: '',
[00:02:39]               │             NUMPAD6: '',
[00:02:39]               │             NUMPAD7: '',
[00:02:39]               │             NUMPAD8: '',
[00:02:39]               │             NUMPAD9: '',
[00:02:39]               │             MULTIPLY: '',
[00:02:39]               │             ADD: '',
[00:02:39]               │             SEPARATOR: '',
[00:02:39]               │             SUBTRACT: '',
[00:02:39]               │             DECIMAL: '',
[00:02:39]               │             DIVIDE: '',
[00:02:39]               │             F1: '',
[00:02:39]               │             F2: '',
[00:02:39]               │             F3: '',
[00:02:39]               │             F4: '',
[00:02:39]               │             F5: '',
[00:02:39]               │             F6: '',
[00:02:39]               │             F7: '',
[00:02:39]               │             F8: '',
[00:02:39]               │             F9: '',
[00:02:39]               │             F10: '',
[00:02:39]               │             F11: '',
[00:02:39]               │             F12: '',
[00:02:39]               │             COMMAND: '',
[00:02:39]               │             META: '',
[00:02:39]               │             ZENKAKU_HANKAKU: '',
[00:02:39]               │             chord: [Function] },
[00:02:39]               │          isW3CEnabled: true,
[00:02:39]               │          isChromium: true },
[00:02:39]               │        { _webElement: { driver_: [Object], id_: {} },
[00:02:39]               │          locator: null,
[00:02:39]               │          webDriver: 
[00:02:39]               │           { driver: [Object],
[00:02:39]               │             By: 
[00:02:39]               │              [Function: name(name) {
[00:02:39]               │                  return By.css('*[name="' + escapeCss(name) + '"]');
[00:02:39]               │                }],
[00:02:39]               │             until: [Object],
[00:02:39]               │             browserType: 'chrome',
[00:02:39]               │             'consoleLog$': [Object] },
[00:02:39]               │          timeout: 10000,
[00:02:39]               │          fixedHeaderHeight: 50,
[00:02:39]               │          logger: 
[00:02:39]               │           { identWidth: 14,
[00:02:39]               │             writers: [Object],
[00:02:39]               │             'written$': [Object] },
[00:02:39]               │          browserType: 'chrome',
[00:02:39]               │          By: 
[00:02:39]               │           [Function: name(name) {
[00:02:39]               │               return By.css('*[name="' + escapeCss(name) + '"]');
[00:02:39]               │             }],
[00:02:39]               │          driver: 
[00:02:39]               │           { session_: {},
[00:02:39]               │             executor_: [Object],
[00:02:39]               │             fileDetector_: null,
[00:02:39]               │             onQuit_: [Function: onQuit] },
[00:02:39]               │          Keys: 
[00:02:39]               │           { NULL: '',
[00:02:39]               │             CANCEL: '',
[00:02:39]               │             HELP: '',
[00:02:39]               │             BACK_SPACE: '',
[00:02:39]               │             TAB: '',
[00:02:39]               │             CLEAR: '',
[00:02:39]               │             RETURN: '',
[00:02:39]               │             ENTER: '',
[00:02:39]               │             SHIFT: '',
[00:02:39]               │             CONTROL: '',
[00:02:39]               │             ALT: '',
[00:02:39]               │             PAUSE: '',
[00:02:39]               │             ESCAPE: '',
[00:02:39]               │             SPACE: '',
[00:02:39]               │             PAGE_UP: '',
[00:02:39]               │             PAGE_DOWN: '',
[00:02:39]               │             END: '',
[00:02:39]               │             HOME: '',
[00:02:39]               │             ARROW_LEFT: '',
[00:02:39]               │             LEFT: '',
[00:02:39]               │             ARROW_UP: '',
[00:02:39]               │             UP: '',
[00:02:39]               │             ARROW_RIGHT: '',
[00:02:39]               │             RIGHT: '',
[00:02:39]               │             ARROW_DOWN: '',
[00:02:39]               │             DOWN: '',
[00:02:39]               │             INSERT: '',
[00:02:39]               │             DELETE: '',
[00:02:39]               │             SEMICOLON: '',
[00:02:39]               │             EQUALS: '',
[00:02:39]               │             NUMPAD0: '',
[00:02:39]               │             NUMPAD1: '',
[00:02:39]               │             NUMPAD2: '',
[00:02:39]               │             NUMPAD3: '',
[00:02:39]               │             NUMPAD4: '',
[00:02:39]               │             NUMPAD5: '',
[00:02:39]               │             NUMPAD6: '',
[00:02:39]               │             NUMPAD7: '',
[00:02:39]               │             NUMPAD8: '',
[00:02:39]               │             NUMPAD9: '',
[00:02:39]               │             MULTIPLY: '',
[00:02:39]               │             ADD: '',
[00:02:39]               │             SEPARATOR: '',
[00:02:39]               │             SUBTRACT: '',
[00:02:39]               │             DECIMAL: '',
[00:02:39]               │             DIVIDE: '',
[00:02:39]               │             F1: '',
[00:02:39]               │             F2: '',
[00:02:39]               │             F3: '',
[00:02:39]               │             F4: '',
[00:02:39]               │             F5: '',
[00:02:39]               │             F6: '',
[00:02:39]               │             F7: '',
[00:02:39]               │             F8: '',
[00:02:39]               │             F9: '',
[00:02:39]               │             F10: '',
[00:02:39]               │             F11: '',
[00:02:39]               │             F12: '',
[00:02:39]               │             COMMAND: '',
[00:02:39]               │             META: '',
[00:02:39]               │             ZENKAKU_HANKAKU: '',
[00:02:39]               │             chord: [Function] },
[00:02:39]               │          isW3CEnabled: true,
[00:02:39]               │          isChromium: true },
[00:02:39]               │        { _webElement: { driver_: [Object], id_: {} },
[00:02:39]               │          locator: null,
[00:02:39]               │          webDriver: 
[00:02:39]               │           { driver: [Object],
[00:02:39]               │             By: 
[00:02:39]               │              [Function: name(name) {
[00:02:39]               │                  return By.css('*[name="' + escapeCss(name) + '"]');
[00:02:39]               │                }],
[00:02:39]               │             until: [Object],
[00:02:39]               │             browserType: 'chrome',
[00:02:39]               │             'consoleLog$': [Object] },
[00:02:39]               │          timeout: 10000,
[00:02:39]               │          fixedHeaderHeight: 50,
[00:02:39]               │          logger: 
[00:02:39]               │           { identWidth: 14,
[00:02:39]               │             writers: [Object],
[00:02:39]               │             'written$': [Object] },
[00:02:39]               │          browserType: 'chrome',
[00:02:39]               │          By: 
[00:02:39]               │           [Function: name(name) {
[00:02:39]               │               return By.css('*[name="' + escapeCss(name) + '"]');
[00:02:39]               │             }],
[00:02:39]               │          driver: 
[00:02:39]               │           { session_: {},
[00:02:39]               │             executor_: [Object],
[00:02:39]               │             fileDetector_: null,
[00:02:39]               │             onQuit_: [Function: onQuit] },
[00:02:39]               │          Keys: 
[00:02:39]               │           { NULL: '',
[00:02:39]               │             CANCEL: '',
[00:02:39]               │             HELP: '',
[00:02:39]               │             BACK_SPACE: '',
[00:02:39]               │             TAB: '',
[00:02:39]               │             CLEAR: '',
[00:02:39]               │             RETURN: '',
[00:02:39]               │             ENTER: '',
[00:02:39]               │             SHIFT: '',
[00:02:39]               │             CONTROL: '',
[00:02:39]               │             ALT: '',
[00:02:39]               │             PAUSE: '',
[00:02:39]               │             ESCAPE: '',
[00:02:39]               │             SPACE: '',
[00:02:39]               │             PAGE_UP: '',
[00:02:39]               │             PAGE_DOWN: '',
[00:02:39]               │             END: '',
[00:02:39]               │             HOME: '',
[00:02:39]               │             ARROW_LEFT: '',
[00:02:39]               │             LEFT: '',
[00:02:39]               │             ARROW_UP: '',
[00:02:39]               │             UP: '',
[00:02:39]               │             ARROW_RIGHT: '',
[00:02:39]               │             RIGHT: '',
[00:02:39]               │             ARROW_DOWN: '',
[00:02:39]               │             DOWN: '',
[00:02:39]               │             INSERT: '',
[00:02:39]               │             DELETE: '',
[00:02:39]               │             SEMICOLON: '',
[00:02:39]               │             EQUALS: '',
[00:02:39]               │             NUMPAD0: '',
[00:02:39]               │             NUMPAD1: '',
[00:02:39]               │             NUMPAD2: '',
[00:02:39]               │             NUMPAD3: '',
[00:02:39]               │             NUMPAD4: '',
[00:02:39]               │             NUMPAD5: '',
[00:02:39]               │             NUMPAD6: '',
[00:02:39]               │             NUMPAD7: '',
[00:02:39]               │             NUMPAD8: '',
[00:02:39]               │             NUMPAD9: '',
[00:02:39]               │             MULTIPLY: '',
[00:02:39]               │             ADD: '',
[00:02:39]               │             SEPARATOR: '',
[00:02:39]               │             SUBTRACT: '',
[00:02:39]               │             DECIMAL: '',
[00:02:39]               │             DIVIDE: '',
[00:02:39]               │             F1: '',
[00:02:39]               │             F2: '',
[00:02:39]               │             F3: '',
[00:02:39]               │             F4: '',
[00:02:39]               │             F5: '',
[00:02:39]               │             F6: '',
[00:02:39]               │             F7: '',
[00:02:39]               │             F8: '',
[00:02:39]               │             F9: '',
[00:02:39]               │             F10: '',
[00:02:39]               │             F11: '',
[00:02:39]               │             F12: '',
[00:02:39]               │             COMMAND: '',
[00:02:39]               │             META: '',
[00:02:39]               │             ZENKAKU_HANKAKU: '',
[00:02:39]               │             chord: [Function] },
[00:02:39]               │          isW3CEnabled: true,
[00:02:39]               │          isChromium: true } ] to have a length of 5 but got 4
[00:02:39]               │ debg TestSubjects.findAll(canvasWorkpadPage > canvasWorkpadPageElementContent)
[00:02:39]               │ debg Find.allByCssSelector('[data-test-subj="canvasWorkpadPage"] [data-test-subj="canvasWorkpadPageElementContent"]') with timeout=10000
[00:02:40]               │ debg TestSubjects.findAll(canvasWorkpadPage > canvasWorkpadPageElementContent)
[00:02:40]               │ debg Find.allByCssSelector('[data-test-subj="canvasWorkpadPage"] [data-test-subj="canvasWorkpadPageElementContent"]') with timeout=10000
[00:02:40]               └- ✓ pass  (2.3s) "Canvas app custom elements adds the custom element to the workpad when prompted"
[00:02:40]             └-> saves custom element modifications
[00:02:40]               └-> "before each" hook: global before each
[00:02:40]               │ debg TestSubjects.click(add-element-button)
[00:02:40]               │ debg Find.clickByCssSelector('[data-test-subj="add-element-button"]') with timeout=10000
[00:02:40]               │ debg Find.findByCssSelector('[data-test-subj="add-element-button"]') with timeout=10000
[00:02:40]               │ debg TestSubjects.click(saved-elements-menu-option)
[00:02:40]               │ debg Find.clickByCssSelector('[data-test-subj="saved-elements-menu-option"]') with timeout=10000
[00:02:40]               │ debg Find.findByCssSelector('[data-test-subj="saved-elements-menu-option"]') with timeout=10000
[00:02:40]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:41]               │ debg TestSubjects.click(canvasElementCard__editButton)
[00:02:41]               │ debg Find.clickByCssSelector('[data-test-subj="canvasElementCard__editButton"]') with timeout=20000
[00:02:41]               │ debg Find.findByCssSelector('[data-test-subj="canvasElementCard__editButton"]') with timeout=20000
[00:02:41]               │ debg TestSubjects.setValue(canvasCustomElementForm-name, My Edited New Element)
[00:02:41]               │ debg TestSubjects.click(canvasCustomElementForm-name)
[00:02:41]               │ debg Find.clickByCssSelector('[data-test-subj="canvasCustomElementForm-name"]') with timeout=10000
[00:02:41]               │ debg Find.findByCssSelector('[data-test-subj="canvasCustomElementForm-name"]') with timeout=10000
[00:02:41]               │ debg TestSubjects.setValue(canvasCustomElementForm-description, An excellent edited element)
[00:02:41]               │ debg TestSubjects.click(canvasCustomElementForm-description)
[00:02:41]               │ debg Find.clickByCssSelector('[data-test-subj="canvasCustomElementForm-description"]') with timeout=10000
[00:02:41]               │ debg Find.findByCssSelector('[data-test-subj="canvasCustomElementForm-description"]') with timeout=10000
[00:02:42]               │ debg TestSubjects.click(canvasCustomElementForm-submit)
[00:02:42]               │ debg Find.clickByCssSelector('[data-test-subj="canvasCustomElementForm-submit"]') with timeout=10000
[00:02:42]               │ debg Find.findByCssSelector('[data-test-subj="canvasCustomElementForm-submit"]') with timeout=10000
[00:02:42]               │ debg Find.findByCssSelector('.canvasElementCard__wrapper .euiCard__title') with timeout=10000
[00:02:42]               │ debg --- retry.try error: expected 'My New Element' to contain 'My Edited New Element'
[00:02:42]               │ debg Find.findByCssSelector('.canvasElementCard__wrapper .euiCard__title') with timeout=10000
[00:02:42]               │ debg --- retry.try failed again with the same message...
[00:02:43]               │ debg Find.findByCssSelector('.canvasElementCard__wrapper .euiCard__title') with timeout=10000
[00:02:43]               │ debg TestSubjects.click(saved-elements-modal-close-button)
[00:02:43]               │ debg Find.clickByCssSelector('[data-test-subj="saved-elements-modal-close-button"]') with timeout=10000
[00:02:43]               │ debg Find.findByCssSelector('[data-test-subj="saved-elements-modal-close-button"]') with timeout=10000
[00:02:43]               └- ✓ pass  (3.2s) "Canvas app custom elements saves custom element modifications"
[00:02:43]             └-> deletes custom element when prompted
[00:02:43]               └-> "before each" hook: global before each
[00:02:43]               │ debg TestSubjects.click(add-element-button)
[00:02:43]               │ debg Find.clickByCssSelector('[data-test-subj="add-element-button"]') with timeout=10000
[00:02:43]               │ debg Find.findByCssSelector('[data-test-subj="add-element-button"]') with timeout=10000
[00:02:43]               │ debg TestSubjects.click(saved-elements-menu-option)
[00:02:43]               │ debg Find.clickByCssSelector('[data-test-subj="saved-elements-menu-option"]') with timeout=10000
[00:02:43]               │ debg Find.findByCssSelector('[data-test-subj="saved-elements-menu-option"]') with timeout=10000
[00:02:43]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:44]               │ debg TestSubjects.click(canvasElementCard__deleteButton)
[00:02:44]               │ debg Find.clickByCssSelector('[data-test-subj="canvasElementCard__deleteButton"]') with timeout=20000
[00:02:44]               │ debg Find.findByCssSelector('[data-test-subj="canvasElementCard__deleteButton"]') with timeout=20000
[00:02:44]               │ debg TestSubjects.click(confirmModalConfirmButton)
[00:02:44]               │ debg Find.clickByCssSelector('[data-test-subj="confirmModalConfirmButton"]') with timeout=20000
[00:02:44]               │ debg Find.findByCssSelector('[data-test-subj="confirmModalConfirmButton"]') with timeout=20000
[00:02:44]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:44]               │ debg --- retry.try error: expected [ { _webElement: { driver_: [Object], id_: {} },
[00:02:44]               │          locator: null,
[00:02:44]               │          webDriver: 
[00:02:44]               │           { driver: [Object],
[00:02:44]               │             By: 
[00:02:44]               │              [Function: name(name) {
[00:02:44]               │                  return By.css('*[name="' + escapeCss(name) + '"]');
[00:02:44]               │                }],
[00:02:44]               │             until: [Object],
[00:02:44]               │             browserType: 'chrome',
[00:02:44]               │             'consoleLog$': [Object] },
[00:02:44]               │          timeout: 10000,
[00:02:44]               │          fixedHeaderHeight: 50,
[00:02:44]               │          logger: 
[00:02:44]               │           { identWidth: 14,
[00:02:44]               │             writers: [Object],
[00:02:44]               │             'written$': [Object] },
[00:02:44]               │          browserType: 'chrome',
[00:02:44]               │          By: 
[00:02:44]               │           [Function: name(name) {
[00:02:44]               │               return By.css('*[name="' + escapeCss(name) + '"]');
[00:02:44]               │             }],
[00:02:44]               │          driver: 
[00:02:44]               │           { session_: {},
[00:02:44]               │             executor_: [Object],
[00:02:44]               │             fileDetector_: null,
[00:02:44]               │             onQuit_: [Function: onQuit] },
[00:02:44]               │          Keys: 
[00:02:44]               │           { NULL: '',
[00:02:44]               │             CANCEL: '',
[00:02:44]               │             HELP: '',
[00:02:44]               │             BACK_SPACE: '',
[00:02:44]               │             TAB: '',
[00:02:44]               │             CLEAR: '',
[00:02:44]               │             RETURN: '',
[00:02:44]               │             ENTER: '',
[00:02:44]               │             SHIFT: '',
[00:02:44]               │             CONTROL: '',
[00:02:44]               │             ALT: '',
[00:02:44]               │             PAUSE: '',
[00:02:44]               │             ESCAPE: '',
[00:02:44]               │             SPACE: '',
[00:02:44]               │             PAGE_UP: '',
[00:02:44]               │             PAGE_DOWN: '',
[00:02:44]               │             END: '',
[00:02:44]               │             HOME: '',
[00:02:44]               │             ARROW_LEFT: '',
[00:02:44]               │             LEFT: '',
[00:02:44]               │             ARROW_UP: '',
[00:02:44]               │             UP: '',
[00:02:44]               │             ARROW_RIGHT: '',
[00:02:44]               │             RIGHT: '',
[00:02:44]               │             ARROW_DOWN: '',
[00:02:44]               │             DOWN: '',
[00:02:44]               │             INSERT: '',
[00:02:44]               │             DELETE: '',
[00:02:44]               │             SEMICOLON: '',
[00:02:44]               │             EQUALS: '',
[00:02:44]               │             NUMPAD0: '',
[00:02:44]               │             NUMPAD1: '',
[00:02:44]               │             NUMPAD2: '',
[00:02:44]               │             NUMPAD3: '',
[00:02:44]               │             NUMPAD4: '',
[00:02:44]               │             NUMPAD5: '',
[00:02:44]               │             NUMPAD6: '',
[00:02:44]               │             NUMPAD7: '',
[00:02:44]               │             NUMPAD8: '',
[00:02:44]               │             NUMPAD9: '',
[00:02:44]               │             MULTIPLY: '',
[00:02:44]               │             ADD: '',
[00:02:44]               │             SEPARATOR: '',
[00:02:44]               │             SUBTRACT: '',
[00:02:44]               │             DECIMAL: '',
[00:02:44]               │             DIVIDE: '',
[00:02:44]               │             F1: '',
[00:02:44]               │             F2: '',
[00:02:44]               │             F3: '',
[00:02:44]               │             F4: '',
[00:02:44]               │             F5: '',
[00:02:44]               │             F6: '',
[00:02:44]               │             F7: '',
[00:02:44]               │             F8: '',
[00:02:44]               │             F9: '',
[00:02:44]               │             F10: '',
[00:02:44]               │             F11: '',
[00:02:44]               │             F12: '',
[00:02:44]               │             COMMAND: '',
[00:02:44]               │             META: '',
[00:02:44]               │             ZENKAKU_HANKAKU: '',
[00:02:44]               │             chord: [Function] },
[00:02:44]               │          isW3CEnabled: true,
[00:02:44]               │          isChromium: true } ] to have a length of 0 but got 1
[00:02:45]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:45]               │ debg --- retry.try failed again with the same message...
[00:02:45]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:45]               │ debg --- retry.try failed again with the same message...
[00:02:46]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:46]               │ debg --- retry.try failed again with the same message...
[00:02:46]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:46]               │ debg --- retry.try failed again with the same message...
[00:02:47]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:47]               │ debg --- retry.try failed again with the same message...
[00:02:47]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:47]               │ debg --- retry.try failed again with the same message...
[00:02:48]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:48]               │ debg --- retry.try failed again with the same message...
[00:02:48]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:48]               │ debg --- retry.try failed again with the same message...
[00:02:49]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:49]               │ debg --- retry.try failed again with the same message...
[00:02:49]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:50]               │ debg --- retry.try failed again with the same message...
[00:02:50]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:50]               │ debg --- retry.try failed again with the same message...
[00:02:51]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:51]               │ debg --- retry.try failed again with the same message...
[00:02:51]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:51]               │ debg --- retry.try failed again with the same message...
[00:02:52]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:52]               │ debg --- retry.try failed again with the same message...
[00:02:52]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:52]               │ debg --- retry.try failed again with the same message...
[00:02:53]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:53]               │ debg --- retry.try failed again with the same message...
[00:02:53]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:53]               │ debg --- retry.try failed again with the same message...
[00:02:54]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:54]               │ debg --- retry.try failed again with the same message...
[00:02:54]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:54]               │ debg --- retry.try failed again with the same message...
[00:02:55]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:55]               │ debg --- retry.try failed again with the same message...
[00:02:55]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:55]               │ debg --- retry.try failed again with the same message...
[00:02:56]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:56]               │ debg --- retry.try failed again with the same message...
[00:02:56]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:56]               │ debg --- retry.try failed again with the same message...
[00:02:57]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:57]               │ debg --- retry.try failed again with the same message...
[00:02:57]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:57]               │ debg --- retry.try failed again with the same message...
[00:02:58]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:58]               │ debg --- retry.try failed again with the same message...
[00:02:58]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:58]               │ debg --- retry.try failed again with the same message...
[00:02:59]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:59]               │ debg --- retry.try failed again with the same message...
[00:02:59]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:02:59]               │ debg --- retry.try failed again with the same message...
[00:03:00]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:00]               │ debg --- retry.try failed again with the same message...
[00:03:00]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:00]               │ debg --- retry.try failed again with the same message...
[00:03:01]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:01]               │ debg --- retry.try failed again with the same message...
[00:03:01]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:01]               │ debg --- retry.try failed again with the same message...
[00:03:02]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:02]               │ debg --- retry.try failed again with the same message...
[00:03:02]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:02]               │ debg --- retry.try failed again with the same message...
[00:03:03]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:03]               │ debg --- retry.try failed again with the same message...
[00:03:03]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:03]               │ debg --- retry.try failed again with the same message...
[00:03:04]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:04]               │ debg --- retry.try failed again with the same message...
[00:03:05]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:05]               │ debg --- retry.try failed again with the same message...
[00:03:05]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:05]               │ debg --- retry.try failed again with the same message...
[00:03:06]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:06]               │ debg --- retry.try failed again with the same message...
[00:03:06]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:06]               │ debg --- retry.try failed again with the same message...
[00:03:07]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:07]               │ debg --- retry.try failed again with the same message...
[00:03:07]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:07]               │ debg --- retry.try failed again with the same message...
[00:03:08]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:08]               │ debg --- retry.try failed again with the same message...
[00:03:08]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:08]               │ debg --- retry.try failed again with the same message...
[00:03:09]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:09]               │ debg --- retry.try failed again with the same message...
[00:03:09]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:09]               │ debg --- retry.try failed again with the same message...
[00:03:10]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:10]               │ debg --- retry.try failed again with the same message...
[00:03:10]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:10]               │ debg --- retry.try failed again with the same message...
[00:03:11]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:11]               │ debg --- retry.try failed again with the same message...
[00:03:11]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:11]               │ debg --- retry.try failed again with the same message...
[00:03:12]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:12]               │ debg --- retry.try failed again with the same message...
[00:03:12]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:12]               │ debg --- retry.try failed again with the same message...
[00:03:13]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:13]               │ debg --- retry.try failed again with the same message...
[00:03:13]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:13]               │ debg --- retry.try failed again with the same message...
[00:03:14]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:14]               │ debg --- retry.try failed again with the same message...
[00:03:14]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:14]               │ debg --- retry.try failed again with the same message...
[00:03:15]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:15]               │ debg --- retry.try failed again with the same message...
[00:03:15]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:15]               │ debg --- retry.try failed again with the same message...
[00:03:16]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:16]               │ debg --- retry.try failed again with the same message...
[00:03:16]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:16]               │ debg --- retry.try failed again with the same message...
[00:03:17]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:17]               │ debg --- retry.try failed again with the same message...
[00:03:18]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:18]               │ debg --- retry.try failed again with the same message...
[00:03:18]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:18]               │ debg --- retry.try failed again with the same message...
[00:03:19]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:19]               │ debg --- retry.try failed again with the same message...
[00:03:19]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:19]               │ debg --- retry.try failed again with the same message...
[00:03:20]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:20]               │ debg --- retry.try failed again with the same message...
[00:03:20]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:20]               │ debg --- retry.try failed again with the same message...
[00:03:21]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:21]               │ debg --- retry.try failed again with the same message...
[00:03:21]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:21]               │ debg --- retry.try failed again with the same message...
[00:03:22]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:22]               │ debg --- retry.try failed again with the same message...
[00:03:22]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:22]               │ debg --- retry.try failed again with the same message...
[00:03:23]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:23]               │ debg --- retry.try failed again with the same message...
[00:03:23]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:23]               │ debg --- retry.try failed again with the same message...
[00:03:24]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:24]               │ debg --- retry.try failed again with the same message...
[00:03:24]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:24]               │ debg --- retry.try failed again with the same message...
[00:03:25]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:25]               │ debg --- retry.try failed again with the same message...
[00:03:25]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:25]               │ debg --- retry.try failed again with the same message...
[00:03:26]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:26]               │ debg --- retry.try failed again with the same message...
[00:03:26]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:26]               │ debg --- retry.try failed again with the same message...
[00:03:27]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:27]               │ debg --- retry.try failed again with the same message...
[00:03:27]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:27]               │ debg --- retry.try failed again with the same message...
[00:03:28]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:28]               │ debg --- retry.try failed again with the same message...
[00:03:28]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:28]               │ debg --- retry.try failed again with the same message...
[00:03:29]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:29]               │ debg --- retry.try failed again with the same message...
[00:03:29]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:29]               │ debg --- retry.try failed again with the same message...
[00:03:30]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:30]               │ debg --- retry.try failed again with the same message...
[00:03:30]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:31]               │ debg --- retry.try failed again with the same message...
[00:03:31]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:31]               │ debg --- retry.try failed again with the same message...
[00:03:32]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:32]               │ debg --- retry.try failed again with the same message...
[00:03:32]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:32]               │ debg --- retry.try failed again with the same message...
[00:03:33]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:33]               │ debg --- retry.try failed again with the same message...
[00:03:33]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:33]               │ debg --- retry.try failed again with the same message...
[00:03:34]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:34]               │ debg --- retry.try failed again with the same message...
[00:03:34]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:34]               │ debg --- retry.try failed again with the same message...
[00:03:35]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:35]               │ debg --- retry.try failed again with the same message...
[00:03:35]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:35]               │ debg --- retry.try failed again with the same message...
[00:03:36]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:36]               │ debg --- retry.try failed again with the same message...
[00:03:36]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:36]               │ debg --- retry.try failed again with the same message...
[00:03:37]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:37]               │ debg --- retry.try failed again with the same message...
[00:03:37]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:37]               │ debg --- retry.try failed again with the same message...
[00:03:38]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:38]               │ debg --- retry.try failed again with the same message...
[00:03:38]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:38]               │ debg --- retry.try failed again with the same message...
[00:03:39]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:39]               │ debg --- retry.try failed again with the same message...
[00:03:39]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:39]               │ debg --- retry.try failed again with the same message...
[00:03:40]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:40]               │ debg --- retry.try failed again with the same message...
[00:03:40]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:40]               │ debg --- retry.try failed again with the same message...
[00:03:41]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:41]               │ debg --- retry.try failed again with the same message...
[00:03:41]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:41]               │ debg --- retry.try failed again with the same message...
[00:03:42]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:42]               │ debg --- retry.try failed again with the same message...
[00:03:42]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:42]               │ debg --- retry.try failed again with the same message...
[00:03:43]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:43]               │ debg --- retry.try failed again with the same message...
[00:03:43]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:43]               │ debg --- retry.try failed again with the same message...
[00:03:44]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:44]               │ debg --- retry.try failed again with the same message...
[00:03:44]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:44]               │ debg --- retry.try failed again with the same message...
[00:03:45]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:45]               │ debg --- retry.try failed again with the same message...
[00:03:45]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:45]               │ debg --- retry.try failed again with the same message...
[00:03:46]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:46]               │ debg --- retry.try failed again with the same message...
[00:03:46]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:47]               │ debg --- retry.try failed again with the same message...
[00:03:47]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:47]               │ debg --- retry.try failed again with the same message...
[00:03:48]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:48]               │ debg --- retry.try failed again with the same message...
[00:03:48]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:48]               │ debg --- retry.try failed again with the same message...
[00:03:49]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:49]               │ debg --- retry.try failed again with the same message...
[00:03:49]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:49]               │ debg --- retry.try failed again with the same message...
[00:03:50]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:50]               │ debg --- retry.try failed again with the same message...
[00:03:50]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:50]               │ debg --- retry.try failed again with the same message...
[00:03:51]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:51]               │ debg --- retry.try failed again with the same message...
[00:03:51]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:51]               │ debg --- retry.try failed again with the same message...
[00:03:52]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:52]               │ debg --- retry.try failed again with the same message...
[00:03:52]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:52]               │ debg --- retry.try failed again with the same message...
[00:03:53]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:53]               │ debg --- retry.try failed again with the same message...
[00:03:53]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:53]               │ debg --- retry.try failed again with the same message...
[00:03:54]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:54]               │ debg --- retry.try failed again with the same message...
[00:03:54]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:54]               │ debg --- retry.try failed again with the same message...
[00:03:55]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:55]               │ debg --- retry.try failed again with the same message...
[00:03:55]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:55]               │ debg --- retry.try failed again with the same message...
[00:03:56]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:56]               │ debg --- retry.try failed again with the same message...
[00:03:56]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:56]               │ debg --- retry.try failed again with the same message...
[00:03:57]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:57]               │ debg --- retry.try failed again with the same message...
[00:03:57]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:57]               │ debg --- retry.try failed again with the same message...
[00:03:58]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:58]               │ debg --- retry.try failed again with the same message...
[00:03:58]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:58]               │ debg --- retry.try failed again with the same message...
[00:03:59]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:59]               │ debg --- retry.try failed again with the same message...
[00:03:59]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:03:59]               │ debg --- retry.try failed again with the same message...
[00:04:00]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:00]               │ debg --- retry.try failed again with the same message...
[00:04:00]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:00]               │ debg --- retry.try failed again with the same message...
[00:04:01]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:01]               │ debg --- retry.try failed again with the same message...
[00:04:01]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:01]               │ debg --- retry.try failed again with the same message...
[00:04:02]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:02]               │ debg --- retry.try failed again with the same message...
[00:04:03]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:03]               │ debg --- retry.try failed again with the same message...
[00:04:03]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:03]               │ debg --- retry.try failed again with the same message...
[00:04:04]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:04]               │ debg --- retry.try failed again with the same message...
[00:04:04]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:04]               │ debg --- retry.try failed again with the same message...
[00:04:05]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:05]               │ debg --- retry.try failed again with the same message...
[00:04:05]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:05]               │ debg --- retry.try failed again with the same message...
[00:04:06]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:06]               │ debg --- retry.try failed again with the same message...
[00:04:06]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:06]               │ debg --- retry.try failed again with the same message...
[00:04:07]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:07]               │ debg --- retry.try failed again with the same message...
[00:04:07]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:07]               │ debg --- retry.try failed again with the same message...
[00:04:08]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:08]               │ debg --- retry.try failed again with the same message...
[00:04:08]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:08]               │ debg --- retry.try failed again with the same message...
[00:04:09]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:09]               │ debg --- retry.try failed again with the same message...
[00:04:09]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:09]               │ debg --- retry.try failed again with the same message...
[00:04:10]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:10]               │ debg --- retry.try failed again with the same message...
[00:04:10]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:10]               │ debg --- retry.try failed again with the same message...
[00:04:11]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:11]               │ debg --- retry.try failed again with the same message...
[00:04:11]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:11]               │ debg --- retry.try failed again with the same message...
[00:04:12]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:12]               │ debg --- retry.try failed again with the same message...
[00:04:12]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:12]               │ debg --- retry.try failed again with the same message...
[00:04:13]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:13]               │ debg --- retry.try failed again with the same message...
[00:04:13]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:13]               │ debg --- retry.try failed again with the same message...
[00:04:14]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:14]               │ debg --- retry.try failed again with the same message...
[00:04:14]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:14]               │ debg --- retry.try failed again with the same message...
[00:04:15]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:15]               │ debg --- retry.try failed again with the same message...
[00:04:15]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:15]               │ debg --- retry.try failed again with the same message...
[00:04:16]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:16]               │ debg --- retry.try failed again with the same message...
[00:04:16]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:16]               │ debg --- retry.try failed again with the same message...
[00:04:17]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:17]               │ debg --- retry.try failed again with the same message...
[00:04:17]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:17]               │ debg --- retry.try failed again with the same message...
[00:04:18]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:18]               │ debg --- retry.try failed again with the same message...
[00:04:18]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:18]               │ debg --- retry.try failed again with the same message...
[00:04:19]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:19]               │ debg --- retry.try failed again with the same message...
[00:04:20]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:20]               │ debg --- retry.try failed again with the same message...
[00:04:20]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:20]               │ debg --- retry.try failed again with the same message...
[00:04:21]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:21]               │ debg --- retry.try failed again with the same message...
[00:04:21]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:21]               │ debg --- retry.try failed again with the same message...
[00:04:22]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:22]               │ debg --- retry.try failed again with the same message...
[00:04:22]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:22]               │ debg --- retry.try failed again with the same message...
[00:04:23]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:23]               │ debg --- retry.try failed again with the same message...
[00:04:23]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:23]               │ debg --- retry.try failed again with the same message...
[00:04:24]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:24]               │ debg --- retry.try failed again with the same message...
[00:04:24]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:24]               │ debg --- retry.try failed again with the same message...
[00:04:25]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:25]               │ debg --- retry.try failed again with the same message...
[00:04:25]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:25]               │ debg --- retry.try failed again with the same message...
[00:04:26]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:26]               │ debg --- retry.try failed again with the same message...
[00:04:26]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:26]               │ debg --- retry.try failed again with the same message...
[00:04:27]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:27]               │ debg --- retry.try failed again with the same message...
[00:04:27]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:27]               │ debg --- retry.try failed again with the same message...
[00:04:28]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:28]               │ debg --- retry.try failed again with the same message...
[00:04:28]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:28]               │ debg --- retry.try failed again with the same message...
[00:04:29]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:29]               │ debg --- retry.try failed again with the same message...
[00:04:29]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:29]               │ debg --- retry.try failed again with the same message...
[00:04:30]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:30]               │ debg --- retry.try failed again with the same message...
[00:04:30]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:30]               │ debg --- retry.try failed again with the same message...
[00:04:31]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:31]               │ debg --- retry.try failed again with the same message...
[00:04:31]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:31]               │ debg --- retry.try failed again with the same message...
[00:04:32]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:32]               │ debg --- retry.try failed again with the same message...
[00:04:32]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:32]               │ debg --- retry.try failed again with the same message...
[00:04:33]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:33]               │ debg --- retry.try failed again with the same message...
[00:04:33]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:33]               │ debg --- retry.try failed again with the same message...
[00:04:34]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:34]               │ debg --- retry.try failed again with the same message...
[00:04:34]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:34]               │ debg --- retry.try failed again with the same message...
[00:04:35]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:35]               │ debg --- retry.try failed again with the same message...
[00:04:35]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:35]               │ debg --- retry.try failed again with the same message...
[00:04:36]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:36]               │ debg --- retry.try failed again with the same message...
[00:04:37]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:37]               │ debg --- retry.try failed again with the same message...
[00:04:37]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:37]               │ debg --- retry.try failed again with the same message...
[00:04:38]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:38]               │ debg --- retry.try failed again with the same message...
[00:04:38]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:38]               │ debg --- retry.try failed again with the same message...
[00:04:39]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:39]               │ debg --- retry.try failed again with the same message...
[00:04:39]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:39]               │ debg --- retry.try failed again with the same message...
[00:04:40]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:40]               │ debg --- retry.try failed again with the same message...
[00:04:40]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:40]               │ debg --- retry.try failed again with the same message...
[00:04:41]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:41]               │ debg --- retry.try failed again with the same message...
[00:04:41]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:41]               │ debg --- retry.try failed again with the same message...
[00:04:42]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:42]               │ debg --- retry.try failed again with the same message...
[00:04:42]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:42]               │ debg --- retry.try failed again with the same message...
[00:04:43]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:43]               │ debg --- retry.try failed again with the same message...
[00:04:43]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:43]               │ debg --- retry.try failed again with the same message...
[00:04:44]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:44]               │ debg --- retry.try failed again with the same message...
[00:04:44]               │ debg Find.allByCssSelector('.canvasElementCard__wrapper') with timeout=10000
[00:04:44]               │ debg --- retry.try failed again with the same message...
[00:04:45]               │ info Taking screenshot "/dev/shm/workspace/kibana/x-pack/test/functional/screenshots/failure/Canvas app custom elements deletes custom element when prompted.png"
[00:04:45]               │ info Current URL is: http://localhost:6131/app/canvas#/workpad/workpad-1705f884-6224-47de-ba49-ca224fe6ec31/page/1
[00:04:45]               │ info Saving page source to: /dev/shm/workspace/kibana/x-pack/test/functional/failure_debug/html/Canvas app custom elements deletes custom element when prompted.html
[00:04:45]               └- ✖ fail: "Canvas app custom elements deletes custom element when prompted"
[00:04:45]               │

Stack Trace

Error: retry.try timeout: Error: expected [ { _webElement: { driver_: [Object], id_: {} },
    locator: null,
    webDriver: 
     { driver: [Object],
       By: 
        [Function: name(name) {
            return By.css('*[name="' + escapeCss(name) + '"]');
          }],
       until: [Object],
       browserType: 'chrome',
       'consoleLog$': [Object] },
    timeout: 10000,
    fixedHeaderHeight: 50,
    logger: 
     { identWidth: 14,
       writers: [Object],
       'written$': [Object] },
    browserType: 'chrome',
    By: 
     [Function: name(name) {
         return By.css('*[name="' + escapeCss(name) + '"]');
       }],
    driver: 
     { session_: {},
       executor_: [Object],
       fileDetector_: null,
       onQuit_: [Function: onQuit] },
    Keys: 
     { NULL: '',
       CANCEL: '',
       HELP: '',
       BACK_SPACE: '',
       TAB: '',
       CLEAR: '',
       RETURN: '',
       ENTER: '',
       SHIFT: '',
       CONTROL: '',
       ALT: '',
       PAUSE: '',
       ESCAPE: '',
       SPACE: '',
       PAGE_UP: '',
       PAGE_DOWN: '',
       END: '',
       HOME: '',
       ARROW_LEFT: '',
       LEFT: '',
       ARROW_UP: '',
       UP: '',
       ARROW_RIGHT: '',
       RIGHT: '',
       ARROW_DOWN: '',
       DOWN: '',
       INSERT: '',
       DELETE: '',
       SEMICOLON: '',
       EQUALS: '',
       NUMPAD0: '',
       NUMPAD1: '',
       NUMPAD2: '',
       NUMPAD3: '',
       NUMPAD4: '',
       NUMPAD5: '',
       NUMPAD6: '',
       NUMPAD7: '',
       NUMPAD8: '',
       NUMPAD9: '',
       MULTIPLY: '',
       ADD: '',
       SEPARATOR: '',
       SUBTRACT: '',
       DECIMAL: '',
       DIVIDE: '',
       F1: '',
       F2: '',
       F3: '',
       F4: '',
       F5: '',
       F6: '',
       F7: '',
       F8: '',
       F9: '',
       F10: '',
       F11: '',
       F12: '',
       COMMAND: '',
       META: '',
       ZENKAKU_HANKAKU: '',
       chord: [Function] },
    isW3CEnabled: true,
    isChromium: true } ] to have a length of 0 but got 1
    at Assertion.assert (/dev/shm/workspace/kibana/packages/kbn-expect/expect.js:100:11)
    at Assertion.length (/dev/shm/workspace/kibana/packages/kbn-expect/expect.js:374:8)
    at retry.try (test/functional/apps/canvas/custom_elements.ts:147:45)
    at process._tickCallback (internal/process/next_tick.js:68:7)
    at onFailure (/dev/shm/workspace/kibana/test/common/services/retry/retry_for_success.ts:28:9)
    at retryForSuccess (/dev/shm/workspace/kibana/test/common/services/retry/retry_for_success.ts:68:13)

History

To update your PR or re-run it, just comment with:
@elasticmachine merge upstream

@ThomThomson ThomThomson merged commit 5bad855 into elastic:master May 5, 2020
ThomThomson added a commit to ThomThomson/kibana that referenced this pull request May 5, 2020
Changed the process for saving visualizations and lens visualizations when the user has been redirected there from another application.
@ryankeairns
Copy link
Contributor

Just one UX comment:
I find the "Add to Dashboard" switch in the "Save Visualization" modal confusing - if the user had come from a dashboard, why would the user opt NOT to save edited visualization to the dashboard? And assuming this flow will go away by 7.9, it's even more confusing we're introducing this for just one minor?

While not a primary use case, I viewed this as some added flexibility. I thought of it like this:

I'm editing my Dashboard and I'd like to play around with a particular panel but not alter its content. I edit/open it in Visualize, freely change it, then 'Save as' and choose to not add it to the Dashboard... with no worry of messing things up.

ThomThomson added a commit that referenced this pull request May 6, 2020
Changed the process for saving visualizations and lens visualizations when the user has been redirected there from another application.

Co-authored-by: Elastic Machine <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Feature:Dashboard Dashboard related features Feature:Embedding Embedding content via iFrame release_note:enhancement Team:Visualizations Team label for Lens, elastic-charts, Graph, legacy editors (TSVB, Visualize, Timelion) t// v7.8.0 v8.0.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Navigate back to Dashboard after Editing Vis