51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 9090|回复: 18
打印 上一主题 下一主题

Selenium webdriver 如何获取弹出框上的元素

[复制链接]
  • TA的每日心情
    郁闷
    2016-12-28 16:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2016-12-27 15:17:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    Chrome上打开百度点击登录后,会弹出一个登录框,可是怎么定位这个弹出框上的元素呢,一直提示Unable to locate element。求各位大神帮忙看看,最近新学selenium
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-15 08:56
  • 签到天数: 1179 天

    连续签到: 1 天

    [LV.10]测试总司令

    推荐
    发表于 2016-12-27 17:09:40 | 只看该作者
    switchTo()一下,焦点切换到弹出的登录框上,然后再定位元素。
    回复 支持 0 反对 1

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-15 08:56
  • 签到天数: 1179 天

    连续签到: 1 天

    [LV.10]测试总司令

    推荐
    发表于 2016-12-28 12:11:21 | 只看该作者
    这个是switchTo方法的说明,不可以看看。不能理解为只能在有frame的时候才使用switchTo方法。

    本帖子中包含更多资源

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

    x
    回复 支持 0 反对 1

    使用道具 举报

    该用户从未签到

    推荐
    发表于 2017-1-9 14:17:30 | 只看该作者
    先定位这个弹出框(xpath地址换一下)
    driver.switch_to_frame(driver.find_element_by_xpath('//iframe[@id="layui-layer-iframe1"]'))
    time.sleep(3)
    再正常定位页面元素
    回复 支持 0 反对 1

    使用道具 举报

    该用户从未签到

    推荐
    发表于 2017-1-9 14:19:40 | 只看该作者
    先定位到这个弹出框(改成你的弹出框xpath地址)
    driver.switch_to_frame(driver.find_element_by_xpath('//iframe[@id="layui-layer-iframe1"]'))
    time.sleep(3)
    再正常的定位页面元素操作
    回复 支持 0 反对 1

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-30 09:35
  • 签到天数: 172 天

    连续签到: 6 天

    [LV.7]测试师长

    推荐
    发表于 2017-3-17 10:09:21 | 只看该作者
    以上说切换到frame的童鞋,不要误导人家。也不要误导自己,不能看到是个弹出框就想着是个iframe框架,要根据具体的页面源码来分析。
    这个登录框同样还是在原有的browser里,不用去做 switch_to.的切换,直接去找就行了
    我去看了看百度的登录,脚本如下:
    browser.get("https://www.baidu.com/")

    els=browser.find_elements_by_tag_name('a')
    for i in els:
        if i.text==u'登录':
            i.click()
            break
    browser.implicitly_wait(10)
    browser.find_element_by_id('TANGRAM__PSP_8__userName').send_keys('test')
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    郁闷
    2016-12-28 16:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    2#
     楼主| 发表于 2016-12-27 15:18:24 | 只看该作者
    IWebDriver driver = new ChromeDriver();

                driver.Navigate().GoToUrl("http://www.baidu.com");

                IWebElement login = driver.FindElement(By.LinkText("登录"));
                login.Click();

                IWebElement reg = driver.FindElement(By.LinkText("立即注册"));

                reg.Click();
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2016-12-28 16:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    5#
     楼主| 发表于 2016-12-28 11:37:08 | 只看该作者
    清晨一缕阳光 发表于 2016-12-27 17:09
    switchTo()一下,焦点切换到弹出的登录框上,然后再定位元素。

    登录框是DIV模式的,我查的资料也有说是不是在不同frame下的,可是我查了下百度的页面元素,也没有找到frame,都是一层层嵌套的div,还是定位不到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2018-1-22 08:48
  • 签到天数: 193 天

    连续签到: 1 天

    [LV.7]测试师长

    10#
    发表于 2017-3-17 10:46:08 | 只看该作者
    首先指正一点:百度登录框是没有iframe的。登录框内的元素需要二次定位,python写法为:driver.find_element_by_class_name("tang-pass-login").find_element_by_name("userName").send_keys("account"),java大同小异。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-3-22 10:48
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    11#
    发表于 2017-3-21 17:46:30 | 只看该作者
    div弹出框不用切换到frame 因为根本就没有。当时这个问题我也卡了很久。
    解决方法:Actions action =new Actions(driver);
                   thread.sleep(3000);
                  action.doubleclick(用xpath定位你要在弹出框中点击的元素).perform;
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2017-10-11 16:52:24 | 只看该作者
    千里月明 发表于 2017-3-21 17:46
    div弹出框不用切换到frame 因为根本就没有。当时这个问题我也卡了很久。
    解决方法:Actions action =new A ...

    你这个能否再仔细说明一下,我最近也遇到这个问题,要测的页面弹出框类似百度,但是百度可以二次定位到,而我要测的那个弹出框却无法定位到,拜托了!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2017-10-11 16:52:23 | 只看该作者
    千里月明 发表于 2017-3-21 17:46
    div弹出框不用切换到frame 因为根本就没有。当时这个问题我也卡了很久。
    解决方法:Actions action =new A ...

    你这个能否再仔细说明一下,我最近也遇到这个问题,要测的页面弹出框类似百度,但是百度可以二次定位到,而我要测的那个弹出框却无法定位到,拜托了!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2018-9-12 10:59:25 | 只看该作者
    lamecho 发表于 2017-3-17 10:09
    以上说切换到frame的童鞋,不要误导人家。也不要误导自己,不能看到是个弹出框就想着是个iframe框架,要根 ...

    大神,登录是找到了,但是现在弹出框还有个‘用户名登录’需要点,这个元素怎么也找不到,麻烦您帮忙解答一下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2018-9-12 11:10:23 | 只看该作者
    Real_小T 发表于 2017-3-17 10:46
    首先指正一点:百度登录框是没有iframe的。登录框内的元素需要二次定位,python写法为:driver.find_elemen ...

    那个“用户名登录”一直点不到呀,大神有没有什么解决办法?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-10-23 17:20
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]测试排长

    16#
    发表于 2018-9-27 14:16:35 | 只看该作者
    from selenium import webdriver
    from time import sleep
    browser=webdriver.Chrome()
    browser.get("https://www.baidu.com")
    browser.find_element_by_xpath('//*[@id="u1"]/a[7]').click()
    sleep(1)      #点击登录后加个等待1s就可以找到了
    browser.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__footerULoginBtn"]').click()
    browser.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__userName"]').send_keys('123456')
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-10-23 17:20
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]测试排长

    17#
    发表于 2018-9-27 14:19:14 | 只看该作者
    13048843947 发表于 2018-9-12 11:10
    那个“用户名登录”一直点不到呀,大神有没有什么解决办法?

    因为元素还没加载出来就点击"用户名登录",所以报找不到元素.点击登录后加个等待时间就解决了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2019-6-12 11:24:19 | 只看该作者
    这个问题我也有遇到过,不是跳转网页跳转窗口的问题,用XPACH是可以抓到元素的,也可以定位元素,但是实际用selenium操作起来就是点击不了,是因为百度设置有屏蔽作用,不允许用自动化工具操作,这里需要开发帮写 一个java的脚本来点击元素
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-26 10:17 , Processed in 0.084115 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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