51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 6657|回复: 8
打印 上一主题 下一主题

Selenium遇到弹出的iframe框,如何才能点击到iframe上的内容?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-3-8 13:52:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
页面上点击按钮后,弹出一个框,如何点击到里面的内容?(见图总选中的地方)
这里貌似有两层iframe。
谢谢。

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情

    2015-4-9 17:10
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    2#
    发表于 2012-3-8 18:10:03 | 只看该作者
    先用int i = getXpathCount(xptah iframe)-1 个数
    for(int c = 1 ; c<=i;c++)
    {
           if(!isTextPresent(iframe 中的文字))
           {
             selectFrame("index=" +c)
            }
            else
            {
                 break;
            }
    }
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
     楼主| 发表于 2012-3-9 12:08:45 | 只看该作者
    谢谢楼上的。
    昨天我尝试了其他的方法,成功了。
    我使用的是 driver.switchTo().frame("availFrame");
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2015-4-9 17:10
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    4#
    发表于 2012-3-9 13:21:13 | 只看该作者
    没什么
    我的是RC 的方法
    不是driver
    我觉得driver不怎么灵活,所以不怎么用它
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
     楼主| 发表于 2012-3-9 15:29:34 | 只看该作者
    我是用的是webdriver,最终后来,在webdriver中还是用到了1.x的方法
    ......
    this.driver = new InternetExplorerDriver();
    this.selenium = new WebDriverBackedSelenium(driver,loginURL);
    ......
    driver.switchTo().frame("xxxxx");
    selenium.click("id=xxxxx");
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
    发表于 2012-3-16 16:29:35 | 只看该作者
    你可以重写selenium机制。使用:getEval 方法
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
    发表于 2012-4-3 15:13:01 | 只看该作者
    个人觉得对于有iframe的页面用webDriver不是很爽啊~频繁的选择frame退出frame真繁琐,还是比较喜欢selenium的方式(当然我是习惯用xpath)。。。
    对于5楼所说的webDriver转selenium的方式其实只是采用了河selenium1.0大体相同的一些api接口,方便selenium1.0的用户的使用习惯,到底层依然是通过webDriver的方式进行的。和selenium1.0差别太大。。

    对于纯selenium的方式而言,基本可以告别大多数的选择frame
    当然你要选frame也可以,只是很繁琐,记住这个原则
    有A  B  C 三个frame,另外还有一个最跟层top,在A与C之上,即top包含A与C
    A 包含B      A与C平行

    到达当前页面默认是在top,此时selenium可以直接很方便的选择ABC任何frame的东西(当然xpath要唯一且正确),例如B内有控件F,你其实可以直接根据F的属性选择(//F[@id='XXXX']等),无需要先selectFrame(B)的操作
    当然你要先selectFrame(B)也不会错,但后面你就会有问题了,如果你选择了frameB ,此时如果你需要再继续选择A或C的其他控件的话,那你得先退出frameB,再选择,这不是多此一举么。。。。
    如果不选择frameB,就根本不需要这样繁琐的操作,直接操作Bframe的F控件,也可以直接操作A或Cframe的其它控件。。。。

    而相对于webDriver......方正我遇到的情况,有frame的页面,类似于上面的例子,就必须这样来回的选frame,退frame,烦死个人啊
    ,反正目前还没找到解决方法,可能我水平太低,等待高手

    这也是我为什么推荐selenium,不建议选frame操作的原因
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2012-4-12 22:01:51 | 只看该作者
    换来换去都是差不多几句话
    driver.switchTo().frame("framename");
    driver.switchTo().frame("framename.0.child");

    selenium.selectFrame("iframe");
    selenium.type("//body","123456");
    selenium.selectFrame("relative=parent");
    selenium.click("//input[@class='发布']");
    选择框架时还有其他常用的定位:
    relative=parent
    relative=top
    index=0,index=1,...
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2012-4-12 22:04:12 | 只看该作者
    selectwindow 和selectframe 都差不多
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-24 05:24 , Processed in 0.077342 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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