o
    ҷh)                     @   s   d dl 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ZG dd	 d	Z	G d
d dZ
G dd dZG dd dZG dd dedZG dd deZdS )    N)ABCMeta)abstractmethod)InvalidArgumentException)Proxyc                   @   s$   e Zd Zdd Zdd Zdd ZdS )_BaseOptionsDescriptorc                 C   
   || _ d S Nnameselfr
    r   T/var/www/html/venv/lib/python3.10/site-packages/selenium/webdriver/common/options.py__init__      
z_BaseOptionsDescriptor.__init__c                 C   s(   | j dv r|j| j dS |j| j S )N)acceptInsecureCertsstrictFileInteractabilitysetWindowRectse:downloadsEnabledF)r
   _capsgetr   objclsr   r   r   __get__   s   
z_BaseOptionsDescriptor.__get__c                 C   s   | | j| d S r   )set_capabilityr
   r   r   valuer   r   r   __set__"   s   z_BaseOptionsDescriptor.__set__N)__name__
__module____qualname__r   r   r   r   r   r   r   r      s    r   c                   @   (   e Zd ZdZdd Zdd Zdd ZdS )	_PageLoadStrategyDescriptorzDetermines the point at which a navigation command is returned:
    https://w3c.github.io/webdriver/#dfn-table-of-page-load-strategies.

    :param strategy: the strategy corresponding to a document readiness state
    c                 C   r   r   r	   r   r   r   r   r   -   r   z$_PageLoadStrategyDescriptor.__init__c                 C      |j | jS r   r   r   r
   r   r   r   r   r   0      z#_PageLoadStrategyDescriptor.__get__c                 C   "   |dv r| | j| d S td)N)normaleagernonez>Strategy can only be one of the following: normal, eager, noner   r
   
ValueErrorr   r   r   r   r   3   s   z#_PageLoadStrategyDescriptor.__set__Nr   r    r!   __doc__r   r   r   r   r   r   r   r#   &   s
    r#   c                   @   r"   )	"_UnHandledPromptBehaviorDescriptorad  How the driver should respond when an alert is present and the:
    command sent is not handling the alert:
    https://w3c.github.io/webdriver/#dfn-table-of-page-load-strategies:

    :param behavior: behavior to use when an alert is encountered

    :returns: Values for implicit timeout, pageLoad timeout and script timeout if set (in milliseconds)
    c                 C   r   r   r	   r   r   r   r   r   D   r   z+_UnHandledPromptBehaviorDescriptor.__init__c                 C   r$   r   r%   r   r   r   r   r   G   r&   z*_UnHandledPromptBehaviorDescriptor.__get__c                 C   r'   )N)dismissacceptzdismiss and notifyzaccept and notifyignoreziBehavior can only be one of the following: dismiss, accept, dismiss and notify, accept and notify, ignorer+   r   r   r   r   r   J   s
   z*_UnHandledPromptBehaviorDescriptor.__set__Nr-   r   r   r   r   r/   :   s
    	r/   c                   @   r"   )	_TimeoutsDescriptoraL  How long the driver should wait for actions to complete before:
    returning an error https://w3c.github.io/webdriver/#timeouts:

    :param timeouts: values in milliseconds for implicit wait, page load and script timeout

    :returns: Values for implicit timeout, pageLoad timeout and script timeout if set (in milliseconds)
    c                 C   r   r   r	   r   r   r   r   r   ]   r   z_TimeoutsDescriptor.__init__c                 C   r$   r   r%   r   r   r   r   r   `   r&   z_TimeoutsDescriptor.__get__c                 C   s0   t dd | D r|| j| d S td)Nc                 s   s    | ]}|d v V  qdS ))implicitpageLoadscriptNr   ).0xr   r   r   	<genexpr>d   s    z._TimeoutsDescriptor.__set__.<locals>.<genexpr>zITimeout keys can only be one of the following: implicit, pageLoad, script)allkeysr   r
   r,   r   r   r   r   r   c   s   z_TimeoutsDescriptor.__set__Nr-   r   r   r   r   r3   T   s
    r3   c                   @   r"   )	_ProxyDescriptorz':Returns: Proxy if set, otherwise None.c                 C   r   r   r	   r   r   r   r   r   m   r   z_ProxyDescriptor.__init__c                 C   s   |j S r   )_proxyr   r   r   r   r   p      z_ProxyDescriptor.__get__c                 C   s,   t |ts	td||_| |j| j< d S )Nz$Only Proxy objects can be passed in.)
isinstancer   r   r=   to_capabilitiesr   r
   r   r   r   r   r   s   s   
z_ProxyDescriptor.__set__Nr-   r   r   r   r   r<   j   s
    r<   c                	       s   e Zd ZdZedZ	 edZ	 edZ	 edZ	 edZ		 e
dZ	 edZ	 ed	Z	 ed
Z	 edZ	 d fddZedd ZdddZ			ddeje deje deje ddfddZedd Zeedd Z  ZS )BaseOptionsz*Base class for individual browser options.browserVersionplatformNamer   r   r   pageLoadStrategyunhandledPromptBehaviortimeoutsproxyr   returnNc                    s.   t    | j| _d | _| dd d | _d S )NrD   r(   )superr   default_capabilitiesr   r=   r   mobile_optionsr   	__class__r   r   r   [  s
   

zBaseOptions.__init__c                 C      | j S r   r   rL   r   r   r   capabilitiesb  s   zBaseOptions.capabilitiesc                 C   s   || j |< dS )zSets a capability.NrP   )r   r
   r   r   r   r   r   f  s   zBaseOptions.set_capabilityandroid_packageandroid_activitydevice_serialc                 C   s:   |st dd|i| _|r|| jd< |r|| jd< dS dS )zEnables mobile browser use for browsers that support it.

        :Args:
            android_activity: The name of the android package to start
        z!android_package must be passed inandroidPackageandroidActivityandroidDeviceSerialN)AttributeErrorrK   )r   rR   rS   rT   r   r   r   enable_mobilej  s   

zBaseOptions.enable_mobilec                 C      dS )z-Convert options into capabilities dictionary.Nr   rL   r   r   r   r@   }      zBaseOptions.to_capabilitiesc                 C   rZ   )z6Return minimal capabilities necessary as a dictionary.Nr   rL   r   r   r   rJ     r[   z BaseOptions.default_capabilitiesrH   N)NNN)r   r    r!   r.   r   browser_versionplatform_nameaccept_insecure_certsstrict_file_interactabilityset_window_rectr#   page_load_strategyr/   unhandled_prompt_behaviorr3   rF   r<   rG   enable_downloadsr   propertyrQ   r   typingOptionalstrrY   r   r@   rJ   __classcell__r   r   rM   r   rA   z   sV    



rA   )	metaclassc                       sT   e Zd ZdZd fddZedd Zdd	 Zdd
dZdd Z	edd Z
  ZS )
ArgOptionsz Binary Location Must be a StringrH   Nc                    s   t    g | _d| _d S )NF)rI   r   
_arguments_ignore_local_proxyrL   rM   r   r   r     s   

zArgOptions.__init__c                 C   rO   )z5:Returns: A list of arguments needed for the browser.)rl   rL   r   r   r   	arguments  s   zArgOptions.argumentsc                 C   s   |r
| j | dS td)zTAdds an argument to the list.

        :Args:
         - Sets the arguments
        zargument can not be nullN)rl   appendr,   )r   argumentr   r   r   add_argument  s   zArgOptions.add_argumentc                 C   s
   d| _ dS )zaBy calling this you will ignore HTTP_PROXY and HTTPS_PROXY from
        being picked up and used.TN)rm   rL   r   r   r   (ignore_local_proxy_environment_variables  s   
z3ArgOptions.ignore_local_proxy_environment_variablesc                 C   rO   r   rP   rL   r   r   r   r@     r>   zArgOptions.to_capabilitiesc                 C   s   i S r   r   rL   r   r   r   rJ     s   zArgOptions.default_capabilitiesr\   )r   r    r!   BINARY_LOCATION_ERRORr   re   rn   rq   rr   r@   rJ   ri   r   r   rM   r   rk     s    

rk   )rf   abcr   r   selenium.common.exceptionsr   selenium.webdriver.common.proxyr   r   r#   r/   r3   r<   rA   rk   r   r   r   r   <module>   s     