Selenium webdrivers 的类型提示

问题描述 投票:0回答:2

在一个类中,我使用 selenium.webdriver 初始化浏览器,并且我想在不同的类中使用相同的已打开的浏览器。所以我想将此网络驱动程序作为参数传递给另一个类中的函数。 然而,无论我如何尝试,PyCharm 都没有给我任何有关此 webdriver 对象的可用方法的提示,即使我提示它确实是来自 selenium 的 webdriver。 我怎样才能正确解决这个问题?我知道我可以初始化一个网络驱动程序,并且在该类的工作结束后我可以将其删除,但这不是我认为正确的解决方案。

我的代码:

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

屏幕 1 - 当 webdriver 来自参数时没有提示: No hinting when object passed

屏幕 2 - 当 webdriver 直接来自导入时正确提示: Properly hinting when initalized

python selenium-webdriver pycharm python-typing
2个回答
3
投票

这些选项中的任何一个都可以解决问题:

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

2
投票

我的解决方案是导入特定的网络驱动程序,例如Chrome对象,并在驱动器self.driver中设置类型:Chrome,现在我们有webelement方法

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
© www.soinside.com 2019 - 2024. All rights reserved.