@@ -20,26 +20,29 @@ export class CodeServer {
2020
2121 /**
2222 * Checks if the editor is visible
23- * and reloads until it is
23+ * and that we are connected to the host
24+ *
25+ * Reload until both checks pass
2426 */
25- async reloadUntilEditorIsVisible ( ) {
27+ async reloadUntilEditorIsReady ( ) {
2628 const editorIsVisible = await this . isEditorVisible ( )
29+ const editorIsConnected = await this . isConnected ( )
2730 let reloadCount = 0
2831
2932 // Occassionally code-server timeouts in Firefox
3033 // we're not sure why
3134 // but usually a reload or two fixes it
3235 // TODO@jsjoeio @oxy look into Firefox reconnection/timeout issues
33- while ( ! editorIsVisible ) {
36+ while ( ! editorIsVisible && ! editorIsConnected ) {
3437 // When a reload happens, we want to wait for all resources to be
3538 // loaded completely. Hence why we use that instead of DOMContentLoaded
3639 // Read more: https://thisthat.dev/dom-content-loaded-vs-load/
3740 await this . page . waitForLoadState ( "load" )
3841 // Give it an extra second just in case it's feeling extra slow
3942 await this . page . waitForTimeout ( 1000 )
4043 reloadCount += 1
41- if ( await this . isEditorVisible ( ) ) {
42- console . log ( ` Editor became visible after ${ reloadCount } reloads` )
44+ if ( ( await this . isEditorVisible ( ) ) && ( await this . isConnected ) ) {
45+ console . log ( ` Editor became ready after ${ reloadCount } reloads` )
4346 break
4447 }
4548 await this . page . reload ( )
@@ -62,17 +65,11 @@ export class CodeServer {
6265 async isConnected ( ) {
6366 await this . page . waitForLoadState ( "networkidle" )
6467
65- // See [aria-label="Remote Host"]
66- const hostElement = await this . page . $ ( `[aria-label="Remote Host"]` )
67- // Returns something like " localhost:8080"
68- const host = await hostElement ?. innerText ( )
68+ const host = new URL ( CODE_SERVER_ADDRESS ) . host
69+ const hostSelector = `[title="Editing on ${ host } "]`
70+ await this . page . waitForSelector ( hostSelector )
6971
70- // Check if host (localhost:8080) is in the CODE_SERVER_ADDRESS
71- // if it is, we're connected!
72- // if not, we may need to reload the page
73- // Make sure to trim whitespace too
74- const isEditorConnected = host ? CODE_SERVER_ADDRESS . includes ( host . trim ( ) ) : false
75- return isEditorConnected
72+ return await this . page . isVisible ( hostSelector )
7673 }
7774
7875 /**
@@ -109,12 +106,12 @@ export class CodeServer {
109106
110107 /**
111108 * Navigates to CODE_SERVER_ADDRESS
112- * and reloads until the editor is visible
109+ * and reloads until the editor is ready
113110 *
114111 * Helpful for running before tests
115112 */
116113 async setup ( ) {
117114 await this . navigate ( )
118- await this . reloadUntilEditorIsVisible ( )
115+ await this . reloadUntilEditorIsReady ( )
119116 }
120117}
0 commit comments