代码之家  ›  专栏  ›  技术社区  ›  fabio

隐式的wait()缺少1个必需的位置参数

  •  0
  • fabio  · 技术社区  · 7 年前

    我正在用Python学习Selenium,在一个教程中我发现了以下代码。

    from selenium import webdriver
    from time import gmtime, strftime
    import unittest
    #from builtins import classmethod
    
    class RegisterNewUser(unittest.TestCase):
        #@classmethod
        def setUp(self):
            self.driver = webdriver.Firefox
            self.driver.implicitly_wait(30)
            self.driver.maximize_window()
    
            # navigate to the application home page
            self.driver.get("http://demo-store.seleniumacademy.com/")
    
        def test_register_new_user(self):
            driver = self.driver
            pass
    
        def tearDown(self):
            self.driver.quit()
    
    if __name__ == "__main__":
        unittest.main(verbosity=2)
    

    它抛出一个错误:

    File "register_new_user.py", line 10, in setUp
        self.driver.implicitly_wait(30)
    TypeError: implicitly_wait() missing 1 required positional argument: 'time_to_wait'
    

    我试图添加注释掉的代码( classmethod )但不会改变任何事。没有 test_register_new_user 不会出错。

    我使用的是Python 3.6.4、Selenium 3.141(和GeckoDriver 0.23)

    1 回复  |  直到 7 年前
        1
  •  2
  •   DeepSpace    7 年前

    你的问题是上面的一行:

    self.driver = webdriver.Firefox
    

    这不会创建浏览器对象。它只是设置 self.driver 上课 webdriver.Firefox 也就是说 self.driver.implicitly_wait(30) 正在尝试使用 implicitly_wait 以静态方式 webdriver.Firefox.implicitly_wait(30) ,因此它缺少实例。 webdriver.Firefox.implicitly_wait(an_actual_browser, 30) .

    你失踪了 () :

    self.driver = webdriver.Firefox()  # which will potentially ask for a path to 
                                       # firefox/geckodriver if it is not in PATH, 
                                       # but that is out of the scope of this question