When an element is stale WebdriverIO will attempt to refetch it when a
command is run on it, such as a click.
Since WebElement JSONs are used directly to create the WebdriverIO
elements they do not have a selector which is used to attempt to refetch
them.
Custom locator strategies are able to add a selector to the resulting
element but still fail to refetch and cause problems with within for
unknown reasons. In future this may be a viable solution but not
currently.
Use SimmerJS to generate a unique selector for the element and send that
back from the browser, then use the selector as a string selector for $.
Using SimmerJS has the negative that much more text is being sent
between the browser and WebdriverIO.
When an element is stale WebdriverIO will attempt to refetch it when a command is run on it, such as a click.
Since WebElement JSONs are used directly to create the WebdriverIO elements they do not have a selector which is used to attempt to refetch them.
Custom locator strategies are able to add a selector to the resulting element but still fail to refetch and cause problems with within for unknown reasons. In future this may be a viable solution but not currently.
Use SimmerJS to generate a unique selector for the element and send that back from the browser, then use the selector as a string selector for $.
Using SimmerJS has the negative that much more text is being sent between the browser and WebdriverIO.