【问题标题】:Facing a error:TypeError: unbound method get() must be called with WebDriver instance as first argument (got str instance instead)面临错误:TypeError:必须使用 WebDriver 实例作为第一个参数调用未绑定的方法 get()(改为获取 str 实例)
【发布时间】:2018-07-17 06:38:19
【问题描述】:

这里是我尝试过的示例脚本

import unittest
from selenium import webdriver
from ddt import ddt,data,unpack

#@ddt
class search(unittest.TestCase):
    def setUp(self):
        self.driver=webdriver.Chrome

    #@data(("Bed & Bath", 12), ("Bags & Luggage", 12))
    #@unpack
    def test_search(self):
        driver=webdriver.Chrome
        driver.get("http://magento-demo.lexiconn.com/")

        def tearDown(self):
            self.driver.close()

if __name__ == '__main__':
    unittest.main()

【问题讨论】:

  • 问题出在这里:driver=webdriver.Chrome。你忘了括号。如果这使您的答案显而易见,我们可以将其作为错字关闭。如果它仍然没有意义,那么你的问题与 Selenium 无关,你需要一个关于如何在 Python 中使用类和实例的基本教程,但可能有一个重复的问题,答案有帮助。
  • 哎呀抱歉。我只是在粘贴代码时冲了上去......
  • 其实这不是我的问题。但我会在接下来的 90 分钟提出这个问题..但它与那个非常相似

标签: python selenium


【解决方案1】:

问题出在这里:

driver=webdriver.Chrome

这不会构造一个新的 Chrome webdriver 实例,它只是将 driver 指定为 Chrome 类型的新名称。要实际构造一个实例,您必须调用类型:

driver=webdriver.Chrome()

当然,您在setUp 方法和您在your duplicate question 中发布的不同代码中也有同样的错误。


如果你想了解错误信息:

您的driver 又是该类型的名称。所以当你这样做时:

driver.get("http://magento-demo.lexiconn.com/")

...您不是在 Chrome 网络驱动程序上调用 get,而是在类型上调用它。

现在,在类型而不是实例上调用普通实例方法合法的(这称为“使用未绑定方法”),但要做到这一点,您必须显式传递实例作为额外参数,用于self 参数。你没有那样做;您的第一个参数是一个字符串(您的 URL)。因此,您会收到以下错误消息:

TypeError: unbound method get() must be called with WebDriver instance as first argument (got str instance instead)

它告诉你,如果你想调用 get 作为未绑定的方法,第一个参数必须是 WebDriver 实例,而不是字符串。

但实际上,您不想将get 作为未绑定方法调用。你只想正确地构造一个实例,然后调用get,作为一个正常的绑定方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 2023-04-06
    • 2017-12-09
    • 2015-12-01
    • 2018-08-12
    相关资源
    最近更新 更多