Selenium 上传文件用 send_keys 始终报错 WebDriverException: Message: unknown error: cannot focus element

梁慧玲 · 2016年08月02日 · 最后由 xdf 回复于 2019年03月20日 · 126 次阅读

我现在要实现自动化上传文件,到上传文件那一步卡住了,页面显示如下

我的代码如下:

def test_11(self):
        time.sleep(1)
        self.browser.find_element_by_link_text(u'批量上传').click()
        time.sleep(1)
        self.browser.switch_to_frame('contentFrame')
        # 点击导入文档
        self.browser.find_element_by_id("filePicker").send_keys('C:\\E\\Users\\Administrator\\PycharmProjects\\WLTK\\jj.doc')
        time.sleep(2)

执行后报错如下:

Error
Traceback (most recent call last):
  File "C:\E\Users\Administrator\PycharmProjects\WLTK\Test\Test_WLTK\TestScripts.py", line 91, in test_11
    a.send_keys('C:\\E\\Users\\Administrator\\PycharmProjects\\WLTK\\jj.doc')
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 322, in send_keys
    self._execute(Command.SEND_KEYS_TO_ELEMENT, {'value': keys_to_typing(value)})
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 457, in _execute
    return self._parent.execute(command, params)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 233, in execute
    self.error_handler.check_response(response)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
WebDriverException: Message: unknown error: cannot focus element
  (Session info: chrome=51.0.2704.103)
  (Driver info: chromedriver=2.21.371459 (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),platform=Windows NT 10.0 x86_64)

请各位大神帮忙看看这个问题要怎么解决才可以实现上传?

共收到 13 条回复 时间 点赞

提供一些方法和思路:

  1. 打断点调试,或者打印 log;
  2. Message 里面显示了元素 cannot focus;
  3. 前面的元素是否显示出来,frame 是否进入;
  4. 等待时间是否够,建议用智能等待;
  5. 建议少使用中文,在没有完全掌握各种编码转化的情况下;
  6. 作为调试,文件和路径越简单越好;
  7. 贴出来的代码格式错误;

@snake 大神 能否帮我看下我的这个https://testerhome.com/topics/5570

@nancy2896 ‘’ 导入文档控件 filePicker,没有类似 input type='text' 的属性,虽然你定位到了这个元素,但是后续的 send_keys() 方法,找不到输入框,所以提示你无法获得焦点的啊。

self.browser.find_element_by_css_selector("div.webuploader-pick").send_keys ('C:\E\Users\Administrator\PycharmProjects\WLTK\jj.doc')

#4 楼 @bulecat 这样也不行 还是报同样的错误

#1 楼 @snake
#3 楼 @xie_0723

我框图没有框全,有 input type=file 这些的

#1 楼 @snake 我单独用这句 self.browser.find_element_by_id("filePicker").click() 是能出来文件选择框的,证明我这个定位没有错误

不知道 display:block 有没有关系

试试定位到下面那一层: name="file"

#8 楼 @snake 可以了,谢谢啦,不过还是不明白为什么通过上面的 id 不行呢

#8 楼 @snake 还有一个帖子外的问题,就是上传文件这个动作,我循环操作,第一遍上传成功,第二遍上传就没反应了,你知道为什么么?

你好,最进在学习自动化,也遇到了你这个问题,但是我发现用了所有可用的元素都一直报错 “cannot focus element”


可以给我看下吗,谢谢

我知道错误在哪里了,是因为没有 input 控件,必须要有 inout 控件或者要借助第三方工具

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册