diff --git a/examples/python/tests/support/test_listener.py b/examples/python/tests/support/test_listener.py index 53b695b6fc83..4e5813b3eb30 100644 --- a/examples/python/tests/support/test_listener.py +++ b/examples/python/tests/support/test_listener.py @@ -1,2 +1,158 @@ from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.support.events import EventFiringWebDriver, AbstractEventListener + +class MyListener(AbstractEventListener): + def __init__(self): + self.events = [] + + def before_navigate_to(self, url: str, driver) -> None: + print(f"before_navigate_to: {url}") + self.events.append(f"before_navigate_to") + + def after_navigate_to(self, url: str, driver) -> None: + print(f"after_navigate_to: {url}") + self.events.append(f"after_navigate_to") + + def before_navigate_back(self, driver) -> None: + print("before_navigate_back") + self.events.append("before_navigate_back") + + def after_navigate_back(self, driver) -> None: + print("after_navigate_back") + self.events.append("after_navigate_back") + + def before_navigate_forward(self, driver) -> None: + print("before_navigate_forward") + self.events.append("before_navigate_forward") + + def after_navigate_forward(self, driver) -> None: + print("after_navigate_forward") + self.events.append("after_navigate_forward") + + def before_close(self, driver) -> None: + print("before_close") + self.events.append("before_close") + + def after_close(self, driver) -> None: + print("after_close") + self.events.append("after_close") + + def before_quit(self, driver) -> None: + print("before_quit") + self.events.append("before_quit") + + def after_quit(self, driver) -> None: + print("after_quit") + self.events.append("after_quit") + + def before_find(self, by, value, driver) -> None: + print("before_find") + self.events.append("before_find") + + def after_find(self, by, value, driver) -> None: + print("after_find") + self.events.append("after_find") + + def before_click(self, element, driver) -> None: + print("before_click") + self.events.append("before_click") + + def after_click(self, element, driver) -> None: + print("after_click") + self.events.append("after_click") + + def before_change_value_of(self, element, driver) -> None: + print("before_change_value") + self.events.append("before_change_value") + + def after_change_value_of(self, element, driver) -> None: + print("after_change_value") + self.events.append("after_change_value") + + def before_execute_script(self, script, driver) -> None: + print("before_execute_script") + self.events.append("before_execute_script") + + def after_execute_script(self, script, driver) -> None: + print("after_execute_script") + self.events.append("after_execute_script") + + def on_exception(self, exception, driver) -> None: + print("on_exception") + self.events.append("on_exception") + +def test_navigate_and_quit(): + driver = webdriver.Chrome() + listener = MyListener() + event_driver = EventFiringWebDriver(driver, listener) + event_driver.get("https://www.selenium.dev/selenium/web/") + event_driver.get("https://www.selenium.dev/selenium/web/clicks.html") + event_driver.back() + event_driver.forward() + event_driver.quit() + print(listener.events) + + assert "before_navigate_to" in listener.events + assert "after_navigate_to" in listener.events + assert "before_navigate_back" in listener.events + assert "after_navigate_back" in listener.events + assert "before_navigate_forward" in listener.events + assert "after_navigate_forward" in listener.events + assert "before_quit" in listener.events + assert "after_quit" in listener.events + +def test_find_and_click_and_close(): + driver = webdriver.Chrome() + listener = MyListener() + event_driver = EventFiringWebDriver(driver, listener) + event_driver.get("https://www.selenium.dev/selenium/web/clicks.html") + element = event_driver.find_element(By.ID, "new-window") + + assert 'before_find' in listener.events + assert 'after_find' in listener.events + + element.click() + + assert 'before_click' in listener.events + assert 'after_click' in listener.events + + event_driver.switch_to.window(event_driver.window_handles[-1]) + event_driver.close() + + assert 'before_close' in listener.events + + event_driver.switch_to.window(event_driver.window_handles[0]) + print(listener.events) + +def test_change_value(): + driver = webdriver.Chrome() + listener = MyListener() + event_driver = EventFiringWebDriver(driver, listener) + event_driver.get("https://www.selenium.dev/selenium/web/inputs.html") + element = event_driver.find_element(By.NAME, "no_type") + print(listener.events) + element.clear() + + assert 'before_change_value' in listener.events + assert 'after_change_value' in listener.events + +def test_execute_script_and_exception(): + driver = webdriver.Chrome() + listener = MyListener() + event_driver = EventFiringWebDriver(driver, listener) + urls = ["https://www.selenium.dev/selenium/web/", + "https://www.selenium.dev/selenium/web/inputs.html"] + for url in urls: + event_driver.get(url) + try: + element = event_driver.find_element(By.NAME, "no_type") + print(listener.events) + event_driver.execute_script("arguments[0].value = 'test'", element) + except Exception as e: + print(f"Exception: {e}") + continue + + assert 'before_execute_script' in listener.events + assert 'after_execute_script' in listener.events diff --git a/website_and_docs/content/documentation/webdriver/support_features/listeners.en.md b/website_and_docs/content/documentation/webdriver/support_features/listeners.en.md index cfecbd7cb65f..6619c864d34b 100644 --- a/website_and_docs/content/documentation/webdriver/support_features/listeners.en.md +++ b/website_and_docs/content/documentation/webdriver/support_features/listeners.en.md @@ -7,14 +7,45 @@ aliases: [ ] --- -These allow you to execute custom actions in every time specific Selenium commands are sent +These allow you to execute custom actions in every time specific Selenium commands are sent. + + +## Define + +A custom Listener needs to inherit from AbstractEventListener in Selenium and override the methods in AbstractEventListener. +Here’s a simple example to print and log events: {{< tabpane text=true >}} {{< tab header="Java" >}} {{< badge-code >}} {{< /tab >}} {{% tab header="Python" %}} +{{< gh-codeblock path="examples/python/tests/support/test_listener.py#L1-L33" >}} +{{% /tab %}} +{{< tab header="CSharp" >}} {{< badge-code >}} +{{< /tab >}} +{{< tab header="Ruby" >}} +{{< badge-code >}} +{{< /tab >}} +{{< tab header="JavaScript" >}} +{{< badge-code >}} +{{< /tab >}} +{{< tab header="Kotlin" >}} +{{< badge-code >}} +{{< /tab >}} +{{< /tabpane >}} + +## Usage + +Create an event listener driver through EventFiringWebDriver: + +{{< tabpane text=true >}} +{{< tab header="Java" >}} +{{< badge-code >}} +{{< /tab >}} +{{% tab header="Python" %}} +{{< gh-codeblock path="examples/python/tests/support/test_listener.py#L87-L96" >}} {{% /tab %}} {{< tab header="CSharp" >}} {{< badge-code >}} @@ -29,3 +60,4 @@ These allow you to execute custom actions in every time specific Selenium comman {{< badge-code >}} {{< /tab >}} {{< /tabpane >}} + diff --git a/website_and_docs/content/documentation/webdriver/support_features/listeners.ja.md b/website_and_docs/content/documentation/webdriver/support_features/listeners.ja.md index 09714561af9a..34db4e3093e5 100644 --- a/website_and_docs/content/documentation/webdriver/support_features/listeners.ja.md +++ b/website_and_docs/content/documentation/webdriver/support_features/listeners.ja.md @@ -1,20 +1,51 @@ --- -title: "Command Listeners" -linkTitle: "Listeners" +title: "コマンドリスナー" +linkTitle: "リスナー" weight: 2 aliases: [ - "/ja/documentation/webdriver/drivers/listeners", + "/documentation/webdriver/drivers/listeners", ] --- -These allow you to execute custom actions in every time specific Selenium commands are sent +これにより、特定のSeleniumコマンドが送信されるたびにカスタムアクションを実行することができます。 + + +## 定義 + +カスタムリスナーは、SeleniumのAbstractEventListenerを継承し、AbstractEventListenerのメソッドをオーバーライドする必要があります。 +イベントを印刷してログに記録するための簡単な例を示します: {{< tabpane text=true >}} {{< tab header="Java" >}} {{< badge-code >}} {{< /tab >}} {{% tab header="Python" %}} +{{< gh-codeblock path="examples/python/tests/support/test_listener.py#L1-L33" >}} +{{% /tab %}} +{{< tab header="CSharp" >}} {{< badge-code >}} +{{< /tab >}} +{{< tab header="Ruby" >}} +{{< badge-code >}} +{{< /tab >}} +{{< tab header="JavaScript" >}} +{{< badge-code >}} +{{< /tab >}} +{{< tab header="Kotlin" >}} +{{< badge-code >}} +{{< /tab >}} +{{< /tabpane >}} + +## 使用(しよう) + +EventFiringWebDriverを使ってイベントリスナードライバーを作成する: + +{{< tabpane text=true >}} +{{< tab header="Java" >}} +{{< badge-code >}} +{{< /tab >}} +{{% tab header="Python" %}} +{{< gh-codeblock path="examples/python/tests/support/test_listener.py#L87-L96" >}} {{% /tab %}} {{< tab header="CSharp" >}} {{< badge-code >}} @@ -29,3 +60,4 @@ These allow you to execute custom actions in every time specific Selenium comman {{< badge-code >}} {{< /tab >}} {{< /tabpane >}} + diff --git a/website_and_docs/content/documentation/webdriver/support_features/listeners.pt-br.md b/website_and_docs/content/documentation/webdriver/support_features/listeners.pt-br.md index d23c1655dc57..cae0cc570fe4 100644 --- a/website_and_docs/content/documentation/webdriver/support_features/listeners.pt-br.md +++ b/website_and_docs/content/documentation/webdriver/support_features/listeners.pt-br.md @@ -1,20 +1,51 @@ --- -title: "Command Listeners" -linkTitle: "Listeners" +title: "Ouvintes de Comando" +linkTitle: "Ouvintes" weight: 2 aliases: [ - "/pt-br/documentation/webdriver/drivers/listeners", + "/documentation/webdriver/drivers/listeners", ] --- -These allow you to execute custom actions in every time specific Selenium commands are sent +isso permite que você execute ações personalizadas sempre que comandos específicos do Selenium são enviados. + + +## Definir + +Um Listener personalizado precisa herdar de AbstractEventListener no Selenium e sobrescrever os métodos em AbstractEventListener. +Aqui está um exemplo simples para imprimir e registrar eventos: {{< tabpane text=true >}} {{< tab header="Java" >}} {{< badge-code >}} {{< /tab >}} {{% tab header="Python" %}} +{{< gh-codeblock path="examples/python/tests/support/test_listener.py#L1-L33" >}} +{{% /tab %}} +{{< tab header="CSharp" >}} {{< badge-code >}} +{{< /tab >}} +{{< tab header="Ruby" >}} +{{< badge-code >}} +{{< /tab >}} +{{< tab header="JavaScript" >}} +{{< badge-code >}} +{{< /tab >}} +{{< tab header="Kotlin" >}} +{{< badge-code >}} +{{< /tab >}} +{{< /tabpane >}} + +## Uso + +Crie um driver de ouvinte de eventos através do EventFiringWebDriver: + +{{< tabpane text=true >}} +{{< tab header="Java" >}} +{{< badge-code >}} +{{< /tab >}} +{{% tab header="Python" %}} +{{< gh-codeblock path="examples/python/tests/support/test_listener.py#L87-L96" >}} {{% /tab %}} {{< tab header="CSharp" >}} {{< badge-code >}} @@ -29,3 +60,4 @@ These allow you to execute custom actions in every time specific Selenium comman {{< badge-code >}} {{< /tab >}} {{< /tabpane >}} + diff --git a/website_and_docs/content/documentation/webdriver/support_features/listeners.zh-cn.md b/website_and_docs/content/documentation/webdriver/support_features/listeners.zh-cn.md index 015b9e9afb76..e43b228b9359 100644 --- a/website_and_docs/content/documentation/webdriver/support_features/listeners.zh-cn.md +++ b/website_and_docs/content/documentation/webdriver/support_features/listeners.zh-cn.md @@ -9,12 +9,42 @@ aliases: [ 允许您在每次发送特定 Selenium 命令时执行自定义操作 +## 定义 + +自定义的Listener需要继承selenium中的AbstractEventListener同时重写AbstractEventListener中的方法. +有一个简单打印和记录事件的例子: + {{< tabpane text=true >}} {{< tab header="Java" >}} {{< badge-code >}} {{< /tab >}} {{% tab header="Python" %}} +{{< gh-codeblock path="examples/python/tests/support/test_listener.py#L1-L33" >}} +{{% /tab %}} +{{< tab header="CSharp" >}} +{{< badge-code >}} +{{< /tab >}} +{{< tab header="Ruby" >}} +{{< badge-code >}} +{{< /tab >}} +{{< tab header="JavaScript" >}} {{< badge-code >}} +{{< /tab >}} +{{< tab header="Kotlin" >}} +{{< badge-code >}} +{{< /tab >}} +{{< /tabpane >}} + +## 使用 + +通过EventFiringWebDriver创建监听事件driver: + +{{< tabpane text=true >}} +{{< tab header="Java" >}} +{{< badge-code >}} +{{< /tab >}} +{{% tab header="Python" %}} +{{< gh-codeblock path="examples/python/tests/support/test_listener.py#L87-L96" >}} {{% /tab %}} {{< tab header="CSharp" >}} {{< badge-code >}}