51Testing软件测试论坛

标题: Selenium 浏览器之间转换 [打印本页]

作者: 恭喜发财dife    时间: 2018-2-24 16:40
标题: Selenium 浏览器之间转换
通过句柄转换浏览器
  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);
复制代码
没有搞懂迭代器的存储顺序为什么是先保存第一个浏览器句柄,之后是第二个,而且迭代器是单向访
问的,个人不习惯用这个,但是也可以实现切换浏览器。





欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2