o
    RhU*                     @   sf   d dl mZ d dlmZmZ d dlmZ d dlmZ G dd deZ	G dd dZ
G d	d
 d
eZdS )    )Enum)AnyDict)DesiredCapabilities)
ArgOptionsc                   @   s   e Zd ZdZdZdS )ElementScrollBehaviorr      N)__name__
__module____qualname__TOPBOTTOM r   r   _/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/selenium/webdriver/ie/options.pyr      s    r   c                   @   s*   e Zd ZdZdd Zdd Zd
dd	ZdS )_IeOptionsDescriptora  _IeOptionsDescriptor is an implementation of Descriptor Protocol:

    : Any look-up or assignment to the below attributes in `Options` class will be intercepted
    by `__get__` and `__set__` method respectively.

    - `browser_attach_timeout`
    - `element_scroll_behavior`
    - `ensure_clean_session`
    - `file_upload_dialog_timeout`
    - `force_create_process_api`
    - `force_shell_windows_api`
    - `full_page_screenshot`
    - `ignore_protected_mode_settings`
    - `ignore_zoom_level`
    - `initial_browser_url`
    - `native_events`
    - `persistent_hover`
    - `require_window_focus`
    - `use_per_process_proxy`
    - `use_legacy_file_upload_dialog_handling`
    - `attach_to_edge_chrome`
    - `edge_executable_path`


    : When an attribute lookup happens,
    Example:
        `self. browser_attach_timeout`
        `__get__` method does a dictionary look up in the dictionary `_options` in `Options` class
        and returns the value of key `browserAttachTimeout`
    : When an attribute assignment happens,
    Example:
        `self.browser_attach_timeout` = 30
        `__set__` method sets/updates the value of the key `browserAttachTimeout` in `_options`
        dictionary in `Options` class.
    c                 C   s   || _ || _d S N)nameexpected_type)selfr   r   r   r   r   __init__B   s   
z_IeOptionsDescriptor.__init__c                 C   s   |j | jS r   )_optionsgetr   )r   objclsr   r   r   __get__F   s   z_IeOptionsDescriptor.__get__returnNc                 C   sV   t || jst| j d| jj | jdkr#|tjtjfvr#td||j| j< d S )Nz should be of type elementScrollBehaviorz%Element Scroll Behavior out of range.)	
isinstancer   
ValueErrorr   r	   r   r   r   r   )r   r   valuer   r   r   __set__I   s   z_IeOptionsDescriptor.__set__r   N)r	   r
   r   __doc__r   r   r    r   r   r   r   r      s
    $r   c                       s  e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZeeeZ	 eeeZ	 eeeZ	 eeeZ	 ee	eZ	 ee
eZ 	 eeeZ!	 eeeZ"	 eeeZ#	 eee$Z%	 eeeZ&	 eeeZ'	 eeeZ(	 eeeZ)	 eeeZ*	 eeeZ+	 eee$Z,	 d$ fddZ-e.de/fddZ0e.de/fddZ1de$ddfddZ2de/fd d!Z3e.de/fd"d#Z4  Z5S )%Optionszse:ieOptionszie.browserCommandLineSwitchesbrowserAttachTimeoutr   zie.ensureCleanSessionzie.fileUploadDialogTimeoutzie.forceCreateProcessApizie.forceShellWindowsApizie.enableFullPageScreenshotignoreProtectedModeSettingsignoreZoomSettinginitialBrowserUrlnativeEventsenablePersistentHoverrequireWindowFocuszie.usePerProcessProxyz$ie.useLegacyFileUploadDialogHandlingzie.edgechromiumzie.edgepathzie.ignoreprocessmatchr   Nc                    s   t    i | _i | _d S r   )superr   r   _additionalr   	__class__r   r   r   l  s   

zOptions.__init__c                 C      | j S )z*:Returns: A dictionary of browser options.)r   r-   r   r   r   optionsq     zOptions.optionsc                 C   r0   )z!:Returns: The additional options.r,   r-   r   r   r   additional_optionsv  r2   zOptions.additional_optionsr   c                 C   s   || j |< dS )zAdds an additional option not yet added as a safe option for IE.

        :Args:
         - name: name of the option to add
         - value: value of the option to add
        Nr3   )r   r   r   r   r   r   add_additional_option{  s   zOptions.add_additional_optionc                 C   sL   | j }| j }| jrd| j|| j< | jr|| j |r$||tj	< |S )z.Marshals the IE options to the correct object. )
_capsr   copy
_argumentsjoinSWITCHESr,   updater#   KEY)r   capsoptsr   r   r   to_capabilities  s   

zOptions.to_capabilitiesc                 C   s
   t j S r   )r   INTERNETEXPLORERr8   r-   r   r   r   default_capabilities  s   
zOptions.default_capabilitiesr!   )6r	   r
   r   r=   r;   BROWSER_ATTACH_TIMEOUTELEMENT_SCROLL_BEHAVIORENSURE_CLEAN_SESSIONFILE_UPLOAD_DIALOG_TIMEOUTFORCE_CREATE_PROCESS_APIFORCE_SHELL_WINDOWS_APIFULL_PAGE_SCREENSHOTIGNORE_PROTECTED_MODE_SETTINGSIGNORE_ZOOM_LEVELINITIAL_BROWSER_URLNATIVE_EVENTSPERSISTENT_HOVERREQUIRE_WINDOW_FOCUSUSE_PER_PROCESS_PROXY&USE_LEGACY_FILE_UPLOAD_DIALOG_HANDLINGATTACH_TO_EDGE_CHROMEEDGE_EXECUTABLE_PATHIGNORE_PROCESS_MATCHr   intbrowser_attach_timeoutr   element_scroll_behaviorboolensure_clean_sessionfile_upload_dialog_timeoutforce_create_process_apiforce_shell_windows_apifull_page_screenshotignore_protected_mode_settingsignore_zoom_levelstrinitial_browser_urlnative_eventspersistent_hoverrequire_window_focususe_per_process_proxy&use_legacy_file_upload_dialog_handlingattach_to_edge_chromeedge_executable_pathr   propertydictr1   r4   r5   r@   rB   __classcell__r   r   r.   r   r#   U   s    
















	r#   N)enumr   typingr   r   .selenium.webdriver.common.desired_capabilitiesr   !selenium.webdriver.common.optionsr   r   r   r#   r   r   r   r   <module>   s   8