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

窗口分类:

1.iframe
2.弹窗
3.对话框

常见方法:

1.switchTo()
2.getWindowHandles()

iframe举例:

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

Selenium之特殊窗口切换--iframe,弹窗,对话框_第1张图片

任务:在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("[email protected]");
//      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("[email protected]");
        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();
    }

}

切换窗口

Selenium之特殊窗口切换--iframe,弹窗,对话框_第2张图片

代码:

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 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 tt=window.findElements(By.tagName("li"));
//      driver.switchTo().window(tt.get(2));

        /*
         * 以下代码才是正确的
         * */
        Set 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<>的区别与应用

你可能感兴趣的:(selenium入门,对话框,selenium,class)