【问题标题】:__init__() takes 2 positional arguments but 3 were given using WebDriverWait and expected_conditions as element_to_be_clickable with Selenium Python__init__() 接受 2 个位置参数,但使用 WebDriverWait 和 expected_conditions 给出了 3 个作为 element_to_be_clickable 和 Selenium Python
【发布时间】:2020-01-14 03:17:40
【问题描述】:

我看到了类似的问题,但就我而言,我的代码中甚至没有“init”函数。如何解决这个问题呢?问题在于(EC.element_to_bo_clickable)

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(executable_path="C:\Chromedriver\chromedriver.exe")
driver.implicitly_wait(1)
driver.get("https://cct-103.firebaseapp.com/")

element = WebDriverWait(driver, 1).until
(EC.element_to_be_clickable(By.CLASS_NAME, "MuiButton-label"))

element.click()

【问题讨论】:

  • 请添加完整的异常堆栈跟踪

标签: python selenium selenium-webdriver webdriver webdriverwait


【解决方案1】:

根据定义,element_to_be_clickable() 应该在 tuple 中调用,因为它不是一个函数,而是一个,其中初始化程序只期望 1隐式self参数:

class element_to_be_clickable(object):
    """ An Expectation for checking an element is visible and enabled such that you can click it."""
    def __init__(self, locator):
        self.locator = locator

    def __call__(self, driver):
        element = visibility_of_element_located(self.locator)(driver)
        if element and element.is_enabled():
            return element
        else:
            return False

所以而不是:

element = WebDriverWait(driver, 1).until(EC.element_to_be_clickable(By.CLASS_NAME, "MuiButton-label"))

您需要(添加额外的括号):

element = WebDriverWait(driver, 1).until((EC.element_to_be_clickable(By.CLASS_NAME, "MuiButton-label")))

【讨论】:

    【解决方案2】:

    您缺少:(),在此参数中:((By.CLASS_NAME, "MuiButton-label"))

    试试下面的代码:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Chrome(executable_path="C:\Chromedriver\chromedriver.exe")
    driver.get("https://cct-103.firebaseapp.com/")
    
    element = WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CLASS_NAME, "MuiButton-label")))
    element.click()
    

    【讨论】:

      【解决方案3】:

      element_to_be_clickable() 内部调用visibility_of_element_located

      def __call__(self, driver):
          element = visibility_of_element_located(self.locator)(driver)
      

      哪个电话_find_element

      def __call__(self, driver):
          try:
              return _element_if_visible(_find_element(driver, self.locator))
      

      然后在webdriver.py中调用find_element(self, by=By.ID, value=None)

      def _find_element(driver, by):
          try:
              return driver.find_element(*by)
      

      这意味着你需要发送一个元组作为参数

      element = WebDriverWait(driver, 1).until(EC.element_to_be_clickable((By.CLASS_NAME, "MuiButton-label")))
      

      【讨论】:

        猜你喜欢
        • 2014-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-18
        • 2018-05-06
        • 1970-01-01
        • 2022-01-04
        • 1970-01-01
        相关资源
        最近更新 更多