jjzjj

python - Selenium - visibility_of_element_located : __init__() takes exactly 2 arguments (3 given)

coder 2023-08-25 原文

我在使用 Selenium Python 绑定(bind)的测试代码中遇到此错误:

>           twitter_campaigns = wait.until(EC.visibility_of_element_located(By.CSS_SELECTOR, TWITTER_CAMPAIGNS))
E           TypeError: __init__() takes exactly 2 arguments (3 given)

这就是我正在执行的:

class TestTwitter(TestLogin, TestBuying):

    def setup(self, timeout=10):
        self.driver = webdriver.Firefox()
        self.driver.get(BASEURL)
        self.driver.implicitly_wait(timeout)

    def test_campaigns_loaded(self, timeout=10):
        self.signin_action()
        self.view_twitter_dashboard()
        self.select_brand()
        wait = WebDriverWait(self.driver, timeout)
        twitter_campaigns = wait.until(EC.visibility_of_element_located(By.CSS_SELECTOR, TWITTER_CAMPAIGNS))
        assert True == twitter_campaigns

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

所以我想知道为什么我会收到上述错误,在我没有定义 __init__() 方法的所有类上,而是定义了 setUp 和 tearDown 方法,因为 pytest 遵循。知道为什么要使用 3 个参数吗?

最佳答案

您应该问的问题不是“为什么它需要 3 个参数”,而是“什么需要 3 个参数”。您的回溯引用了代码中非常具体的一行,这就是问题所在。

根据Selenium Python文档在这里,selenium.webdriver.support.expected_conditions.visibility_of_element_located应该用元组调用;它不是一个函数,而是一个类,它的初始化器只需要一个超出隐式self的参数:

class visibility_of_element_located(object):
   # ...
   def __init__(self, locator):
       # ...

因此,您需要使用两个嵌套的括号调用 visibility_of_element_located:

wait.until(EC.visibility_of_element_located( ( By.CSS_SELECTOR, TWITTER_CAMPAIGNS ) ))

这意味着 visibility_of_element_located.__init__ 不是 3 个参数 selfBy.CSS_SELECTORTWITTER_CAMPAIGNS将仅使用预期的 2 个参数调用:隐式 self 和定位器:(type, expression) 元组。

关于python - Selenium - visibility_of_element_located : __init__() takes exactly 2 arguments (3 given),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23661734/

有关python - Selenium - visibility_of_element_located : __init__() takes exactly 2 arguments (3 given)的更多相关文章

随机推荐