51Testing软件测试论坛

标题: selenium+python元素定位问题 [打印本页]

作者: 王丽萍    时间: 2017-11-28 16:56
标题: selenium+python元素定位问题
页面元素标签如图:[attach]109491[/attach]
元素定位语句:
[attach]109492[/attach]
执行报错:
    self.driver.find_element_by_id('SWFUpload_0').click()
AttributeError: 'dict' object has no attribute 'click'
不明白为什么那个上传按钮定位出来是字典对象了呢?
这个是定位错误问题,还是定位的元素的属性问题?
如果定位错误,请教,应该怎么定位
如果定位正确,请那么怎么才能对定位的这个上传按钮click()操作么
为什么不能click()






作者: cq520131517    时间: 2017-11-28 16:56
不需要用autoit,装个插件即可解决,如下
pip install sendkeys
实现上传:首先定位到上传按钮并点击按钮弹出os框
其次SendKeys.SendKeys(file)    #参数为上传文件路径
作者: 菜鸟@大虾    时间: 2017-11-29 09:56
文件上传不需要click,直接send_keys("你想上传的文件,其绝对路径")
作者: 王丽萍    时间: 2017-11-29 11:05
菜鸟@大虾 发表于 2017-11-29 09:56
文件上传不需要click,直接send_keys("你想上传的文件,其绝对路径")

<input>标签的文件上传是可以用send_keys来上传,不需要click
但是问题是我的文件上传按钮的标签不是<input>标签,就不能用这个send_keys来上传了
网上看了非<input>标签可以借助autoit文件上传,问题是要先click,打开文件上传窗口,才能进行文件上传
现在我的文件上传按钮的标签是<object>,我定位出来的问题就是我描述的那样,找了好久,找不到解决办法,只能找大神帮忙解决啦
作者: fhhh_eyou    时间: 2017-11-29 11:17
1.功能没实现
2.没调用上传文件接口
3.定义dict错误
作者: dmlemon1    时间: 2017-11-30 09:16
可以试试使用xpath的方式去地点这个按钮
作者: cq520131517    时间: 2017-11-30 10:45
漏了一句:SendKeys.SendKeys('{ENTER}')
作者: 王丽萍    时间: 2017-11-30 14:04
dmlemon1 发表于 2017-11-30 09:16
可以试试使用xpath的方式去地点这个按钮

用过了,一样的错误
作者: 王丽萍    时间: 2017-11-30 14:25
cq520131517 发表于 2017-11-30 10:37
不需要用autoit,装个插件即可解决,如下
pip install sendkeys
实现上传:首先定位到上传按钮并点击按钮 ...

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

作者: 王丽萍    时间: 2017-11-30 14:38
fhhh_eyou 发表于 2017-11-29 11:17
1.功能没实现
2.没调用上传文件接口
3.定义dict错误

能说的详细点吗,现在我确定我的问题就是为什么定位<object>标签的那个上次文件按钮不能click
作者: 王丽萍    时间: 2017-11-30 14:41
cq520131517 发表于 2017-11-30 10:37
不需要用autoit,装个插件即可解决,如下
pip install sendkeys
实现上传:首先定位到上传按钮并点击按钮 ...

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

作者: zane_0879    时间: 2017-12-1 20:09
看看上传文件按钮上面有没有框架?如果有框架的话就要先切换到框架里面才能.click
作者: 王丽萍    时间: 2017-12-4 11:00
zane_0879 发表于 2017-12-1 20:09
看看上传文件按钮上面有没有框架?如果有框架的话就要先切换到框架里面才能.click

是在框架上的,已经切换到框架上了的
作者: cq520131517    时间: 2017-12-4 20:47
问题解决了吗?

作者: 王丽萍    时间: 2017-12-5 10:54
cq520131517 发表于 2017-12-4 20:47
问题解决了吗?

没解决呢
作者: 777shenhuxi    时间: 2017-12-5 15:29
定位报错了吗?
如果定位没问题,试试模拟鼠标移动到按钮上,然后用回车;
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)#回车
看这样能弹出来不;
后续我就不知道了。
如果可以请回复下。
作者: 王丽萍    时间: 2017-12-5 16:29
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'

作者: Eric_12138    时间: 2018-1-10 17:13
  ele=self.driver.find_elements_by_id('SWFUpload_0')写错了element不用加s




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2