PyCharm type hinting does not work when I pass selenium driver as an argument

Viewed 890

In one class I initialize a browser using selenium.webdriver and I want to use the same already opened browser in a different class. So I want to pass this webdriver as an argument to the function in that other class. However, no matter what I try, PyCharm is not giving me any hint about available methods of this webdriver object, even if I give it a hint that it is indeed a webdriver from selenium. How can I solve this properly? I know that I can initialize a webdriver and after end of work on that class i could remove it but this is not the right solution I guess.

My code:

from emails import FormalEmailInterface
from selenium import webdriver


class EmailTest(FormalEmailInterface):

    def __init__(self, driver: webdriver, url: str):
        self.driver = driver
        self.url = url

    """"Get temporary email address"""
    def get_temp_email(self):
        # self.driver. <-- NO HINTS HERE!!!
        print(type(self.driver))
        pass

Screen 1 - no hinting when webdriver comes from argument: No hinting when object passed

Screen 2 - properly hinting when webdriver comes straight from import: Properly hinting when initalized

2 Answers

My solution is import specific webdriver like Chrome object and set type in drive self.driver: Chrome, now we have webelement method

from emails import FormalEmailInterface
from selenium import webdriver
from selenium.webdriver import Chrome


class EmailTest(FormalEmailInterface):

    def __init__(self, driver: webdriver, url: str):
        self.driver: Chrome = driver
        self.url = url

    """"Get temporary email address"""
    def get_temp_email(self):
        self.driver.
        print(type(self.driver))
        pass

Either of these options should do the trick:

from selenium.webdriver.remote.webdriver import WebDriver

class EmailTest(FormalEmailInterface):
    def __init__(self, driver: WebDriver, url: str):
        self.driver: WebDriver = driver
from typing import Union
from selenium import webdriver

typeWebDriver = Union[webdriver.Firefox,
                      webdriver.Chrome,
                      webdriver.Edge,
                      webdriver.Safari,
                      webdriver.PhantomJS
                      ]

class EmailTest(FormalEmailInterface):
    def __init__(self, driver: typeWebDriver, url: str):
        self.driver: typeWebDriver = driver
Related