U
    Of                     @   sP   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 )	    )ChromiumRemoteConnection)DriverFinder)
ArgOptions)Service)	WebDriverc                       s   e Zd ZdZdde ddfeeeeedd fddZdd Z	d	d
 Z
ddddZddddZeeddddZeedddZedddZdd ZeedddZeedddZeeddd Zeedd!d"Zdd fd#d$Z  ZS )%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 _| j   t| j j	||||j
d}zt j||d W n tk
r   |    Y nX 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)Zremote_server_addrr   r	   r   Zignore_proxy)Zcommand_executorr
   F)r   r   Zget_browser_pathZbinary_locationZbrowser_versionZget_driver_pathpathstartr   Zservice_urlZ_ignore_local_proxysuper__init__	ExceptionquitZ
_is_remote)selfr   r	   r
   r   r   finderexecutor	__class__ I/tmp/pip-unpacked-wheel-ds5t_0qj/selenium/webdriver/chromium/webdriver.pyr      s(    

zChromiumDriver.__init__c                 C   s   |  dd|iS )z&Launches Chromium app specified by id.Z	launchAppidexecute)r   r   r   r   r   
launch_appI   s    zChromiumDriver.launch_appc                 C   s   |  dd S )zGets Chromium network emulation settings.

        :Returns:     A dict. For example:     {'latency': 4,
        'download_throughput': 2, 'upload_throughput': 2,     'offline':
        False}
        ZgetNetworkConditionsvaluer   r   r   r   r   get_network_conditionsM   s    z%ChromiumDriver.get_network_conditions)r   c                 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).
        ZsetNetworkConditionsnetwork_conditionsNr   )r   r"   r   r   r   set_network_conditionsV   s    z%ChromiumDriver.set_network_conditionsc                 C   s   |  d dS )z+Resets Chromium network emulation settings.ZdeleteNetworkConditionsNr   r    r   r   r   delete_network_conditionsi   s    z(ChromiumDriver.delete_network_conditions)namer   r   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')
        ZsetPermissionsr%   )Z
descriptorstateNr   )r   r%   r   r   r   r   set_permissionsm   s    zChromiumDriver.set_permissions)cmdcmd_argsc                 C   s   |  d||dd 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'}
        ZexecuteCdpCommand)r(   paramsr   r   )r   r(   r)   r   r   r   execute_cdp_cmd{   s    zChromiumDriver.execute_cdp_cmdc                 C   s   |  dd S )z-:Returns: A list of sinks available for Cast.ZgetSinksr   r   r    r   r   r   	get_sinks   s    zChromiumDriver.get_sinksc                 C   s   |  dd S )zM:Returns: An error message when there is any issue in a Cast
        session.ZgetIssueMessager   r   r    r   r   r   get_issue_message   s    z ChromiumDriver.get_issue_message)	sink_namer   c                 C   s   |  dd|iS )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.
        ZsetSinkToUsesinkNamer   r   r.   r   r   r   set_sink_to_use   s    zChromiumDriver.set_sink_to_usec                 C   s   |  dd|iS )zStarts a desktop mirroring session on a specific receiver target.

        :Args:
         - sink_name: Name of the sink to use as the target.
        ZstartDesktopMirroringr/   r   r0   r   r   r   start_desktop_mirroring   s    z&ChromiumDriver.start_desktop_mirroringc                 C   s   |  dd|iS )zStarts a tab mirroring session on a specific receiver target.

        :Args:
         - sink_name: Name of the sink to use as the target.
        ZstartTabMirroringr/   r   r0   r   r   r   start_tab_mirroring   s    z"ChromiumDriver.start_tab_mirroringc                 C   s   |  dd|iS )zStops the existing Cast session on a specific receiver target.

        :Args:
         - sink_name: Name of the sink to stop the Cast session.
        ZstopCastingr/   r   r0   r   r   r   stop_casting   s    zChromiumDriver.stop_castingc                    s:   z(zt   W n tk
r$   Y nX W 5 | j   X dS )z@Closes the browser and shuts down the ChromiumDriver executable.N)r   stopr   r   r   r    r   r   r   r      s
    
zChromiumDriver.quit)__name__
__module____qualname____doc__r   strr   boolr   r   r!   r#   r$   r'   dictr+   listr,   r-   r1   r2   r3   r4   r   __classcell__r   r   r   r   r      s6   ,		r   N)Z-selenium.webdriver.chromium.remote_connectionr   Z'selenium.webdriver.common.driver_finderr   Z!selenium.webdriver.common.optionsr   Z!selenium.webdriver.common.servicer   Z#selenium.webdriver.remote.webdriverr   ZRemoteWebDriverr   r   r   r   r   <module>   s
   