当前位置: 首页 > article >正文

presence_of_element_located() takes 1 positional argument but 2 were given

        错误提示是 TypeError: presence_of_element_located() takes 1 positional argument but 2 were given,这表明 presence_of_element_located 期望接收一个参数,但传递了两个。

问题原因

      在 selenium.webdriver.support.expected_conditions 中,presence_of_element_located 确实只接受一个参数,这是一个元组,包含定位器类型(如 By.XPATH)和定位表达式。错误源于你传递了两个单独的参数,而实际上应该传递一个包含这两个值的元组。

解决方案

你需要将 By.XPATH 和 f"//span[text()='{text_1}']" 作为一个元组传递给 presence_of_element_located。修改后的代码应该像这样:

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

def writetest(driver, list):
    text_1 = "your_text"  # 假设 text_1 已经定义
    # 修改这里,将两个参数作为一个元组传递
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, f"//span[text()='{text_1}']")))

详细解释

  • By.XPATH 是一个定位器类型。
  • f"//span[text()='{text_1}']" 是你希望使用的 XPath 定位表达式。
  • 这两者应该作为一个元组传递给 presence_of_element_located

修改后的代码传递了一个包含 By.XPATH 和 XPath 表达式的元组 (By.XPATH, f"//span[text()='{text_1}']"),这将解决你遇到的 TypeError

完整示例

下面是一个完整的示例,展示了如何正确使用 WebDriverWait 和 presence_of_element_located

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 as EC

def get(conf, driver, url):
    writetest(driver, list)

def writetest(driver, list):
    text_1 = "your_text"  # 假设 text_1 已经定义
    # 等待直到元素位于指定的 XPath 位置
    element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, f"//span[text()='{text_1}']")))
    # 继续你的其他操作,例如点击或获取文本等
    print(element.text)

# 示例设置,根据需要调整
conf = {}  # 配置信息
driver = webdriver.Chrome()  # 使用 Chrome 浏览器作为示例
url = "http://example.com"

# 启动浏览器并访问页面
driver.get(url)

# 调用 get 函数
get(conf, driver, url)

确保你正确导入了 ByWebDriverWait 和 expected_conditions,并将定位器类型和表达式作为一个元组传递给 presence_of_element_located

总结

  • 错误的根本原因是 presence_of_element_located 只接受一个参数,但这里传递了两个。
  • 解决方法是将 By.XPATH 和 XPath 表达式作为一个元组传递。
  • 通过这种修改,你可以避免 TypeError 并成功等待元素的存在。

http://www.kler.cn/news/357220.html

相关文章:

  • [LeetCode] 542. 01矩阵
  • Frp 在云服与内网服务器间实现端口映射
  • 【Codeforces】CF 2009 F
  • 【云原生】Docker 部署 Nacos使用详解
  • DFS算法经典题目: Leetcode 51.N皇后
  • 工厂生成中关于WiFi的一些问题
  • 026 elasticsearch文档管理(添加、修改、删除、批处理)-Java原生客户端
  • 力扣1011.在D天内送达包裹的能力
  • Day13-数据库服务架构集群
  • 零基础入门人工智能,如何利用AI工具提升你的学习效率?
  • 父母教养方式测试:理解与优化家庭教育的关键
  • 基于Matlab车牌识别课程设计报告
  • C#里使用PerformLayout,强制控件将布局逻辑应用于其所有子控件。
  • pandas-使用技巧
  • 用Aconvert.com将MOBI文件转换为PDF:一步步指南
  • Mysql中表字段VARCHAR(N)类型及长度的解释
  • void关键字
  • ubuntu 20.04 网卡启用后,只有ipv6 没有 ipv4 无法上网
  • Linux_c 有名管道练习
  • Facebook Marketplace为什么无法使用的原因?