51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1299|回复: 0
打印 上一主题 下一主题

Selenium 浏览器之间转换

[复制链接]
  • TA的每日心情
    郁闷
    2022-8-29 14:43
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2018-2-24 16:40:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    通过句柄转换浏览器
    1. driver.switchTo().window(句柄字符串)
    复制代码
    首先要获得当前浏览器,也就是主页面的句柄:
    1. String currenthandle = driver.getWindowHandle();
    复制代码
    然后,会通过某个操作触发打开新页面,此时新页面的句柄未知,需要获得新页面的句柄,来定位
    浏览器,再进行后续操作,定位新浏览器句柄:

    方法一思路:打开新浏览器前,获取主浏览器句柄,如上代码。触发操作弹出新的浏览器之后,将
    所有一打开的浏览器句柄,放在一个集合里,遍历集合,如果句柄不等于主浏览器句柄,则定位该
    浏览器。


    //将所有浏览器句柄保存在集合allhandles中

    1. Set<String> allhandles;
    2.      allhandels=driver.getWindowHandles();
    复制代码
    //遍历集合,每次遍历的值放在windowsid里面,比较是否与主浏览器句柄一致,不一致则获得新浏
    览器句柄,换到新的浏览器上
    1. for(String windowid:allhandels){
    2.     if(currenthandle.equals(windowid)){}
    3.     else{
    4.         driver.switchTo().window(windowid);
    5.         }
    6.     }
    7. //返回主浏览器
    8. driver.switchTo().window(currenthandle);
    复制代码
    方法二思路:打开新浏览器前,获取主浏览器句柄,如最上面代码。触发操作弹出新的浏览器之后,
    将所有一打开的浏览器句柄,放在一个迭代器里,访问迭代器的序列,第一个值是主页面,第二个
    值就是新打开页面的句柄。

    //将所有句柄放在迭代器it中

    1. Iterator<String> it = driver.getWindowHandles().iterator();

    2. //访问迭代序列中的第一个值

    3. it.next();

    4. //访问迭代序列中的第二个值,作为句柄,定位浏览器

    5. driver.switchTo().window(it.next());

    6. //返回主浏览器

    7. driver.switchTo().window(currenthandle);
    复制代码
    没有搞懂迭代器的存储顺序为什么是先保存第一个浏览器句柄,之后是第二个,而且迭代器是单向访
    问的,个人不习惯用这个,但是也可以实现切换浏览器。
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-17 22:42 , Processed in 0.065906 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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