The log throw me this :
element.until(EC.presence_of_element_located(By.XPATH("//*[@id='menu-item-9145']/a'")))
TypeError: 'str' object is not callable
Code trials:
class Descaro:
def __init__(self, driver):
self.driver = driver
def Descaro(self):
time.sleep(3)
self.driver.find_element_by_xpath("//*[@id='splashModal']/a[1]").click()
print("deberia estar en la pagina de fondo")
element = WebDriverWait(self.driver, 10)
element.until(EC.presence_of_element_located(By.XPATH("//*[@id='menu-item-9145']/a'")))
element.click()
I already try this:
element.until(EC.presence_of_element_located(By.XPATH, '//*[@id="menu-item-9145"]/a'')))
but doesn't work too , beacuse:
__init__() takes 2 positional arguments but 3 were given
You need to take care of a couple of things:
presence_of_element_located()
should be called within a tuple
as it is not a function but a class, where the initializer expects just 1 argument beyond the implicit selfpresence_of_element_located()
doesn't ensures that the element is interactable. Instead you need to use element_to_be_clickable()
You need to induce WebDriverWait for the element_to_be_clickable()
and you can use the following Locator Strategy:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='menu-item-9145']/a"))).click()
Note: You have to add the following imports :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
You can find a couple of relevant detailed discussions in: