【问题标题】:PyCharm type hinting does not work when I pass selenium driver as an argument当我将 selenium 驱动程序作为参数传递时,PyCharm 类型提示不起作用
【发布时间】:2020-07-24 22:07:20
【问题描述】:

在一个类中,我使用 selenium.webdriver 初始化了一个浏览器,并且我想在另一个类中使用同一个已经打开的浏览器。所以我想将此 webdriver 作为参数传递给其他类中的函数。 但是,无论我尝试什么,PyCharm 都没有给我任何关于这个 webdriver 对象的可用方法的提示,即使我给它一个暗示它确实是一个来自 selenium 的 webdriver。 我该如何正确解决这个问题?我知道我可以初始化一个 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 来自参数时没有提示:

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

【问题讨论】:

    标签: python-3.x selenium selenium-webdriver pycharm type-hinting


    【解决方案1】:

    我的解决方案是导入特定的 webdriver,如 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
    

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 2018-10-10
        • 2016-03-23
        • 2017-08-14
        • 2017-04-10
        • 1970-01-01
        • 1970-01-01
        • 2022-01-05
        • 2012-12-17
        • 1970-01-01
        相关资源
        最近更新 更多