title: Selenium TypeError: __init__() takes 2 positional arguments but 3 were given
body: <pre><code>from selenium import webdriver
  from selenium.webdriver.common.by import By
  from selenium.webdriver.support.ui import WebDriverWait
  from selenium.webdriver.support import expected_conditions
  driver = webdriver.Firefox()
  driver.get("http://somelink.com/")
  
  
  WebDriverWait(driver, 10).until(expected_conditions.invisibility_of_element_located(By.XPATH, "//input[@id='message']"))
  # Gives me an error:
  TypeError: __init__() takes 2 positional arguments but 3 were given
  </code></pre>
  
  <p>...</p>
  
  <pre><code># Simply:
  expected_conditions.invisibility_of_element_located(By.XPATH, "//input[@id='message']"))
  # Gives me the same error.
  TypeError: __init__() takes 2 positional arguments but 3 were given
  </code></pre>
  
  <p>The error repeats itself whether I use By.XPATH, By.ID or anything else.</p>
  
  <p>Also, find_element works just fine:</p>
  
  <pre><code>el = driver.find_element(By.XPATH, "//input[@id='message']")
  print(el) # returns:
  [&lt;selenium.webdriver.firefox.webelement.FirefoxWebElement (session="03cfc338-f668-4fcd-b312-8e4a1cfd9f24", element="c7f76445-08b3-4a4c-9d04-90263a1ef80e")&gt;]
  </code></pre>
  
  <p>Suggestions appreciated.</p>
  
  <p><strong>Edit:</strong></p>
  
  <p>Extra parentheses () around <code>By.XPATH, "//input[@id='message']"</code> as suggested in the comments solved the problem.</p>