o
    \h                      @   sh   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	 d dl
mZ d dlmZ G dd	 d	eZd
S )    )Optional)ChromiumRemoteConnection)DriverFinder)
ArgOptions)Service)Command)	WebDriverc                       s4  e Zd ZdZdde ddfdee dee dedee ded	df fd
dZ	dd Z
dd Zd3ddZd3ddZdeded	dfddZdedef fddZd	efddZdd Zed d! Zd"d# Zd$ed	efd%d&Zd$ed	efd'd(Zd$ed	efd)d*Zd$ed	efd+d,Zd3 fd-d.Zd/d0 Zd1d2 Z  ZS )4ChromiumDriverzZControls the WebDriver instance of ChromiumDriver and allows you to
    drive the browser.NTbrowser_namevendor_prefixoptionsservice
keep_alivereturnc                    s   || _ t| j |}| r| |_d|_| j  p| | j _| j   t	| j j
||||jd}z
t j||d W n tyG   |    w d| _dS )aU  Creates a new WebDriver instance of the ChromiumDriver. Starts the
        service and then creates new WebDriver instance of ChromiumDriver.

        :Args:
         - browser_name - Browser name used when matching capabilities.
         - vendor_prefix - Company prefix to apply to vendor-specific WebDriver extension commands.
         - options - this takes an instance of ChromiumOptions
         - service - Service object for handling the browser driver if you need to pass extra details
         - keep_alive - Whether to configure ChromiumRemoteConnection to use HTTP keep-alive.
        N)remote_server_addrr
   r   r   ignore_proxy)command_executorr   F)r   r   get_browser_pathbinary_locationbrowser_versionenv_pathget_driver_pathpathstartr   service_url_ignore_local_proxysuper__init__	Exceptionquit
_is_remote)selfr
   r   r   r   r   finderexecutor	__class__ h/home/air/segue/gemini/backup/venv/lib/python3.10/site-packages/selenium/webdriver/chromium/webdriver.pyr       s*   


zChromiumDriver.__init__c                 C      |  dd|iS )z&Launches Chromium app specified by id.	launchAppidexecute)r!   r*   r&   r&   r'   
launch_appL   s   zChromiumDriver.launch_appc                 C      |  dd S )zGets Chromium network emulation settings.

        :Returns:
            A dict.
            For example:     {'latency': 4, 'download_throughput': 2, 'upload_throughput': 2, 'offline': False}
        getNetworkConditionsvaluer+   r!   r&   r&   r'   get_network_conditionsP   s   z%ChromiumDriver.get_network_conditionsc                 K   s   |  dd|i dS )a+  Sets Chromium network emulation settings.

        :Args:
         - network_conditions: A dict with conditions specification.

        :Usage:
            ::

                driver.set_network_conditions(
                    offline=False,
                    latency=5,  # additional latency (ms)
                    download_throughput=500 * 1024,  # maximal throughput
                    upload_throughput=500 * 1024,
                )  # maximal throughput

            Note: 'throughput' can be used to set both (for download and upload).
        setNetworkConditionsnetwork_conditionsNr+   )r!   r4   r&   r&   r'   set_network_conditionsY   s   z%ChromiumDriver.set_network_conditionsc                 C   s   |  d dS )z+Resets Chromium network emulation settings.deleteNetworkConditionsNr+   r1   r&   r&   r'   delete_network_conditionsm      z(ChromiumDriver.delete_network_conditionsnamer0   c                 C   s   |  dd|i|d dS )zSets Applicable Permission.

        :Args:
         - name: The item to set the permission on.
         - value: The value to set on the item

        :Usage:
            ::

                driver.set_permissions("clipboard-read", "denied")
        setPermissionsr9   )
descriptorstateNr+   )r!   r9   r0   r&   r&   r'   set_permissionsq   s   zChromiumDriver.set_permissionscmdcmd_argsc                    s   t  ||S )a  Execute Chrome Devtools Protocol command and get returned result The
        command and command args should follow chrome devtools protocol
        domains/commands, refer to link
        https://chromedevtools.github.io/devtools-protocol/

        :Args:
         - cmd: A str, command name
         - cmd_args: A dict, command args. empty dict {} if there is no command args
        :Usage:
            ::

                driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': requestId})
        :Returns:
            A dict, empty dict {} if there is no result to return.
            For example to getResponseBody:
            {'base64Encoded': False, 'body': 'response body string'}
        )r   execute_cdp_cmd)r!   r>   r?   r$   r&   r'   r@      s   zChromiumDriver.execute_cdp_cmdc                 C   r.   )z-:Returns: A list of sinks available for Cast.getSinksr0   r+   r1   r&   r&   r'   	get_sinks   r8   zChromiumDriver.get_sinksc                 C   r.   )zM:Returns: An error message when there is any issue in a Cast
        session.getIssueMessager0   r+   r1   r&   r&   r'   get_issue_message   s   z ChromiumDriver.get_issue_messagec                 C   s   |  tjd S )zpGets a list of the available log types.

        Example:
        --------
        >>> driver.log_types
        r0   )r,   r   GET_AVAILABLE_LOG_TYPESr1   r&   r&   r'   	log_types   s   zChromiumDriver.log_typesc                 C   s   |  tjd|id S )aY  Gets the log for a given log type.

        Parameters:
        -----------
        log_type : str
            - Type of log that which will be returned

        Example:
        --------
        >>> driver.get_log("browser")
        >>> driver.get_log("driver")
        >>> driver.get_log("client")
        >>> driver.get_log("server")
        typer0   )r,   r   GET_LOG)r!   log_typer&   r&   r'   get_log   s   zChromiumDriver.get_log	sink_namec                 C   r(   )zSets a specific sink, using its name, as a Cast session receiver
        target.

        :Args:
         - sink_name: Name of the sink to use as the target.
        setSinkToUsesinkNamer+   r!   rK   r&   r&   r'   set_sink_to_use   s   zChromiumDriver.set_sink_to_usec                 C   r(   )zStarts a desktop mirroring session on a specific receiver target.

        :Args:
         - sink_name: Name of the sink to use as the target.
        startDesktopMirroringrM   r+   rN   r&   r&   r'   start_desktop_mirroring      z&ChromiumDriver.start_desktop_mirroringc                 C   r(   )zStarts a tab mirroring session on a specific receiver target.

        :Args:
         - sink_name: Name of the sink to use as the target.
        startTabMirroringrM   r+   rN   r&   r&   r'   start_tab_mirroring   rR   z"ChromiumDriver.start_tab_mirroringc                 C   r(   )zStops the existing Cast session on a specific receiver target.

        :Args:
         - sink_name: Name of the sink to stop the Cast session.
        stopCastingrM   r+   rN   r&   r&   r'   stop_casting   rR   zChromiumDriver.stop_castingc                    sP   z!zt    W n	 ty   Y n	w W | j  dS W | j  dS | j  w )z@Closes the browser and shuts down the ChromiumDriver executable.N)r   r   r   r   stopr1   r$   r&   r'   r      s   zChromiumDriver.quitc                 O      t NNotImplementedErrorr!   argskwargsr&   r&   r'   download_file      zChromiumDriver.download_filec                 O   rX   rY   rZ   r\   r&   r&   r'   get_downloadable_files   r`   z%ChromiumDriver.get_downloadable_files)r   N)__name__
__module____qualname____doc__r   r   strr   boolr   r-   r2   r5   r7   r=   dictr@   listrB   rD   propertyrF   rJ   rO   rQ   rT   rV   r   r_   ra   __classcell__r&   r&   r$   r'   r	      sL    ,
	

		
r	   N)typingr   -selenium.webdriver.chromium.remote_connectionr   'selenium.webdriver.common.driver_finderr   !selenium.webdriver.common.optionsr   !selenium.webdriver.common.servicer   !selenium.webdriver.remote.commandr   #selenium.webdriver.remote.webdriverr   RemoteWebDriverr	   r&   r&   r&   r'   <module>   s   