selenium之三大切换

在测试工作当中经常会遇到代码抛出NoSuchElementException异常,根据经验,抛出该异常的原因如下:
1. 元素定位表达式错误
2. 元素未加载出来
3. 元素存在与另一个html页面当中
4. 元素存在与另一个windows窗口当中

第一个原因好解决,第二个添加等待时间即可,如果不知如何添加,请点击链接进入等待时间添加一节链接:selenium之三大等待
第三和第四种原因需要切换iframe或windows窗口,涉及知识点如下:

三大切换:
切换iframe
切换alter
切换windows窗口

1. 切换iframe

在html中会存在内嵌的html,及iframe,在查找某些元素时需要切换到iframe中(先定位到iframe,后切换),在对元素进行操作,操作完成之后还需回到原来的html页进行元素操作
● 切换到内嵌的html中

WebElement iframeElement = driver.findElement(By.xpath("//iframe[contains(@src,'low_login_enable=1')]"));

//切换到iframe

driver.switchTo().frame(iframeElement);

● 返回到父级html

driver.switchTo().parentFrame();

● 返回到默认的html中

driver.switchTo().defaultContent();

2.切换Alert

alert为浏览器插件,开发者工具中无法定位到,因此需要切换到Alert中进行相关元素操作

 driver.findElement(By.id("abtn")).click();
//切换alert
Alert alert = driver.switchTo().alert();

常用API

//获得警告弹框中的提示语
alert.getText();
//点击确认按钮
alert.accept();
//取消
alert.dismiss();

3.切换window

当我们在页面中点击一个a链接时,有两种情形:

  1. 在当前窗口加载新页面内容
  2. 新建一个窗口加载新页面内容,这种情况在 a 标签有 target=“_blank” 时触发
    当发生第2种情况时,同iframe类似,我们需要切换窗口,

切换方式:
传入要操作窗口的handle句柄 --窗口的标识,唯一,并且是一串字符串

driver.switchTo.window(nameOrHandle);

如何获取到句柄

driver.getWindowHandle();//获取当前操作窗口的句柄-返回值类型为set,无序
driver.getWindowHandles();//获取测试时打开的所有窗口句柄
//公共窗口切换方法
    public static void switchWindow(String title){
        Set<String> allHandles = driver.getWindowHandles();
        for (String handle:allHandles){
            //判断是不是对应的句柄(根据什么来判断)
            if(driver.getTitle().equals(title)){
                //符合,跳出循环
                break;
            }else {
                //切换窗口
                driver.switchTo().window(handle);
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值