o
    ѷ6i$                     @   sj   d dl Z d dl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add ZG d	d
 d
ZdS )    N)AsyncGenerator)asynccontextmanager)import_module)Any)Byc                   C   s   t stda d S d S )Nz"selenium.webdriver.common.bidi.cdp)cdpr    r   r   b/var/www/hoanhtaovolam_webdjango/env/lib/python3.10/site-packages/selenium/webdriver/common/log.py
import_cdp   s   r
   c                   @   s   e Zd ZdZdddZedeeee	f df fddZ
edeeee	f df fdd	Zedeeee	f df fd
dZdS )LogzClass for accessing logging APIs using the WebDriver Bidi protocol.

    This class is not to be used directly and should be used from the
    webdriver base classes.
    returnNc                 C   sf   || _ |j| _|j| _|j| _dtdd d }t|d}|d u r)t	d|
d | _d S )N.zmutation-listener.jsz#Failed to load mutation-listener.jsutf8)driversessionr   devtoolsjoin__name__splitpkgutilget_data
ValueErrordecodestrip_mutation_listener_js)selfr   bidi_session_pkg_mutation_listener_js_bytesr   r   r	   __init__+   s   zLog.__init__c              	   C  sl  | j d}|| jj I dH  | j d}|| jj I dH  || jjdI dH  | j	| j
 || jj| j
I dH }| j	| j
| | jd| j
  i }|| jjj4 I dH }|V  W d  I dH  n1 I dH s{w   Y  t|jj}| jtjd|d  d}|s|d |d	 |d
< |d |d< |d |d< |d |d< dS )a8  Listen for mutation events and emit them as they are found.

        Example:
               async with driver.log.mutation_events() as event:
                    pages.load("dynamic.html")
                    driver.find_element(By.ID, "reveal").click()
                    WebDriverWait(driver, 5)                        .until(EC.visibility_of(driver.find_element(By.ID, "revealed")))

                assert event["attribute_name"] == "style"
                assert event["current_value"] == ""
                assert event["old_value"] == "display:none;"
        page.enableNruntime.enable__webdriver_attributezreturn z*[data-__webdriver_id="targetz"]r   elementnameattribute_namevaluecurrent_valueoldValue	old_value)r   get_session_contextexecuter   pageenableruntimeadd_bindingr   
pin_scriptr   &add_script_to_evaluate_on_new_documentexecute_scriptwait_forBindingCalledjsonloadsr(   payloadfind_elementsr   CSS_SELECTORappend)r   r.   r0   
script_keyeventevntr9   elementsr   r   r	   mutation_events7   s0   
(
zLog.mutation_eventsc              	   C  s   | j d}|| jj I dH  | j d}|| jj I dH  | jjdd}|| jjj4 I dH }|V  W d  I dH  n1 I dH sMw   Y  |j	j
|_
|j	j|_dS )a  Listen for JS errors and check if they occurred when the context manager exits.

        Example:
                async with driver.log.add_js_error_listener() as error:
                    driver.find_element(By.ID, "throwing-mouseover").click()
                assert bool(error)
                assert error.exception_details.stack_trace.call_frames[0].function_name == "onmouseover"
        r!   Nr"   )r   r,   r-   r   r.   r/   r0   ExceptionThrownr5   r(   	timestampexception_details)r   r   js_exception	exceptionr   r   r	   add_js_error_listener_   s   
(
zLog.add_js_error_listenerc              	   C  s   ddl m} | jd}|| jj I dH  | jd}|| jj I dH  ddd}|	| jjj
4 I dH }|V  W d  I dH  n1 I dH sPw   Y  ||jksa|j|jjkru|jjd j|d< |jjd j|d< dS dS )	ao  Listen for certain events that are passed in.

        Args:
            event_type: The type of event that we want to look at.

        Example:
                async with driver.log.add_listener(Console.log) as messages:
                    driver.execute_script("console.log('I like cheese')")
                assert messages["message"] == "I love cheese"
        r   )Consoler!   Nr"   )messagelevelrI   rJ   )&selenium.webdriver.common.bidi.consolerH   r   r,   r-   r   r.   r/   r0   r5   ConsoleAPICalledALLr(   type_args)r   
event_typerH   r   consolemessagesr   r   r	   add_listeners   s   
(zLog.add_listener)r   N)r   
__module____qualname____doc__r    r   r   dictstrr   rA   rG   rS   r   r   r   r	   r   $   s    
 ' $r   )r7   r   collections.abcr   
contextlibr   	importlibr   typingr   selenium.webdriver.common.byr   r   r
   r   r   r   r   r	   <module>   s   