When you want to hover over an element or dropdown menu, and then click an element that appears after that.
(
self,
hover_selector,
click_selector,
hover_by="css selector",
click_by="css selector",
timeout=None,
js_click=False,
)
| 2752 | return element |
| 2753 | |
| 2754 | def hover_and_click( |
| 2755 | self, |
| 2756 | hover_selector, |
| 2757 | click_selector, |
| 2758 | hover_by="css selector", |
| 2759 | click_by="css selector", |
| 2760 | timeout=None, |
| 2761 | js_click=False, |
| 2762 | ): |
| 2763 | """When you want to hover over an element or dropdown menu, |
| 2764 | and then click an element that appears after that.""" |
| 2765 | self.__check_scope() |
| 2766 | if not timeout: |
| 2767 | timeout = settings.SMALL_TIMEOUT |
| 2768 | if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT: |
| 2769 | timeout = self.__get_new_timeout(timeout) |
| 2770 | original_selector = hover_selector |
| 2771 | original_by = hover_by |
| 2772 | hover_selector, hover_by = self.__recalculate_selector( |
| 2773 | hover_selector, hover_by |
| 2774 | ) |
| 2775 | original_click_selector = click_selector |
| 2776 | click_selector, click_by = self.__recalculate_selector( |
| 2777 | click_selector, click_by |
| 2778 | ) |
| 2779 | if self.__is_cdp_swap_needed(): |
| 2780 | self.cdp.hover_and_click(hover_selector, click_selector) |
| 2781 | return |
| 2782 | dropdown_element = self.wait_for_element_visible( |
| 2783 | original_selector, by=original_by, timeout=timeout |
| 2784 | ) |
| 2785 | self.__demo_mode_highlight_if_active(original_selector, original_by) |
| 2786 | self.scroll_to(hover_selector, by=hover_by) |
| 2787 | pre_action_url = None |
| 2788 | with suppress(Exception): |
| 2789 | pre_action_url = self.driver.current_url |
| 2790 | pre_window_count = len(self.driver.window_handles) |
| 2791 | if self.recorder_mode and self.__current_url_is_recordable(): |
| 2792 | if self.get_session_storage_item("pause_recorder") == "no": |
| 2793 | if hover_by == By.XPATH: |
| 2794 | hover_selector = original_selector |
| 2795 | if click_by == By.XPATH: |
| 2796 | click_selector = original_click_selector |
| 2797 | time_stamp = self.execute_script("return Date.now();") |
| 2798 | origin = self.get_origin() |
| 2799 | the_selectors = [hover_selector, click_selector] |
| 2800 | action = ["ho_cl", the_selectors, origin, time_stamp] |
| 2801 | self.__extra_actions.append(action) |
| 2802 | outdated_driver = False |
| 2803 | element = None |
| 2804 | try: |
| 2805 | if self.mobile_emulator: |
| 2806 | # On mobile, click to hover the element |
| 2807 | dropdown_element.click() |
| 2808 | else: |
| 2809 | page_actions.hover_element(self.driver, dropdown_element) |
| 2810 | except Exception: |
| 2811 | outdated_driver = True |
no test coverage detected