Skip to content

[py] BiDi APIs for python That's too bad #800

Open
@defnngj

Description

@defnngj

🐛 Bug Report

https://www.selenium.dev/documentation/webdriver/bidi_apis/

  • Register Basic Auth

Python(selenium) has no driver.register() --- this is bug?

  • Mutation Observation
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
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;"

Python(selenium) has no dirver.log
How is pages defined?

I tried to modify the code as follows:

import asyncio
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.log import Log
from selenium.webdriver.support import expected_conditions as EC


async def demo():
    driver = webdriver.Chrome()
    session = driver.bidi_connection()
    log = Log(driver, session)

    async with log.mutation_events() as event:
        driver.get("https://www.google.com")
        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;"

asyncio.run(demo())

running error:

Traceback (most recent call last):
  File "D:/github/test-circle/selenium4/code/demo.py", line 25, in <module>
    asyncio.run(demo())
  File "C:\Python38\lib\asyncio\runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "C:\Python38\lib\asyncio\base_events.py", line 616, in run_until_complete
    return future.result()
  File "D:/github/test-circle/selenium4/code/demo.py", line 12, in demo
    log = Log(driver, session)
  File "C:\Python38\lib\site-packages\selenium\webdriver\common\log.py", line 48, in __init__
    self.session = bidi_session.session
AttributeError: '_AsyncGeneratorContextManager' object has no attribute 'session'
Must asyncio be used? Why provide asyncio examples, and incomplete?

Must asyncio be used? Why provide asyncio examples, and incomplete?

To Reproduce

null

Expected behavior

null

Test script or set of commands reproducing this issue

null

Environment

OS: Windows 10
Browser: Chrome
Browser version: selenium 4.0
Browser Driver version: ChromeDriver 2.43,
Language Bindings version: python
Selenium Grid version (if applicable): 4.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    code-pythonFix code example in Python

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions