【问题标题】:Locate "file upload" button with Selenium使用 Selenium 找到“文件上传”按钮
【发布时间】:2017-06-16 18:47:30
【问题描述】:

我有如下所示的按钮(图像和 HTML),我正在尝试单击它。

Selenium 无法找到它 - 我已尝试通过 xpath 和 ID 进行定位。

<input id="wsUpload1" type="file" name="file">

XPATH:

element = driver.find_element_by_xpath('//input[@id="wsUpload1"]')
element.click()

我哪里出错了?

编辑:这是 Selenium 抛出的异常:

selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{"method":"xpath","selector":"//input[@id="wsUpload1"]"}

【问题讨论】:

  • 发布 url 或查找元素是否在框架内。你将不得不做 browser.switch_to.frame("FrameName")
  • 按钮在&lt;iframe&gt;标签内吗?

标签: python selenium selenium-webdriver


【解决方案1】:

可能性

  1. 页面中具有相同 ID 的重复 Web 元素。
  2. 元素可能在框架中。您需要切换到框架
  3. 尝试在页面加载之前访问 Web 元素。请稍等。

【讨论】:

  • 我已经解决了 - 驱动程序在侧面板上打开一个选项卡,并且按钮在选项卡中。单击选项卡和显示按钮之间似乎有几毫秒的延迟,所以我添加了一个等待,直到元素可点击并且这似乎有效。
  • @Lucky 我也有同样的问题,但这三种可能性不适用于我。如果有请帮忙
【解决方案2】:

不确定为什么找不到您的按钮,可能是因为引号(尽管在这种情况下它应该显示错误),请尝试使用 driver.find_element_by_xpath(".//input[@id='wsUpload1']") 并查看它是否有效。我不确定您的按钮是否已经呈现在页面上,或者您以某种方式触发它所以它还不存在? NoSuchElementException 被抛出是因为在该页面上找不到您的目标元素,可能是您在错误的页面上,元素尚未呈现,因此您应该等待它出现,元素可能在某些 iframe 中等等等,当我不知道你的页面是如何工作的时候很难说。

但是,如果您尝试上传某些内容,则应在该按钮上执行sendKeys()(带有您尝试上传的文件路径),而不是在其上执行click()。这就是 selenium 上传的工作原理。

【讨论】:

  • 仍然找不到按钮。
  • @acikojevic,使用send_keys() 是个好点,但是,它不会解决当前问题。尝试提供一些可能的选项来避免NoSuchElementException
  • “我不确定你的按钮是否已经呈现在页面上,或者你以某种方式触发它,所以它还不存在。”?
  • @acikojevic 我已经解决了 - 驱动程序在侧面板上打开一个选项卡,按钮在选项卡中。单击选项卡和显示按钮之间似乎有几毫秒的延迟,所以我添加了一个等待,直到元素可点击并且这似乎有效。
【解决方案3】:

我已经解决了 - 驱动程序在侧面板上打开一个选项卡,按钮位于选项卡中。单击选项卡和显示按钮之间似乎有几毫秒的延迟,所以我添加了一个等待,直到元素可点击并且这似乎有效。

wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@id='wsUpload1']"))).click()

【讨论】:

    猜你喜欢
    • 2015-11-09
    • 2019-07-15
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 2018-03-09
    相关资源
    最近更新 更多