51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 4052|回复: 17
打印 上一主题 下一主题

selenium+python元素定位问题

[复制链接]
  • TA的每日心情
    开心
    2019-12-24 17:28
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]测试连长

    跳转到指定楼层
    1#
    发表于 2017-11-28 16:56:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    10测试积点
    页面元素标签如图:
    元素定位语句:

    执行报错:
        self.driver.find_element_by_id('SWFUpload_0').click()
    AttributeError: 'dict' object has no attribute 'click'
    不明白为什么那个上传按钮定位出来是字典对象了呢?
    这个是定位错误问题,还是定位的元素的属性问题?
    如果定位错误,请教,应该怎么定位
    如果定位正确,请那么怎么才能对定位的这个上传按钮click()操作么
    为什么不能click()





    附件: 您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    最佳答案

    查看完整内容

    不需要用autoit,装个插件即可解决,如下 pip install sendkeys 实现上传:首先定位到上传按钮并点击按钮弹出os框 其次SendKeys.SendKeys(file) #参数为上传文件路径
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 1897 天

    连续签到: 3 天

    [LV.Master]测试大本营

    2#
    发表于 2017-11-28 16:56:28 | 只看该作者
    不需要用autoit,装个插件即可解决,如下
    pip install sendkeys
    实现上传:首先定位到上传按钮并点击按钮弹出os框
    其次SendKeys.SendKeys(file)    #参数为上传文件路径
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-5-3 18:09
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    3#
    发表于 2017-11-29 09:56:50 | 只看该作者
    文件上传不需要click,直接send_keys("你想上传的文件,其绝对路径")
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-12-24 17:28
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]测试连长

    4#
     楼主| 发表于 2017-11-29 11:05:35 | 只看该作者
    菜鸟@大虾 发表于 2017-11-29 09:56
    文件上传不需要click,直接send_keys("你想上传的文件,其绝对路径")

    <input>标签的文件上传是可以用send_keys来上传,不需要click
    但是问题是我的文件上传按钮的标签不是<input>标签,就不能用这个send_keys来上传了
    网上看了非<input>标签可以借助autoit文件上传,问题是要先click,打开文件上传窗口,才能进行文件上传
    现在我的文件上传按钮的标签是<object>,我定位出来的问题就是我描述的那样,找了好久,找不到解决办法,只能找大神帮忙解决啦
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2020-8-4 11:02
  • 签到天数: 943 天

    连续签到: 1 天

    [LV.10]测试总司令

    5#
    发表于 2017-11-29 11:17:26 | 只看该作者
    1.功能没实现
    2.没调用上传文件接口
    3.定义dict错误

    评分

    参与人数 1测试积点 +10 收起 理由
    lsekfe + 10 积极回复获得测试积点10 赶快去商城换取奖.

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-10-16 17:42
  • 签到天数: 120 天

    连续签到: 1 天

    [LV.7]测试师长

    6#
    发表于 2017-11-30 09:16:20 | 只看该作者
    可以试试使用xpath的方式去地点这个按钮
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 1897 天

    连续签到: 3 天

    [LV.Master]测试大本营

    7#
    发表于 2017-11-30 10:45:42 | 只看该作者
    漏了一句:SendKeys.SendKeys('{ENTER}')
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-12-24 17:28
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]测试连长

    8#
     楼主| 发表于 2017-11-30 14:04:55 | 只看该作者
    dmlemon1 发表于 2017-11-30 09:16
    可以试试使用xpath的方式去地点这个按钮

    用过了,一样的错误
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-12-24 17:28
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]测试连长

    9#
     楼主| 发表于 2017-11-30 14:25:23 | 只看该作者
    cq520131517 发表于 2017-11-30 10:37
    不需要用autoit,装个插件即可解决,如下
    pip install sendkeys
    实现上传:首先定位到上传按钮并点击按钮 ...

    安装了的,用这个方法也不行,首先要click【上传文件】按钮,然后才能用SendKeys
    如果不点击上传文件按钮,直接用SendKeys文件就上传到如图的文本框中了
    现在的主要问题我觉得就是那个<object>标签的上次文件按钮为什么不能click
    如果我先click上次文件按钮,执行到这一步就报错,下面的SendKeys根本没法执行下去

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-12-24 17:28
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]测试连长

    10#
     楼主| 发表于 2017-11-30 14:38:16 | 只看该作者
    fhhh_eyou 发表于 2017-11-29 11:17
    1.功能没实现
    2.没调用上传文件接口
    3.定义dict错误

    能说的详细点吗,现在我确定我的问题就是为什么定位<object>标签的那个上次文件按钮不能click
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-12-24 17:28
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]测试连长

    11#
     楼主| 发表于 2017-11-30 14:41:04 | 只看该作者
    cq520131517 发表于 2017-11-30 10:37
    不需要用autoit,装个插件即可解决,如下
    pip install sendkeys
    实现上传:首先定位到上传按钮并点击按钮 ...

    用SendKeys也是一样的问题,我试过了,用SendKeys的前提也是的先点击上传文件按钮,弹出文件上传窗口才能Send,问题是执行到click就报错了,根本不会去执行SendKeys了

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2018-3-24 11:37
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    12#
    发表于 2017-12-1 20:09:12 | 只看该作者
    看看上传文件按钮上面有没有框架?如果有框架的话就要先切换到框架里面才能.click
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-12-24 17:28
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]测试连长

    13#
     楼主| 发表于 2017-12-4 11:00:26 | 只看该作者
    zane_0879 发表于 2017-12-1 20:09
    看看上传文件按钮上面有没有框架?如果有框架的话就要先切换到框架里面才能.click

    是在框架上的,已经切换到框架上了的
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 1897 天

    连续签到: 3 天

    [LV.Master]测试大本营

    14#
    发表于 2017-12-4 20:47:10 | 只看该作者
    问题解决了吗?
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-12-24 17:28
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]测试连长

    15#
     楼主| 发表于 2017-12-5 10:54:33 | 只看该作者

    没解决呢
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-4-27 11:03
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]测试排长

    16#
    发表于 2017-12-5 15:29:01 | 只看该作者
    定位报错了吗?
    如果定位没问题,试试模拟鼠标移动到按钮上,然后用回车;
    from  selenium.webdriver.common.action_chains import ActionChains
    ActionChains(driver).move_to_element(ele).perform()#移动鼠标到定位元素上;
    from selenium.webdriver.common.keys  import Keys
    ele.send_keys(Keys.ENTER)#回车
    看这样能弹出来不;
    后续我就不知道了。
    如果可以请回复下。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-12-24 17:28
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]测试连长

    17#
     楼主| 发表于 2017-12-5 16:29:13 | 只看该作者
    777shenhuxi 发表于 2017-12-5 15:29
    定位报错了吗?
    如果定位没问题,试试模拟鼠标移动到按钮上,然后用回车;
    from  selenium.webdriver.com ...

    定位没报错
    按照你说的,也不行
    定位到元素,用mouse_move那一句报错了
    代码:
    #coding:utf-8
    import time
    import unittest
    import os
    import SendKeys
    from selenium import webdriver
    from common.select_people import Select_People
    from common.login_oa import Login_Oa
    from selenium.common.exceptions import NoSuchAttributeException
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys

    class Send_Email(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            url = "*********************"
            cls.driver=webdriver.Chrome()
            cls.driver.get(url)
            time.sleep(3)
            Login_Oa(cls.driver).login('wanglp','itouch123')
            time.sleep(3)
        def test_send(self):
            self.driver.find_element_by_id('50018').click()
            time.sleep(3)
            self.driver.find_element_by_css_selector("#Js_sidebarBd>ul>li:nth-child(1)>a").click()
            self.driver.switch_to.frame('js_iframe')
            self.driver.find_element_by_id('btnWriteMail').click()
            time.sleep(3)
            self.driver.find_element_by_id('btnSelectUser').click()
            time.sleep(3)
            all_h=self.driver.window_handles
            Select_People(self.driver).select(all_h[1],u'吴进',all_h[0])
            time.sleep(3)
            self.driver.switch_to.frame('js_iframe')
            self.driver.find_element_by_id('MainPlaceHolder_txtSubject').send_keys(u'请假申请')
            time.sleep(3)
            ele=self.driver.find_elements_by_id('SWFUpload_0')
            ActionChains(self.driver).move_to_element(ele).perform()
            ele.send_Keys(Keys.ENTER)
            self.driver.switch_to.frame('baidu_editor_0')
            self.driver.find_element_by_xpath('/html/body').send_keys(u'个人私事,请假一天,请领导批准!')
            self.driver.switch_to.default_content()
            self.driver.switch_to.frame('js_iframe')
            self.driver.find_element_by_id('MainPlaceHolder_btnSend').click()
            time.sleep(3)
            msg=self.driver.find_element_by_class_name('alert-success').text
            self.assertEqual(msg,u'温馨提示:您的邮件已发送“吴进,...”。')
        @classmethod
        def tearDownClass(cls):
            cls.driver.quit()


    错误信息:
    Error
    Traceback (most recent call last):
      File "C:\Python27\lib\unittest\case.py", line 329, in run
        testMethod()
      File "C:\Documents and Settings\Administrator\PycharmProjects\OA\test_case\email\test_send_email.py", line 38, in test_send
        ActionChains(self.driver).move_to_element(ele).perform()
      File "C:\Python27\lib\site-packages\selenium\webdriver\common\action_chains.py", line 74, in perform
        action()
      File "C:\Python27\lib\site-packages\selenium\webdriver\common\action_chains.py", line 225, in <lambda>
        Command.MOVE_TO, {'element': to_element.id}))
    AttributeError: 'list' object has no attribute 'id'
    回复

    使用道具 举报

    该用户从未签到

    18#
    发表于 2018-1-10 17:13:53 | 只看该作者
      ele=self.driver.find_elements_by_id('SWFUpload_0')写错了element不用加s
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-20 11:27 , Processed in 0.083537 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表