@@ -35,7 +35,7 @@ def __call__(self, driver):
3535
3636
3737class CustomDriver (webdriver .Chrome ):
38- def wait_for_img_load (self , max_delay = 30 , selector = ".m2g-cell .data-img svg" ):
38+ def wait_for_img_load (self , max_delay = 30 , selector = ".m2g-cell .data-img svg rect " ):
3939 return WebDriverWait (self , max_delay ).until (
4040 EC .presence_of_element_located ((By .CSS_SELECTOR , selector ))
4141 )
@@ -135,21 +135,34 @@ def _tree_to_list(cls, nodes: NodeList[minidom.Node | minidom.Text], data: list)
135135 branch .append (subbranch )
136136 cls ._tree_to_list (node .childNodes , subbranch )
137137
138- def get_tooltip_content (
139- self , selector = ".m2g-cell .m2g-info" , content_selector = "div.m2g-popover"
140- ):
141- ActionChains (self ).click (self .find_by_css_selector (selector )).perform ()
142- tooltip = self .find_by_css_selector (content_selector )
138+ def get_tooltip_content (self , ** kwargs ):
139+ tooltip = self .find_tooltip (** kwargs )
143140 content = tooltip .get_attribute ("innerHTML" )
144141 doc = minidom .parseString (f"<body>{ content } </body>" )
145142 data = []
146143 self ._tree_to_list (doc .childNodes [0 ].childNodes , data )
147144 return data
148145
146+ def find_tooltip (
147+ self ,
148+ trigger_selector = ".m2g-cell .m2g-info" ,
149+ tooltip_selector = "div.m2g-popover" ,
150+ pause = 0.2 ,
151+ ):
152+ el = self .find_clickable (By .CSS_SELECTOR , trigger_selector )
153+ ActionChains (self ).move_to_element (el ).pause (pause ).click ().perform ()
154+ # selenium is a bit flaky with move_to_element,
155+ # best to trigger through JS as well
156+ self .execute_script (
157+ 'var hover = new Event("mouseenter"); '
158+ f'document.querySelector("{ trigger_selector } ").dispatchEvent(hover);'
159+ )
160+ return self .find_by_css_selector (tooltip_selector )
161+
149162 def trigger_callback (self , selector = ".m2g-cell .m2g-callback" , pause = 0.2 ):
150163 self .wait_for_img_load ()
151164 el = self .find_clickable (By .CSS_SELECTOR , selector )
152- ( ActionChains (self ).move_to_element (el ).pause (pause ).click ().perform () )
165+ ActionChains (self ).move_to_element (el ).pause (pause ).click ().perform ()
153166
154167 def click_checkbox (self , is_empty = False ):
155168 self .find_clickable (By .CSS_SELECTOR , ".m2g-cb" ).click ()
0 commit comments