51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 3782|回复: 7
打印 上一主题 下一主题

python+selenium 如何定位隐藏的页面元素

[复制链接]
  • TA的每日心情
    慵懒
    2017-5-25 13:57
  • 签到天数: 29 天

    连续签到: 1 天

    [LV.4]测试营长

    跳转到指定楼层
    1#
    发表于 2016-8-30 21:13:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 若希晴 于 2016-8-31 09:46 编辑

    新手上路~~求问如何使用python+selenium定位隐藏的页面元素
    如:定位【百度首页】-【设置】-【搜索设置】
    代码:
    #coding:utf-8
    from selenium import webdriver
    import time

    driver=webdriver.Chrome()
    driver.implicitly_wait(30)
    driver.get('https://www.baidu.com/')
    driver.maximize_window()

    driver.find_element_by_link_text(u"设置").click()
    time.sleep(5)
    driver.find_element_by_xpath("/html/body/div[3]/div[5]/a[1]").click()
    driver.quit()

    报错:
    Traceback (most recent call last):
      File "F:/hello.py", line 12, in <module>
        driver.find_element_by_xpath("/html/body/div[3]/div[5]/a[1]").click()
      File "D:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 72, in click
        self._execute(Command.CLICK_ELEMENT)
      File "D:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 461, in _execute
        return self._parent.execute(command, params)
      File "D:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
        self.error_handler.check_response(response)
      File "D:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response
        raise exception_class(message, screen, stacktrace)
    ElementNotVisibleException: Message: element not visible
      (Session info: chrome=51.0.2704.106)
      (Driver info: chromedriver=2.9.248315,platform=Windows NT 6.1 SP1 x86)


    之后修改成:
    #coding:utf-8
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    import time

    driver=webdriver.Chrome()
    driver.implicitly_wait(30)
    driver.get('https://www.baidu.com/')
    driver.maximize_window()

    ele=driver.find_element_by_link_text(u"设置")
    ActionChains(driver).move_to_element(ele).perform()
    time.sleep(5)
    driver.find_element_by_xpath("/html/body/div[3]/div[5]/a[1]").click()
    time.sleep(5)
    driver.quit()

    第一次运行未报错,第二次运行仍出现和上面一样的错误  
    求大神指点~~~
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

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

    连续签到: 1 天

    [LV.8]测试军长

    2#
    发表于 2016-8-31 08:30:44 | 只看该作者
    你第一个的脚本没问题:
    #coding:utf-8
    from selenium import webdriver
    import time

    driver=webdriver.Chrome()
    driver.implicitly_wait(30)
    driver.get('https://www.baidu.com/')
    driver.maximize_window()

    driver.find_element_by_link_text(u"设置").click()
    time.sleep(5)
    driver.find_element_by_xpath("/html/body/div[3]/div[5]/a[1]").click()
    time.sleep(5)
    driver.quit()

    第一个脚本加个延时,一直都可以啊。

    评分

    参与人数 1测试积点 +10 收起 理由
    lsekfe + 10 积极回复获得测试积点10

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-5-25 13:57
  • 签到天数: 29 天

    连续签到: 1 天

    [LV.4]测试营长

    3#
     楼主| 发表于 2016-8-31 09:39:41 | 只看该作者
    若尘_51 发表于 2016-8-31 08:30
    你第一个的脚本没问题:
    #coding:utf-8
    from selenium import webdriver

    不可以啊  报错:
        raise exception_class(message, screen, stacktrace)
    ElementNotVisibleException: Message: element not visible
      (Session info: chrome=51.0.2704.106)
      (Driver info: chromedriver=2.9.248315,platform=Windows NT 6.1 SP1 x86_64)
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.8]测试军长

    4#
    发表于 2016-8-31 09:55:13 | 只看该作者
    若希晴 发表于 2016-8-31 09:39
    不可以啊  报错:
        raise exception_class(message, screen, stacktrace)
    ElementNotVisibleExcepti ...

    好吧 我错了。 确实有这种情况,是因为第一个延时太久了,导致那个选项隐藏了,将延时设小点:
    time.sleep(0.5)
    driver.find_element_by_xpath("/html/body/div[3]/div[5]/a[1]").click()
    time.sleep(5)
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.8]测试军长

    5#
    发表于 2016-8-31 13:10:07 | 只看该作者
    试试下面的方法
    #coding:utf-8
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.support.ui import WebDriverWait
    import time

    driver=webdriver.Chrome()
    driver.implicitly_wait(30)
    driver.get('https://www.baidu.com/')
    driver.maximize_window()
    time.sleep(5)
    #点击设置链接
    driver.find_element_by_link_text(u"设置").click()
    #找到搜索设置的父元素
    WebDriverWait(driver,10).until(lambda the_driver:
    the_driver.find_element_by_class_name('bdpfmenu').is_displayed())
    #在父元素下找到搜索设置
    ComboBox=driver.find_element_by_class_name('bdpfmenu').find_element_by_class_name('setpref')
    #鼠标定位到搜索设置并双击
    ActionChains(driver).double_click(ComboBox).perform()
    time.sleep(5)
    driver.quit()
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-5-25 13:57
  • 签到天数: 29 天

    连续签到: 1 天

    [LV.4]测试营长

    6#
     楼主| 发表于 2016-8-31 19:43:04 | 只看该作者
    若尘_51 发表于 2016-8-31 09:55
    好吧 我错了。 确实有这种情况,是因为第一个延时太久了,导致那个选项隐藏了,将延时设小点:
    time.sle ...

    延时设小,还是报一样的错误╮(╯_╰)╭
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-5-25 13:57
  • 签到天数: 29 天

    连续签到: 1 天

    [LV.4]测试营长

    7#
     楼主| 发表于 2016-8-31 19:43:37 | 只看该作者
    掉渣饼 发表于 2016-8-31 13:10
    试试下面的方法
    #coding:utf-8
    from selenium import webdriver

    可以了~非常感谢
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-5-6 16:29 , Processed in 0.066324 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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