Open
Description
Description
Issue
The typing on find_element
and find_elements
specify that a selenium.webdriver.remote.webelement.WebElement
is returned. This means if another project returns a custom WebElement, the typing for that WebElement is not carried through.
For example, in the Appium project, the create_web_element
method of Selenium's webdriver.Remote
class is overridden and typed to return an appium.webdriver.webelement.WebElement
object. This override is not carried through, so mypy
complains with:
error: Incompatible return value type (got "selenium.webdriver.remote.webelement.WebElement", expected "appium.webdriver.webelement.WebElement") [return-value]
error: Incompatible return value type (got "list[selenium.webdriver.remote.webelement.WebElement]", expected "list[appium.webdriver.webelement.WebElement]") [return-value]
Requested fix
Please add typing to match the value of create_web_element
for the places that currently use selenium.webdriver.remote.webelement.WebElement
!
Reproducible Code
# no need to actually run this code, just send it through MyPy to see the error.
from appium.webdriver.common.appiumby import AppiumBy
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from appium.webdriver import Remote
from appium.webdriver.webelement import WebElement
def find_element(driver: Remote) -> WebElement:
# should get a mypy error on next line
return driver.find_element(AppiumBy.ACCESSIBILITY_ID, "demo button")
def find_elements(driver: Remote) -> WebElement:
# should get a mypy error on next line
return driver.find_elements(AppiumBy.ACCESSIBILITY_ID, "demo confetti")
Debugging Logs
mypy .
screenpy_appium/target.py:89: error: Incompatible return value type (got "selenium.webdriver.remote.webelement.WebElement", expected "appium.webdriver.webelement.WebElement") [return-value]
screenpy_appium/target.py:98: error: Incompatible return value type (got "list[selenium.webdriver.remote.webelement.WebElement]", expected "list[appium.webdriver.webelement.WebElement]") [return-value]
Found 2 errors in 1 file (checked 35 source files)