【问题标题】:Python - Passing argument of a function in a classPython - 在类中传递函数的参数
【发布时间】:2015-11-14 18:48:48
【问题描述】:

有没有人可以帮助我使以下代码工作?

进口时间 从硒导入网络驱动程序 从 selenium.webdriver.common.keys 导入密钥 # 类 DataddoMobileTestFirefox(): # def setUp_and_login(self, browser): ''' 支持的浏览器有:firefox;铬合金 ''' 全球驱动力 全球电子邮件 全局密码 全局登录_btn # 如果浏览器 == 火狐: 驱动程序 = webdriver.Firefox() elif 浏览器 == 铬: driver = webdriver.Chrome('/Library/Chromedriver/chromedriver') 别的: print('浏览器无法识别,正在退出...') 出口() # # # 执行模块 如果 __name__ == '__main__': DataddoMobileTestFirefox().setUp_and_login(firefox)

当我执行模块时,我收到以下错误消息:

回溯(最近一次通话最后): 文件“DataddoMobileFirefox.py”,第 26 行,在 DataddoMobileTestFirefox().setUp_and_login(firefox) NameError:名称“firefox”未定义

我相信我已经接近目标了,一些提示会对我有很大帮助 非常感谢。

【问题讨论】:

  • 你为什么在课堂上使用全局?另外,如果您只使用一种方法,为什么还要使用一个类?
  • 您必须将firefoxchrome 放在引号中,在ifelif 和最后一行中。
  • 好吧,不要使用全局,传入 args 并在你的 init 方法中使用 self.firefox=firefox 等,然后在你的类中使用 self.firefox,在外面使用 instance.firefox
  • firefox 应该是实例变量还是字符串“firefox”?它没有在您提供的代码中被声明为任何内容。
  • 你的班级被命名为DataddoMobileTestFirefox。我希望它只处理 Firefox。您为什么还要尝试在该课程中支持 Chrome?

标签: python firefox selenium selenium-webdriver


【解决方案1】:

firefox 未在您的模块中定义。我认为您希望它是一个变量。

你可以使用字符串来代替:

DataddoMobileTestFirefox().setUp_and_login('firefox')

然后在你的setUp_and_login() 方法中:

if browser == 'firefox':
    driver = webdriver.Firefox()
else browser == 'chrome':
    driver = webdriver.Chrome('/Library/Chromedriver/chromedriver')

但最好在您班级的__init__() 中进行设置。并且考虑到您的类名为DataddoMobileTestFirefox,人们会期望它仅适用于Firefox,因此无需通过将浏览器传递给setUp_and_login() 来识别浏览器。只需在__init__() 中创建驱动程序的实例:

from selenium import webdriver

class DataddoMobileTestFirefox():
    def __init__(self, driver):
        self.driver = webdriver.Firefox()

    def some_method(self):
        self.driver.do_something()

现在您可以从类中的其他方法访问驱动程序,而无需使用global

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 2022-01-04
    相关资源
    最近更新 更多