问题描述
日志向我抛出这个:
element.until(EC.presence_of_element_located(By.XPATH("//*[@id='menu-item-9145']/a'")))
TypeError: 'str' object is not callable
代码试验:
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()
我已经试过了:
element.until(EC.presence_of_element_located(By.XPATH,'//*[@id="menu-item-9145"]/a'')))
但也不起作用,因为:
__init__() takes 2 positional arguments but 3 were given
解决方法
您需要注意以下几点:
-
presence_of_element_located()
应该在tuple
中调用,因为它不是一个 函数,而是一个 类,其中初始化程序只需要 1 超越隐含 自我 的论证
-
presence_of_element_located()
不能确保元素可交互。相反,您需要使用element_to_be_clickable()
解决方案
您需要为 element_to_be_clickable()
引入 WebDriverWait,您可以使用以下 Locator Strategy:
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='menu-item-9145']/a"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
参考
您可以在以下位置找到一些相关的详细讨论: