Selenium之特殊窗口切换--iframe,弹窗,对话框

来源:互联网 发布:ubuntu开机grub命令行 编辑:程序博客网 时间:2024/06/04 00:53

窗口分类:

1.iframe2.弹窗3.对话框

常见方法:

1.switchTo()2.getWindowHandles()

iframe举例:

慕课网路径:登录后主页头像-我的课程-wiki-创建词条如下图就是一个iframe窗口

这里写图片描述

任务:在iframe窗口下输入一段文字:

代码:

package com.wushuai.test;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class WindowTest {    public WebDriver driver;    //初始化chrome浏览器驱动    public void initDriver()     {        System.setProperty("webdriver.chrome.driver", "D:\\java\\chromedriver-32\\chromedriver.exe");        //初始化chrome浏览器        driver=new ChromeDriver();        driver.get("http://www.imooc.com/user/newlogin/from_url/");        //屏幕最大化        driver.manage().window().maximize();    }    /*     * 输入用户名与密码并且登录     *      * */    public void inputBox() {//      //输入账号//      driver.findElement(By.name("email")).sendKeys("123456@qq.com");//      try {//          //睡眠两秒//          Thread.sleep(2000);//      } catch (InterruptedException e) {//          // TODO Auto-generated catch block//          e.printStackTrace();//      }//      //清除账号//      driver.findElement(By.name("email")).clear();//      String s=driver.findElement(By.name("email")).getAttribute("placeholder");//      //打印信息//      System.out.println(s);//      /*//       * //       * 输入用户名与密码并点击登录//       * //       * 这里主要是为了在个人设置操作打下铺垫//       * */        driver.findElement(By.name("email")).sendKeys("m13031155057@163.com");        driver.findElement(By.name("password")).sendKeys("123456");        driver.findElement(By.className("btn-red")).click();;        try {            //睡眠两秒            Thread.sleep(2000);        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    /*     * 切换窗口方法     * */    public void iframeTest() {        //进入iframe窗口页面        driver.get("http://www.imooc.com/wiki/create");        //必须找到我们iframe的id        WebElement iframe=driver.findElement(By.id("ueditor_0"));        //找到后切换到这个页面        driver.switchTo().frame(iframe);        //切换到这个页面后,找到这个页面中的Tag标签并在其内输入"Hello World",注意由于里面只有一个body且body内元素标签        //很少,所以最好定位到标签内        driver.findElement(By.tagName("body")).sendKeys("Hello World!");    }    public static void main(String[] args) {        // TODO Auto-generated method stub        WindowTest wt=new WindowTest();        wt.initDriver();        wt.inputBox();        wt.iframeTest();    }}

切换窗口

这里写图片描述

代码:

ackage com.wushuai.test;import java.util.List;import java.util.Set;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.interactions.Actions;public class WindowTest2 {    public WebDriver driver;    public String wH;    //初始化chrome浏览器驱动,并且让chrome浏览器打开慕课网首页    public void initDriver()     {        System.setProperty("webdriver.chrome.driver", "D:\\java\\chromedriver-32\\chromedriver.exe");        //初始化chrome浏览器        driver=new ChromeDriver();        driver.get("http://www.imooc.com/");        //屏幕最大化        driver.manage().window().maximize();    }    /*     * 使用Action执行鼠标左击,右击,双击,悬停操作     *      * */    public void actionTest() {        //找到我们慕课网首页包含前段开发,后端开发,移动开发等着一系列条目的className        WebElement login=driver.findElement(By.className("menuContent"));        //List集合接收前段开发,后端开发,移动开发的条目,注意用的是findElements不是findElement,多一个"s"        List<WebElement> elements=login.findElements(By.className("item"));        //创建动作对象,并且指定操作的浏览器        Actions actions=new Actions(driver);        //单击操作传入参数,并且使用perform()提交,生效        //actions.click(login).perform();        //双击操作        //actions.doubleClick(login).perform();        //右击操作        //actions.contextClick(login).perform();        //actions.moveToElement().perform();        //鼠标悬停在List集合的第一个元素即"前段开发"        actions.moveToElement(elements.get(0)).perform();        //得到当前的窗口        wH=driver.getWindowHandle();        //点击"前段开发"中包含的"HTML/CSS"条目        driver.findElement(By.partialLinkText("HTML/CSS")).click();    }    /*     * 窗口     * */    public void windowHandle()    {        //采用如下方法,会报错:no such element: Unable to locate element: {"method":"tag name","selector":"案例"}        //主要还是父子元素出错        //driver.findElement(By.tagName("案例")).click();        //那么我们采用如下代码还是不会通过,原因主要是我们这里操作的是窗口值String类型,而不是之前类似的条目元素值//      WebElement window=driver.findElement(By.className("bd"));//      List<WebElement> tt=window.findElements(By.tagName("li"));//      driver.switchTo().window(tt.get(2));        /*         * 以下代码才是正确的         * */        Set<String> handles=driver.getWindowHandles();        for(String s:handles) {            if(s.equals(wH))            {                continue;            }            System.out.println(s);            driver.switchTo().window(s);        }        driver.findElement(By.linkText("案例")).click();    }    public static void main(String[] args) {        WindowTest2 wt2=new WindowTest2();        wt2.initDriver();        wt2.actionTest();        wt2.windowHandle();    }}

总结:

1.注意窗口的iframe,弹出框等应用2.注意窗口类元素集合Set<>与常见集合List<>的区别与应用
原创粉丝点击