a
    5ñ»jg*  ã                   @   sn   d dl mZ d dlmZ d dl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   úCE:\soccer\ml_env\Lib\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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__C   s    z_IeOptionsDescriptor.__init__c                 C   s   |j  | j¡S r   )Ú_optionsÚgetr   )r   ÚobjÚclsr   r   r   Ú__get__G   s    z_IeOptionsDescriptor.__get__N©Úreturnc                 C   sV   t || jƒs$t| j› d| jj› �ƒ‚| jdkrF|tjtjfvrFt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__J   s    þz_IeOptionsDescriptor.__set__)r	   r
   r   Ú__doc__r   r   r!   r   r   r   r   r      s   $r   c                       sp  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dœ‡ fdd„Z-e.e/dœdd„ƒZ0e.e/dœdd„ƒZ1e$ddœdd„Z2e/dœd d!„Z3e.e/dœd"d#„ƒZ4‡  Z5S )$ÚOptionszse:ieOptionszie.browserCommandLineSwitchesZbrowserAttachTimeoutr   zie.ensureCleanSessionzie.fileUploadDialogTimeoutzie.forceCreateProcessApizie.forceShellWindowsApizie.enableFullPageScreenshotZignoreProtectedModeSettingsZignoreZoomSettingZinitialBrowserUrlZnativeEventsZenablePersistentHoverZrequireWindowFocuszie.usePerProcessProxyz$ie.useLegacyFileUploadDialogHandlingzie.edgechromiumzie.edgepathzie.ignoreprocessmatchNr   c                    s   t ƒ  ¡  i | _i | _d S r   )Úsuperr   r   Ú_additional©r   ©Ú	__class__r   r   r   m  s    
zOptions.__init__c                 C   s   | j S )z*:Returns: A dictionary of browser options.)r   r&   r   r   r   Úoptionsr  s    zOptions.optionsc                 C   s   | j S )z!:Returns: The additional options.©r%   r&   r   r   r   Úadditional_optionsw  s    zOptions.additional_options)r   r   c                 C   s   || j |< dS )z±Adds 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
        Nr*   )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¡ |rH||tj	< |S )z.Marshals the IE options to the correct object.ú )
Z_capsr   ÚcopyZ
_argumentsÚjoinÚSWITCHESr%   Úupdater#   ÚKEY)r   ZcapsÚoptsr   r   r   Úto_capabilities…  s    

zOptions.to_capabilitiesc                 C   s
   t j ¡ S r   )r   ZINTERNETEXPLORERr.   r&   r   r   r   Údefault_capabilities”  s    zOptions.default_capabilities)6r	   r
   r   r2   r0   ZBROWSER_ATTACH_TIMEOUTZELEMENT_SCROLL_BEHAVIORZENSURE_CLEAN_SESSIONZFILE_UPLOAD_DIALOG_TIMEOUTZFORCE_CREATE_PROCESS_APIZFORCE_SHELL_WINDOWS_APIZFULL_PAGE_SCREENSHOTZIGNORE_PROTECTED_MODE_SETTINGSZIGNORE_ZOOM_LEVELZINITIAL_BROWSER_URLZNATIVE_EVENTSZPERSISTENT_HOVERZREQUIRE_WINDOW_FOCUSZUSE_PER_PROCESS_PROXYZ&USE_LEGACY_FILE_UPLOAD_DIALOG_HANDLINGZATTACH_TO_EDGE_CHROMEZEDGE_EXECUTABLE_PATHZIGNORE_PROCESS_MATCHr   ÚintZbrowser_attach_timeoutr   Zelement_scroll_behaviorÚboolZensure_clean_sessionZfile_upload_dialog_timeoutZforce_create_process_apiZforce_shell_windows_apiZfull_page_screenshotZignore_protected_mode_settingsZignore_zoom_levelÚstrZinitial_browser_urlZnative_eventsZpersistent_hoverZrequire_window_focusZuse_per_process_proxyZ&use_legacy_file_upload_dialog_handlingZattach_to_edge_chromeZedge_executable_pathr   ÚpropertyÚdictr)   r+   r,   r4   r5   Ú__classcell__r   r   r'   r   r#   V   s\   
















	r#   N)Úenumr   Útypingr   r   Z.selenium.webdriver.common.desired_capabilitiesr   Z!selenium.webdriver.common.optionsr   r   r   r#   r   r   r   r   Ú<module>   s   8