31
31
BROWSER_OBJ = 'BROWSER_OBJ'
32
32
# Other constants
33
33
CELL_OUTPUT_SELECTOR = '.output_subarea'
34
-
34
+ SECONDS_TO_MILLISECONDS = 1000
35
35
36
36
class EndToEndTimeout (Exception ):
37
37
@@ -100,8 +100,8 @@ def __bool__(self):
100
100
# (Quick/dirty )We can debug on failures by deferring bad inits and testing for them here
101
101
return self ._bool
102
102
103
- def click (self ):
104
- return self ._element .click ()
103
+ def click (self , timeout = 30 ):
104
+ return self ._element .click (timeout = timeout * SECONDS_TO_MILLISECONDS )
105
105
106
106
def get_inner_text (self ):
107
107
return self ._element .inner_text ()
@@ -174,9 +174,8 @@ def get_user_data(self):
174
174
return self ._user_data
175
175
176
176
def expect_not_to_be_visible (self , timeout = 30 ):
177
- seconds_to_milliseconds = 1000
178
177
try :
179
- expect (self ._element ).not_to_be_visible (timeout = timeout * seconds_to_milliseconds )
178
+ expect (self ._element ).not_to_be_visible (timeout = timeout * SECONDS_TO_MILLISECONDS )
180
179
except ValueError as err :
181
180
raise Exception ('Cannot expect not_to_be_visible on this type!' ) from err
182
181
except AssertionError as err :
@@ -797,27 +796,64 @@ def is_kernel_running(self):
797
796
def wait_for_kernel_ready (self ):
798
797
self ._editor_page .wait_for_selector (".kernel_idle_icon" )
799
798
800
- def _open_notebook_editor_page (self , existing_file_name = None ):
799
+ def get_editor_page_from_existing_notebook (self , existing_file_name ):
801
800
tree_page = self ._tree_page
802
801
803
- if existing_file_name is not None :
804
- existing_notebook = tree_page .locator (f"text={ existing_file_name } " )
805
- existing_notebook .click ()
806
- self ._tree_page .reload () # TODO: FIX this, page count does not update to 2
807
- else :
808
- # Simulate a user opening a new notebook/kernel
809
- new_dropdown_element = tree_page .locator ('#new-dropdown-button' )
810
- new_dropdown_element .click ()
811
- kernel_name = 'kernel-python3'
812
- kernel_selector = f'#{ kernel_name } a'
813
- new_notebook_element = tree_page .locator (kernel_selector )
814
- new_notebook_element .click ()
802
+ # Find the link to the notebook file on the tree page
803
+ notebook_name_selector = f"text={ existing_file_name } "
804
+ tree_page .wait_for_selector (notebook_name_selector )
805
+ # Click the existing notebook link on the tree page to open the editor
806
+ existing_notebook = tree_page .locator (notebook_name_selector )
807
+ existing_notebook .click ()
808
+ self ._tree_page .reload () # TODO: FIX this, page count does not update to 2
809
+
810
+ def wait_for_new_page ():
811
+ return [pg for pg in self ._browser_data [BROWSER_CONTEXT ].pages if 'tree' not in pg .url ]
812
+
813
+ new_pages = self .wait_for_condition (
814
+ wait_for_new_page ,
815
+ timeout = 125 ,
816
+ period = 1
817
+ )
818
+ editor_page = new_pages [0 ]
819
+
820
+ return editor_page
821
+
822
+ def get_new_editor_page (self ):
823
+ tree_page = self ._tree_page
824
+
825
+ # Simulate a user opening a new notebook/kernel
826
+ new_dropdown_element = tree_page .locator ('#new-dropdown-button' )
827
+ new_dropdown_element .click ()
828
+ kernel_name = 'kernel-python3'
829
+ kernel_selector = f'#{ kernel_name } a'
830
+ new_notebook_element = tree_page .locator (kernel_selector )
831
+ new_notebook_element .click ()
815
832
816
833
def wait_for_new_page ():
817
834
return [pg for pg in self ._browser_data [BROWSER_CONTEXT ].pages if 'tree' not in pg .url ]
818
835
819
836
new_pages = self .wait_for_condition (wait_for_new_page )
820
837
editor_page = new_pages [0 ]
838
+
839
+ return editor_page
840
+
841
+ def _open_notebook_editor_page (self , existing_file_name = None ):
842
+ tree_page = self ._tree_page
843
+
844
+ if existing_file_name is not None :
845
+ editor_page = self .wait_for_condition (
846
+ lambda : self .get_editor_page_from_existing_notebook (existing_file_name ),
847
+ timeout = 500 ,
848
+ period = 1
849
+ )
850
+ else :
851
+ editor_page = self .wait_for_condition (
852
+ lambda : self .get_new_editor_page (),
853
+ timeout = 500 ,
854
+ period = 1
855
+ )
856
+
821
857
return editor_page
822
858
823
859
def get_page_url (self , page ):
@@ -829,7 +865,7 @@ def get_page_url(self, page):
829
865
raise Exception ('Error, provide a valid page to evaluate from!' )
830
866
831
867
return specified_page .url
832
-
868
+
833
869
def go_back (self , page ):
834
870
if page == TREE_PAGE :
835
871
specified_page = self ._tree_page
0 commit comments