From 600cd0262cc9cabc04e4a92c05274503b0a9a69e Mon Sep 17 00:00:00 2001 From: Dor-bl <59066376+Dor-bl@users.noreply.github.com> Date: Sun, 13 Sep 2026 21:38:14 +0000 Subject: [PATCH 1/4] refactor: move element commands to WebElement Move element-specific command bindings (CLEAR, LOCATION_IN_VIEW, and IS_ELEMENT_DISPLAYED) from WebDriver to WebElement class. Commands are registered on the parent driver's command_executor when a WebElement is initialized. --- appium/webdriver/webdriver.py | 11 ----------- appium/webdriver/webelement.py | 18 ++++++++++++++++++ test/unit/webdriver/webelement_test.py | 12 ++++++++++++ 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/appium/webdriver/webdriver.py b/appium/webdriver/webdriver.py index 09d17094..14adc1cc 100644 --- a/appium/webdriver/webdriver.py +++ b/appium/webdriver/webdriver.py @@ -474,17 +474,6 @@ def _add_commands(self) -> None: get_atter(self) self.command_executor.add_command(Command.GET_STATUS, 'GET', '/status') - - # TODO Move commands for element to webelement - self.command_executor.add_command(Command.CLEAR, 'POST', '/session/$sessionId/element/$id/clear') - self.command_executor.add_command( - Command.LOCATION_IN_VIEW, - 'GET', - '/session/$sessionId/element/$id/location_in_view', - ) - - # MJSONWP for Selenium v4 - self.command_executor.add_command(Command.IS_ELEMENT_DISPLAYED, 'GET', '/session/$sessionId/element/$id/displayed') self.command_executor.add_command(Command.GET_CAPABILITIES, 'GET', '/session/$sessionId') self.command_executor.add_command(Command.GET_SCREEN_ORIENTATION, 'GET', '/session/$sessionId/orientation') diff --git a/appium/webdriver/webelement.py b/appium/webdriver/webelement.py index 8494af13..853639c5 100644 --- a/appium/webdriver/webelement.py +++ b/appium/webdriver/webelement.py @@ -17,6 +17,7 @@ from selenium.webdriver.common.utils import keys_to_typing from selenium.webdriver.remote.command import Command as RemoteCommand +from selenium.webdriver.remote.webdriver import WebDriver as Remote from selenium.webdriver.remote.webelement import WebElement as SeleniumWebElement from typing_extensions import Self @@ -35,6 +36,23 @@ def find_element(self, by: str, value: str | dict | None = None) -> Self: # typ def find_elements(self, by: str, value: str | dict | None = None) -> list[Self]: # type: ignore[override] ... + def __init__(self, parent: Remote, id_: int | str) -> None: + super().__init__(parent, id_) # type: ignore[arg-type] + self._add_commands() + + def _add_commands(self) -> None: + self._parent.command_executor.add_command(Command.CLEAR, 'POST', '/session/$sessionId/element/$id/clear') + self._parent.command_executor.add_command( + Command.LOCATION_IN_VIEW, + 'GET', + '/session/$sessionId/element/$id/location_in_view', + ) + self._parent.command_executor.add_command( + Command.IS_ELEMENT_DISPLAYED, + 'GET', + '/session/$sessionId/element/$id/displayed', + ) + def get_attribute(self, name: str) -> str | dict | None: # type: ignore[override] """Gets the given attribute or property of the element. diff --git a/test/unit/webdriver/webelement_test.py b/test/unit/webdriver/webelement_test.py index a37c2ec6..bbd23de9 100644 --- a/test/unit/webdriver/webelement_test.py +++ b/test/unit/webdriver/webelement_test.py @@ -101,3 +101,15 @@ def test_element_location_in_view(self): httpretty.last_request() assert loc == location_in_view + + @httpretty.activate + def test_is_displayed(self): + driver = android_w3c_driver() + httpretty.register_uri( + httpretty.GET, + appium_command('/session/1234567890/element/element_id/displayed'), + body=json.dumps({'value': True}), + ) + + element = MobileWebElement(driver, 'element_id') + assert element.is_displayed() is True From 3378b6383e6fb39629dcc9cf717c0155cc852d41 Mon Sep 17 00:00:00 2001 From: Dor-bl <59066376+Dor-bl@users.noreply.github.com> Date: Sun, 13 Sep 2026 22:35:07 +0000 Subject: [PATCH 2/4] refactor: move element commands to WebElement Move element-specific command bindings (CLEAR, LOCATION_IN_VIEW, and IS_ELEMENT_DISPLAYED) from WebDriver to WebElement class. Commands are registered on the parent driver's command_executor when a WebElement is initialized. From 0cb773bd9013557946c9ed6ed0e33e516c92f748 Mon Sep 17 00:00:00 2001 From: Dor-bl <59066376+Dor-bl@users.noreply.github.com> Date: Sun, 13 Sep 2026 23:26:47 +0000 Subject: [PATCH 3/4] refactor: move element commands to WebElement Move element-specific command bindings (CLEAR, LOCATION_IN_VIEW, and IS_ELEMENT_DISPLAYED) from WebDriver to WebElement class. Commands are registered on the parent driver's command_executor when a WebElement is initialized. From 8d9d07d29c55a6b19513e92433605e23c73a44b6 Mon Sep 17 00:00:00 2001 From: Dor-bl <59066376+Dor-bl@users.noreply.github.com> Date: Mon, 14 Sep 2026 00:00:54 +0000 Subject: [PATCH 4/4] refactor: move element commands to WebElement Move element-specific command bindings (CLEAR, LOCATION_IN_VIEW, and IS_ELEMENT_DISPLAYED) from WebDriver to WebElement class. Commands are registered on the parent driver's command_executor when a WebElement is initialized.