51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

测试开发精英班,通向高级软件测试工程师【长期招募】博为峰网校招聘兼职讲师!2018热门技术,不再错过
一站式软件测试平台【专家88期】如何做好自动化测试技术和区块链技术? 【最新专题】大数据测试正确的打开方式
测试知识大闯关104期活动热播中51测试天地 年底来赚零花钱吧!自学软件测试那点事
查看: 323|回复: 16

selenium+python元素定位问题

[复制链接]
  • TA的每日心情

    2 小时前
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

    发表于 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
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-8 08:22
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    发表于 2017-11-29 09:56:50 | 显示全部楼层
    文件上传不需要click,直接send_keys("你想上传的文件,其绝对路径")
    回复

    使用道具 举报

  • TA的每日心情

    2 小时前
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

     楼主| 发表于 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的每日心情
    擦汗
    7 小时前
  • 签到天数: 522 天

    连续签到: 26 天

    [LV.9]测试副司令

    发表于 2017-11-29 11:17:26 | 显示全部楼层
    1.功能没实现
    2.没调用上传文件接口
    3.定义dict错误

    评分

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

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2 小时前
  • 签到天数: 96 天

    连续签到: 5 天

    [LV.6]测试旅长

    发表于 2017-11-30 09:16:20 | 显示全部楼层
    可以试试使用xpath的方式去地点这个按钮
    回复

    使用道具 举报

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

    连续签到: 5 天

    [LV.8]测试军长

    发表于 2017-11-30 10:37:48 | 显示全部楼层
    不需要用autoit,装个插件即可解决,如下
    pip install sendkeys
    实现上传:首先定位到上传按钮并点击按钮弹出os框
    其次SendKeys.SendKeys(file)    #参数为上传文件路径
    回复

    使用道具 举报

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

    连续签到: 5 天

    [LV.8]测试军长

    发表于 2017-11-30 10:45:42 | 显示全部楼层
    漏了一句:SendKeys.SendKeys('{ENTER}')
    回复

    使用道具 举报

  • TA的每日心情

    2 小时前
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

     楼主| 发表于 2017-11-30 14:04:55 | 显示全部楼层
    dmlemon1 发表于 2017-11-30 09:16
    可以试试使用xpath的方式去地点这个按钮

    用过了,一样的错误
    回复

    使用道具 举报

  • TA的每日心情

    2 小时前
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

     楼主| 发表于 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的每日心情

    2 小时前
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

     楼主| 发表于 2017-11-30 14:38:16 | 显示全部楼层
    fhhh_eyou 发表于 2017-11-29 11:17
    1.功能没实现
    2.没调用上传文件接口
    3.定义dict错误

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

    使用道具 举报

  • TA的每日心情

    2 小时前
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

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

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

    本帖子中包含更多资源

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

    x
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    6 天前
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    发表于 2017-12-1 20:09:12 | 显示全部楼层
    看看上传文件按钮上面有没有框架?如果有框架的话就要先切换到框架里面才能.click
    回复

    使用道具 举报

  • TA的每日心情

    2 小时前
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

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

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

    使用道具 举报

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

    连续签到: 5 天

    [LV.8]测试军长

    发表于 2017-12-4 20:47:10 | 显示全部楼层
    问题解决了吗?
    回复

    使用道具 举报

  • TA的每日心情

    2 小时前
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

     楼主| 发表于 2017-12-5 10:54:33 | 显示全部楼层

    没解决呢
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-3-7 15:24
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]测试排长

    发表于 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的每日心情

    2 小时前
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

     楼主| 发表于 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'
    回复

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2017-12-15 16:18 , Processed in 0.261029 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2017 Comsenz Inc.

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