python - Selenium 中的单例实现 [Python]

标签 python selenium singleton python-behave

我正在尝试使用带有 Selenium 和 Behave 的单例模式进行项目,但它无法正常工作 - 对象总是在 @then 装饰器下第二次创建。我想我在 new 方法中犯了一些错误,但无法真正看到哪里。

class WebDriver:
    singleton_instance = None
    driver = None

    def __init__(self):
       self.driver = webdriver.Chrome("C:\webdriver\chromedriver.exe")



    def __new__(cls):
        if not hasattr(cls, 'instance'):
            cls.singleton_instance = super(WebDriver, cls).__new__(cls)
        return cls.singleton_instance

@given ("website '{url}'")
def website_opener(context,url):
    driver = WebDriver()
    print(driver.singleton_instance)

@then("push button with text '{text}'")
def button_pusher(context,text):
   driver = WebDriver() #another object of WebDriver() is created
   print(driver.singleton_instance)

   WebDriverWait(driver,120).until(
     EC.element_to_be_clickable((By.XPATH,'//*[contains(text(), "%s")]' % text))
   )

context.browser.quit()

最佳答案

您不需要使用__new__

class WebDriver:

    class __WebDriver:
        def __init__(self):
            self.driver = webdriver.Chrome(r'C:\webdriver\chromedriver.exe')

    driver = None

    def __init__(self):
        if not self.driver:
            WebDriver.driver = WebDriver.__WebDriver().driver


@given ("website '{url}'")
def website_opener(context,url):
    driver = WebDriver().driver
    driver.get('https://google.com')

关于python - Selenium 中的单例实现 [Python],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58604529/

相关文章:

android - 数据传递到 Android 中的另一个应用程序

python - 将字符串中的每个字符更改为字母表中的下一个字符

python - 如何只打印日期而不包括 datetime.datetime.strptime() 中的时间

java - 如何使用selenium在java中识别并点击这个span?

java - 将 Selenium 与 HP ALM 集成

java - 线程特定的单例实例

c++ - 单例类的成员变量的生命周期是多少?

ios - 我应该在 iOS/OS X 应用程序中的哪里初始化我的单例?

python - 使用 Python 抓取和解析 Google 搜索结果

python - 如何让 Beautifulsoup 不添加 <html> 或 <?xml ?>