【问题标题】:selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: File not found error invoking send_keys() using Seleniumselenium.common.exceptions.InvalidArgumentException:消息:无效参数:使用 Selenium 调用 send_keys() 时找不到文件错误
【发布时间】:2019-08-03 19:04:34
【问题描述】:

我是 Selenium 自动化测试的新手,我只是想通过在网页的文本框中输入“hi”来完成一项简单的任务。

我的代码如下所示:

input = driver.find_element(By.XPATH, "//input[@type='file']")
input.send_keys('hi')

但是当我运行代码时,我收到了这个错误:

selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: File not found : hi

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 避免使用 input 并为变量使用不同的名称,因为这可能是原因。可以分享一下网页地址吗?
  • 此文本框最有可能在寻找文件名。您是否尝试使用文件名而不是“hi”提供完整路径?
  • 您已成功在文本框中输入“hi”。问题是文本框是一个INPUT,它需要一个文件名......因此出现错误。你读过错误信息吗? File not found : hi

标签: python selenium selenium-webdriver webdriver sendkeys


【解决方案1】:

此错误消息...

selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: File not found

...暗示 WebDriver 实例无法通过您通过send_keys() 发送的字符序列找到文件

相关的HTML DOM 会帮助我们以更好的方式调试您的问题。从您使用的Locator Strategy 仍然可以清楚地看出,预期的内容 必须是type 作为file。此外,还可能涉及到一个JavaScript,它会检查传递给元素的 contents 如果所有 contents 引用了一个 valid 文件


解决方案

您需要传递一个有效的文件作为send_keys()的参数,如下所示:

driver.find_element(By.XPATH, "//input[@type='file']").send_keys("/path/to/filename.extension")

【讨论】:

    【解决方案2】:

    你首先需要导入“By”

    from selenium.webdriver.common.by import By
    input=driver.find_element(By.XPATH, '//input[@type="file"]')
    input.send_keys("hi")
    

    你也可以写成(虽然没有推荐的方法)

    from selenium.webdriver.common.by import By
    driver.find_element(By.XPATH, '//input[@type="file"]').send_keys("hi")
    

    【讨论】:

    • 为什么第二个代码块不建议方法?有什么问题?
    • 可读性和可重用性降低。如果我们想在输入文本后使用相同的元素被清除怎么办?我们将再次编写“driver.find_element”而不是将 webelement 存储在一个变量中,然后对其执行操作
    • 可读性可重用性?它是一个<input> 元素,send_keys() 后面会跟着click()submit()。当然,元素会变得stale
    • 不,您将重构代码以分离出.find_element() 并将其返回值存储在变量中,然后使用该变量执行后续操作。这里的单线稍后会被重构并没有错。在第一种情况下,您将结果存储在不需要的变量中。
    • @DebanjanB 并非所有.send_keys() 都后跟.click().submit()。像 YoDO 建议的那样,很容易有其他动作,例如.clear(),如果您正在测试无效输入等。
    猜你喜欢
    • 2020-09-30
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 2021-05-17
    • 2022-01-01
    • 2018-12-28
    • 2022-01-19
    相关资源
    最近更新 更多