For reference, here's a test which intermittently reproduces the issue on desktop: ``` def test_navigate_back_and_switch_frame(session, inline): target_page = inline("<p id='foo'>foo</p>") session.url = inline("<a id='link' href='{}'>click</a>".format(target_page)) element = session.find.css("a", all=False) orig_handles = session.handles response = element_click(session, element) assert_success(response) session.execute_script("history.go(-1)") session.switch_frame(None) wait = Poll( session, timeout=5, ignored_exceptions=NoSuchElementException, message="Expected element has not been found") wait.until(lambda s: s.find.css("#link")) ``` The trick is to start a bfcache navigation that will not be awaited by marionette and then call `switch_frame(None)`. But as you can see it's a bit harder to trigger than on android, which seems to replace browsing contexts much more often than desktop.
Bug 1786640 Comment 15 Edit History
Note: The actual edited comment in the bug view page will always show the original commenter’s name and original timestamp.
For reference, here's a test which intermittently reproduces the issue on desktop: ```python def test_navigate_back_and_switch_frame(session, inline): target_page = inline("<p id='foo'>foo</p>") session.url = inline("<a id='link' href='{}'>click</a>".format(target_page)) element = session.find.css("a", all=False) orig_handles = session.handles response = element_click(session, element) assert_success(response) session.execute_script("history.go(-1)") session.switch_frame(None) wait = Poll( session, timeout=5, ignored_exceptions=NoSuchElementException, message="Expected element has not been found") wait.until(lambda s: s.find.css("#link")) ``` The trick is to start a bfcache navigation that will not be awaited by marionette and then call `switch_frame(None)`. But as you can see it's a bit harder to trigger than on android, which seems to replace browsing contexts much more often than desktop.