51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3965|回复: 33
打印 上一主题 下一主题

python+selenuim2,webdriver

[复制链接]
  • TA的每日心情
    郁闷
    2017-3-14 14:32
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

    跳转到指定楼层
    1#
    发表于 2016-6-21 15:32:49 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    哪位大神能帮帮忙,利用各种取元素的方式,都找不图片中圈出地方的元素,代码总是过不去,提示Traceback (most recent call last):
      File "C:/Users/dy/PycharmProjects/untitled/Login/addCard.py", line 15, in <module>
        login.driver.find_element_by_css_selector("#form1>div.hc_cont>ul>li:nth-child(10)>em").click()
      File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 397, in find_element_by_css_selector
        return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
      File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 707, in find_element
        {'using': by, 'value': value})['value']
      File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 196, in execute
        self.error_handler.check_response(response)
      File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 181, in check_response
        raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.NoSuchElementException: Message: no such element
      (Session info: chrome=42.0.2311.90)
      (Driver info: chromedriver=2.9.248315,platform=Windows NT 6.1 x86_64)

    取元素方法:
    login.driver.find_element_by_xpath('//*[@id="form1"]/div[3]/ul/li[9]/em').click()
    login.driver.find_element_by_css_selector("#form1>div.hc_cont>ul>li:nth-child(10)>em").click()
    以上两种港式都使用过了,但是代码就是到这过不去,哪位高手能给指点一下么?E:\QQ图片20160621152405.png
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2017-3-14 14:32
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

    25#
     楼主| 发表于 2016-6-23 16:18:27 | 只看该作者
    掉渣饼 发表于 2016-6-22 19:46
    有框架的话使用driver.switch_to_frame("框架id"),在你要定位的元素前面加上
    如果你后面定位的元素又不在 ...

    非常感谢,问题解决了,真是谢谢了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-12-24 13:41
  • 签到天数: 314 天

    连续签到: 1 天

    [LV.8]测试军长

    24#
    发表于 2016-6-22 19:46:48 | 只看该作者
    有框架的话使用driver.switch_to_frame("框架id"),在你要定位的元素前面加上
    如果你后面定位的元素又不在这个框架中,要跳出这个框架使用driver.switch_to_default_content()
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2017-3-14 14:32
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

    23#
     楼主| 发表于 2016-6-22 18:14:17 | 只看该作者
    若尘_51 发表于 2016-6-22 17:34
    (1) 尝试换别的浏览器:火狐或IE。
    (2) 尝试能不能定位到本页的其他元素,看看脚本是不是已经切换到 ...

    我的火狐不知道为什么,只能打开浏览器,不能进行操作,连输入网址都不行
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2017-3-14 14:32
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

    22#
     楼主| 发表于 2016-6-22 18:13:06 | 只看该作者
    若尘_51 发表于 2016-6-22 17:34
    (1) 尝试换别的浏览器:火狐或IE。
    (2) 尝试能不能定位到本页的其他元素,看看脚本是不是已经切换到 ...

    今天问了一下前端,说是用了iframe框架,实在抱歉,耽误你这么长时间,能给说一下iframe框架怎么实现元素定位么?

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-12-24 13:41
  • 签到天数: 314 天

    连续签到: 1 天

    [LV.8]测试军长

    21#
    发表于 2016-6-22 17:37:41 | 只看该作者
    脚本一:
    #coding=utf-8
    from selenium import webdriver
    import time
    #登录sso,进入会员中心
    driver = webdriver.Chrome()
    driver.get("网址")
    time.sleep(5)
    driver.find_element_by_id("fir_li").click()
    driver.find_element_by_id("tel_login").clear()
    driver.find_element_by_id("tel_login").send_keys("用户名")
    driver.find_element_by_id("pwd_login").clear()
    driver.find_element_by_id("pwd_login").send_keys("密码")
    driver.find_element_by_id("new_mobilelogin").click()
    time.sleep(5)
    driver.find_element_by_xpath('//*[@id="form1"]/div[3]/ul/li[9]/em').click()

    脚本二:
    #coding=utf-8
    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.action_chains import ActionChains
    import time
    #登录sso,进入会员中心
    driver = webdriver.Chrome()
    driver.get("网址")
    time.sleep(5)
    driver.find_element_by_id("fir_li").click()
    driver.find_element_by_id("tel_login").clear()
    driver.find_element_by_id("tel_login").send_keys("用户名")
    driver.find_element_by_id("pwd_login").clear()
    driver.find_element_by_id("pwd_login").send_keys("密码")
    driver.find_element_by_id("new_mobilelogin").click()
    WebDriverWait(driver, 10).until(lambda the_driver: the_driver.find_element_by_class_name("clearfix").is_displayed())
    menu=driver.find_element_by_class_name("clearfix").find_element_by_link_text("建设银行")
    ActionChains(driver).double_click(menu).perform()

    这两个脚本你都试试,看行不
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-11-7 16:44
  • 签到天数: 290 天

    连续签到: 1 天

    [LV.8]测试军长

    20#
    发表于 2016-6-22 17:34:03 | 只看该作者
    dy569464507 发表于 2016-6-22 16:09
    #coding=utf-8
    from selenium import webdriver
    import time

    (1) 尝试换别的浏览器:火狐或IE。
    (2) 尝试能不能定位到本页的其他元素,看看脚本是不是已经切换到当前页面。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-11-7 16:44
  • 签到天数: 290 天

    连续签到: 1 天

    [LV.8]测试军长

    19#
    发表于 2016-6-22 17:20:46 | 只看该作者
    dy569464507 发表于 2016-6-22 16:07
    driver.find_element_by_css_selector("em.8").click()
    selenuim IDE中导出的是这个,但是,我也试了, ...

    异常:  selenium.common.exceptions.ElementNotSelectableException(msg=None, screen=None, stacktrace=None)
    依据:     selenium.common.exceptions.InvalidElementStateException
             当尝试选择一个未能选中的元素时,异常会抛出


    请问下你这个定位的是什么元素?  链接还是?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-11-7 16:44
  • 签到天数: 290 天

    连续签到: 1 天

    [LV.8]测试军长

    18#
    发表于 2016-6-22 17:20:39 | 只看该作者
    dy569464507 发表于 2016-6-22 16:07
    driver.find_element_by_css_selector("em.8").click()
    selenuim IDE中导出的是这个,但是,我也试了, ...

    异常:  selenium.common.exceptions.ElementNotSelectableException(msg=None, screen=None, stacktrace=None)
    依据:     selenium.common.exceptions.InvalidElementStateException
             当尝试选择一个未能选中的元素时,异常会抛出


    请问下你这个定位的是什么元素?  链接还是?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2017-3-14 14:32
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

    17#
     楼主| 发表于 2016-6-22 16:09:28 | 只看该作者
    掉渣饼 发表于 2016-6-22 15:35
    我建议你先把登录脚本直接放到里面,试试
    #coding=utf-8
    你登录脚本中引入的东西

    #coding=utf-8
    from selenium import webdriver
    import time
    #登录sso,进入会员中心
    driver = webdriver.Chrome()
    driver.get("网址")
    time.sleep(5)
    driver.find_element_by_id("fir_li").click()
    driver.find_element_by_id("tel_login").clear()
    driver.find_element_by_id("tel_login").send_keys("用户名")
    driver.find_element_by_id("pwd_login").clear()
    driver.find_element_by_id("pwd_login").send_keys("密码")
    driver.find_element_by_id("new_mobilelogin").click()
    这是我登录的脚本
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2017-3-14 14:32
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

    16#
     楼主| 发表于 2016-6-22 16:07:14 | 只看该作者
    若尘_51 发表于 2016-6-22 13:43
    真的看不出什么错误的,你用Selenium IDE录制你的操作,导出python-unittest-webdriver脚本,看看脚本跟 ...

    driver.find_element_by_css_selector("em.8").click()
    selenuim IDE中导出的是这个,但是,我也试了,还是不行,说不是有效的

    问题:selenium.common.exceptions.InvalidElementStateException: Message: invalid element state: Failed to execute 'querySelector' on 'Document': 'em.8' is not a valid selector.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-12-24 13:41
  • 签到天数: 314 天

    连续签到: 1 天

    [LV.8]测试军长

    15#
    发表于 2016-6-22 15:35:46 | 只看该作者
    我建议你先把登录脚本直接放到里面,试试
    #coding=utf-8
    你登录脚本中引入的东西
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.action_chains import ActionChains

    登录脚本

    WebDriverWait(driver, 10).until(lambda the_driver: the_driver.find_element_by_class_name("clearfix").is_displayed())
    menu=driver.find_element_by_class_name("clearfix").find_element_by_link_text("建设银行")
    ActionChains(driver).double_click(menu).perform()

    或者你把你登录脚本贴出来看下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-11-7 16:44
  • 签到天数: 290 天

    连续签到: 1 天

    [LV.8]测试军长

    14#
    发表于 2016-6-22 13:43:05 | 只看该作者
    dy569464507 发表于 2016-6-22 13:18
    # -*- coding: UTF-8 -*-
    import login
    # import time

    真的看不出什么错误的,你用Selenium IDE录制你的操作,导出python-unittest-webdriver脚本,看看脚本跟你的哪里不一样~~      
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2017-3-14 14:32
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

    13#
     楼主| 发表于 2016-6-22 13:18:37 | 只看该作者
    若尘_51 发表于 2016-6-22 08:40
    贴出对应的脚本看看吧。   (或浏览器试了吗?)

    # -*- coding: UTF-8 -*-
    import login
    # import time
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.action_chains import ActionChains

    login.driver.find_element_by_xpath("/html/body/div[5]/div[2]/div[11]/div").click()
    text = login.driver.find_element_by_xpath('//*[@id="form1"]/div[3]/ul/li[10]/em').text
    print(text)
    login.driver.find_element_by_xpath('//*[@id="form1"]/div[3]/ul/li[9]/em').click()
    这是我的脚本
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2017-3-14 14:32
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

    12#
     楼主| 发表于 2016-6-22 13:17:26 | 只看该作者
    掉渣饼 发表于 2016-6-22 09:47
    WebDriverWait(login, 10).until(lambda the_driver: the_driver.find_element_by_class_name("clearfix"). ...

    #coding=utf-8
    import login

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.action_chains import ActionChains

    login.driver.find_element_by_xpath("/html/body/div[5]/div[2]/div[11]/div").click()
    '''text = login.driver.find_element_by_xpath('//*[@id="form1"]/div[3]/ul/li[10]/em').text
    print(text)
    login.driver.find_element_by_xpath('//*[@id="form1"]/div[3]/ul/li[9]/em').click()'''

    WebDriverWait(login, 10).until(lambda the_driver: login.driver.find_element_by_class_name("clearfix").is_displayed())
    menu=login.driver.find_element_by_class_name("clearfix").find_element_by_link_text(u"建设银行")
    ActionChains(login).double_click(menu).perform()

    这是我写的代码,我把您给我的代码放进去了,但是这段代码还是提示menu=login.driver.find_element_by_class_name("clearfix").find_element_by_link_text(u"建设银行")找不元素。
    问题:Traceback (most recent call last):
      File "C:/Users/dy/PycharmProjects/untitled/Login/addCard.py", line 13, in <module>
        menu=login.driver.find_element_by_class_name("clearfix").find_element_by_link_text(u"寤鸿閾惰")
      File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 160, in find_element_by_link_text
        return self.find_element(by=By.LINK_TEXT, value=link_text)
      File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 468, in find_element
        {"using": by, "value": value})['value']
      File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 448, in _execute
        return self._parent.execute(command, params)
      File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 196, in execute
        self.error_handler.check_response(response)
      File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 181, in check_response
        raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.NoSuchElementException: Message: no such element

    ps:login是我写的登录脚本
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-12-24 13:41
  • 签到天数: 314 天

    连续签到: 1 天

    [LV.8]测试军长

    11#
    发表于 2016-6-22 09:47:39 | 只看该作者
    WebDriverWait(login, 10).until(lambda the_driver: the_driver.find_element_by_class_name("clearfix").is_displayed())
    menu=login.find_element_by_class_name("clearfix").find_element_by_link_text("建设银行")
    webdriver.ActionChains(login).double_click(menu).perform()

    前提是要导入
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.action_chains import ActionChains

    如果不行把webdriver.ActionChains(login).double_click(menu).perform()替换成ActionChains(login).double_click(menu).perform()
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-11-7 16:44
  • 签到天数: 290 天

    连续签到: 1 天

    [LV.8]测试军长

    10#
    发表于 2016-6-22 08:40:37 | 只看该作者
    dy569464507 发表于 2016-6-21 17:34
    text = login.driver.find_element_by_xpath('//*[@id="form1"]/div[3]/ul/li[10]/em').text
    print(text ...

    贴出对应的脚本看看吧。   (或浏览器试了吗?)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2017-3-14 14:32
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

    9#
     楼主| 发表于 2016-6-21 18:11:20 | 只看该作者
    掉渣饼 发表于 2016-6-21 16:20
    如果没有框架和窗口节点,你可以试试login.driver.find_element_by_xpath('//*[@id="form1"]/div[3]/ul/li[ ...

    加time我试过了,不行,就是找不到要的元素
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2017-3-14 14:32
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]测试连长

    8#
     楼主| 发表于 2016-6-21 17:34:28 | 只看该作者
    若尘_51 发表于 2016-6-21 16:27
    可以尝试下:
    (1)你的建设银行是在第十个li
    login.driver.find_element_by_xpath('//*[@id="form1"]/ ...

    text = login.driver.find_element_by_xpath('//*[@id="form1"]/div[3]/ul/li[10]/em').text
    print(text)
    我这么试了,打印不出来,还有什么办法么?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-11-7 16:44
  • 签到天数: 290 天

    连续签到: 1 天

    [LV.8]测试军长

    7#
    发表于 2016-6-21 16:27:41 | 只看该作者
    dy569464507 发表于 2016-6-21 15:58
    图附上了,我在回复里弄上的,您看一下

    可以尝试下:
    (1)你的建设银行是在第十个li
    login.driver.find_element_by_xpath('//*[@id="form1"]/div[3]/ul/li[9]/em').click()
    (2)定位到li层
    (3)看看能不能打印出来
    text = login.driver.find_element_by_xpath('//*[@id="form1"]/div[3]/ul/li[10]/em').text
    print text
    (4)你用的谷歌浏览器,换火狐浏览器试试~~  有可能是浏览器的问题


    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-23 21:13 , Processed in 0.088332 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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