Selenium WebDriver 常用API

public class Demo1 {

    WebDriver driver;
    
    @BeforeMethod
    public void visit(){
        //webdriver对象的声明
        System.setProperty("webdriver.chrome.driver", "e:\\chromedriver.exe");
        driver = new ChromeDriver();
    }
    
    //页面操作,返回上一个页面,前进,刷新
    @Test
    public void VisitRecentUrl(){
        String url1 = "http://www.baidu.com";
        String url2 = "http://www.sina.com";
        driver.navigate().to(url1);
        driver.navigate().to(url2);
        driver.navigate().back();//返回到上一个页面
        driver.navigate().forward();//前进到下一页面
        driver.navigate().refresh();//刷新当前页面
        driver.close();
    }
    
    //操作浏览器窗口
    @Test
    public void operateBrower(){
        //设置浏览器的横纵坐标
        Point point = new Point(150, 150);
        //设置浏览器的宽高
        Dimension dimension = new Dimension(500, 500);
        driver.manage().window().setPosition(point);
        driver.manage().window().setSize(dimension);
        System.out.println(driver.manage().window().getPosition());
        System.out.println(driver.manage().window().getSize());
        driver.manage().window().maximize();//窗口最大化
        driver.get("http//www.baidu.com");
        driver.close();
    }
    
    //获取页面的title属性
    @Test
    public void getTitle(){
        driver.get("http://www.baidu.com");
        String title = driver.getTitle();
        System.out.println(title);
        Assert.assertEquals("百度一下,你就知道", title);
        driver.close();
    }
    
    //获取页面的URL
    @Test
    public void getCurrentUrl(){
        driver.get("http://www.baidu.com");
        String currentUrl = driver.getCurrentUrl();
        System.out.println(currentUrl);
        driver.close();
    }
    
    //清除文本框中的内容
    //在文本框中输入指定内容
    @Test
    public void clearText() throws InterruptedException{
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        WebElement input = driver.findElement(By.id("text"));
        Thread.sleep(2000);
        input.clear(); //清除文本框中的内容
        try {
            Thread.sleep(3000);
        } catch (Exception e) {
            e.printStackTrace();
        }
        input.sendKeys("selenium自动化测试");//在文本框中输入指定内容
        try {
            Thread.sleep(3000);
        } catch (Exception e) {
            e.printStackTrace();
        }
        driver.close();
    }
    
    //单击按钮
    @Test
    public void clickButton(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        try {
            Thread.sleep(3000);
        } catch (Exception e) {
            e.printStackTrace();
        }
        WebElement button = driver.findElement(By.id("button"));
        button.click();//单击按钮
        driver.close();
    }
    
    //鼠标双击元素
    @Test
    public void doubleClick(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        WebElement inputBox = driver.findElement(By.id("inputBox"));
        //声明Action对象
        Actions builder = new Actions(driver);
        builder.doubleClick(inputBox).build().perform();
        driver.close();
    }
    
    //操作单选下拉列表
    @Test
    public void operateDropList(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        WebElement element = driver.findElement(By.name("fruit"));
        Select dropList = new Select(element);
        //判断下拉列表是否可多选
        Assert.assertFalse(dropList.isMultiple());
        //断言当前选中的选项文本是否为桃子
        Assert.assertEquals("桃子", dropList.getFirstSelectedOption().getText());
        //选中下拉列表中的第2个选项
        dropList.selectByIndex(1);
        Assert.assertEquals("橘子", dropList.getFirstSelectedOption().getText());
        //使用下拉列表选项的value属性值来选中操作
        dropList.selectByValue("lizhi");
        Assert.assertEquals("荔枝", dropList.getFirstSelectedOption().getText());
        //通过选项的文字来进行操作
        dropList.selectByVisibleText("山楂");
        Assert.assertEquals("山楂", dropList.getFirstSelectedOption().getText());
    }
    
    //检查单选列表的选项文字是否条预期
    @Test
    public void checkSelectText(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        WebElement element =driver.findElement(By.name("fruit"));
        Select dropList = new Select(element);
        //将下拉列表中期望出现的选项文字存在list集合中,Arrays.asList 将数组转换为list对象
        String[] arr = {"桃子","橘子","荔枝","山楂"};
        List<String> expect_option = Arrays.asList(arr);
        //声明一个新的list,用于存取从页面上获取的所有选 项文字
        List<String> act_option = new ArrayList<>();
        for(WebElement option : dropList.getOptions()){
            act_option.add(option.getText());
            //断言预期对象与实际对象是否完全一致
            Assert.assertEquals(expect_option.toArray(), act_option.toArray());
        }
    }
    
    //操作多选的选择列表
    @Test
    public void opertMultiple(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        //找到页面的下拉列表元素
        WebElement element =driver.findElement(By.name("fruit2"));
        Select dropList = new Select(element);
        //判断下拉列表是否支持多选,支持多选isMultiple返回true
        Assert.assertTrue(dropList.isMultiple());
        //使用选择索引选择橘子选项
        dropList.selectByIndex(1);
        //使用选择value属性选择荔枝选项
        dropList.selectByValue("lizhi");
        //使用选项文字选择山楂
        dropList.selectByVisibleText("山楂");
        
        //取消所有选项的选中状态
        dropList.deselectAll();
        //再次选中3个数据
        dropList.selectByIndex(1);
        dropList.selectByValue("lizhi");
        dropList.selectByVisibleText("山楂");
        //取消索引为1的选项
        dropList.deselectByIndex(1);
        //取消value属性为lizhi的选项
        dropList.deselectByValue("lizhi");
        //取消选项文字为山楂的选项
        dropList.deselectByVisibleText("山楂");
        driver.close();
    }
    
    //操作单选框
    @Test
    public void operateRadio(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        //查找属性值为chengming的单选按钮对象
        WebElement element = driver.findElement(By.xpath("//input[@value='chengming']"));
        //如果这个单选项未被选中,则执行click()方法选中这个按钮
        if(!element.isSelected()){
            element.click();
        }
        //断言属性值为chengming的单选按钮是否处于选中状态
        Assert.assertTrue(element.isSelected());
        
        //查找name属性值为username的所有对象
        List<WebElement> elements = driver.findElements(By.name("username"));
        //查找value属性为lisi的单选按钮对象,如果处于未选中状态,则执行click方法选中
        for(WebElement element2 : elements){
            if(element2.getAttribute("value").equals("lisi")){
                if(!element2.isSelected()){
                    element2.click();
                    //断言单选按钮是否被选中
                    Assert.assertTrue(element2.isSelected());
                    //成功选中后,退出
                    break;
                }
            }
        }
    }
    
    //操作复选框
    @Test
    public void operateCheckBox() throws Exception{
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        //查找属性为汽车的复选框元素
        WebElement element = driver.findElement(By.xpath("//input[@value='bus']"));
        //如果复选框未选中,则选中
        if(!element.isSelected()){
            element.click();
        }
        Assert.assertTrue(element.isSelected());
        //如果复选框被选中,则取消选中
        /*if(element.isSelected()){
            element.click();
        }
        Assert.assertTrue(element.isSelected());*/
        //查找属性为fruit3的元素,并选中
        List<WebElement> list = driver.findElements(By.name("fruit3"));
        for(WebElement checkbox : list){
            checkbox.click();
        }
        Thread.sleep(1000);
        driver.close();
    }
    
    //将当前浏览器窗口截屏
    @Test
    public void screen(){
        driver.get("http://www.baidu.com");
        File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
        try {
            FileUtils.copyFile(file, new File("e:/testing/test.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    //检查页面元素内容是否出现
    @Test
    public void isElementText(){
        //判断p标签内容与selenium自动化测试是否完全匹配
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        WebElement element = driver.findElement(By.xpath("//p[1]"));
        String text = element.getText();
        System.out.println("》》》》》 "+text);
        Assert.assertEquals("selenium自动化测试1", text);
    }
    
    //执行javascript脚本
    @Test
    public void executeJavaScript(){
        driver.get("http:www.baidu.com");
        //声明一个JavaScript执行对象
        JavascriptExecutor js = (JavascriptExecutor) driver;
        String title = (String) js.executeScript("return document.title");
     //System.out.println("expected"+title);
        Assert.assertEquals("百度一下,你就知道", title);
        
        //String bottonText = (String) js.executeScript("var button = document.getElementById('su').type='hidden';");
        String bottonText = (String) js.executeScript("var button = document.getElementById('su');return button.value");

        System.out.println("》》》》》》"+bottonText);
        Assert.assertEquals("百度一下", bottonText);
        driver.close();
    }
}
public class Demo2 {
    
    WebDriver driver;
    
    @BeforeMethod
    public void Visitor(){
        System.setProperty("webdriver.chrome.driver", "e:\\chromedriver.exe");
        driver = new ChromeDriver();
    }
    
    //模拟键盘的操作
    @Test
    public void clickKeys(){
        driver.get("http://www.baidu.com");
        Actions action = new Actions(driver);
        action.keyDown(Keys.CONTROL);//按下ctrl键
        action.keyDown(Keys.SHIFT);//按下shift键
        action.keyDown(Keys.ALT);//按下alt键
        
        action.keyUp(Keys.CONTROL);//释放ctrl键
        action.keyUp(Keys.SHIFT);//释放shift键
        action.keyUp(Keys.ALT);//释放alt键
        
        //模拟键盘在输入框中输入TEST
        action.keyDown(Keys.SHIFT).sendKeys("test").perform();
    }
    
    //模拟鼠标右击事件
    @Test
    public void rightClickMouse(){
        driver.get("http://www.baidu.com");
        Actions action = new Actions(driver);
        //模拟鼠标右击事件
        action.contextClick(driver.findElement(By.id("su"))).perform();
        driver.close();
    }
    
    //在指定元素上方进行鼠标悬浮,及点击悬浮后出现的菜单
    @Test
    public void roverOnElement() throws Exception{
        driver.get("http://www.baidu.com");
        Actions action = new Actions(driver);
        //在指定元素上进行鼠标悬浮
        action.moveToElement(driver.findElement(By.name("tj_briicon"))).perform();;
        Thread.sleep(1000);
        //点击悬浮后出现的菜单
        driver.findElement(By.linkText("糯米")).click();;
        driver.close();
    }
    
    //查看页面元素的属性
    @Test
    public void getWelementAttribute(){
        driver.get("http://www.baidu.com");
        String str = "今天天气不错";
        WebElement input = driver.findElement(By.id("kw"));
        input.sendKeys(str);
        String inputText = input.getAttribute("value");
        System.out.println("....."+inputText);
        Assert.assertEquals(inputText,"今天天气不错");
        driver.close();
    }
    
    //获取页面元素的css属性
    @Test
    public void getWelementCss(){
        driver.get("http://www.baidu.com");
        WebElement input = driver.findElement(By.id("kw"));
        String cssValue = input.getCssValue("width");
        System.out.println("..... "+cssValue);
        driver.close();
    }
    
    //常用的显式等待
    @Test
    public void testWait(){
        //声明一个WebDriverWait对象,设置最长等待时间为10秒
        WebDriverWait wait = new WebDriverWait(driver, 10);
        //判断页面title是否包含“测试页面”4个字
        String str = "测试页面";
        wait.until(ExpectedConditions.titleContains("测试页面"));
        System.out.println("页面标题出现了‘测试页面’4个字");
    }
    
    
    /**
     * 判断页面元素是否存在
     * @param by
     * @return
     */
    //提供一个页面元素是否存在的方法
    public boolean isEelement(By by){
        WebElement element = driver.findElement(by);
        if(element != null){
            return true;
        }
        return false;
    } 
    
    @Test
    public void testIsEelement(){
        driver.get("http://www.baidu.com");
        //System.out.println(driver.getTitle());
        if(isEelement(By.id("kw"))){
            WebElement webElement = driver.findElement(By.id("kw"));
            if(webElement.isEnabled()){
                webElement.sendKeys("百度的首页搜索框被成功找到");
            }
        }else { //将测试用例设置为失败,并打印失败原因
            Assert.fail("页面的输入框元素未找到");
        }
        driver.close();
    }
    
    //使用title属性识别和操作新弹出的浏览器窗口
    @Test
    public void operteWindow(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        //将当前浏览器窗口句柄存在一个变量中
        String parentWindowHandle = driver.getWindowHandle();
        //点击页面上的链接地址
        driver.findElement(By.xpath("//a")).click();
        //获取当前所有打开的窗口的句柄,并存在set中
        Set<String> windowHandles = driver.getWindowHandles();
        if(windowHandles != null){
            for(String windowHandle : windowHandles){
                if(driver.switchTo().window(windowHandle).getTitle().equals("百度一下,你就知道")){
                    driver.findElement(By.id("kw")).sendKeys("百度的首页浏览器窗口被找到");
                }else {
                    Assert.fail("百度的首页浏览器窗口未被找到");
                }
                //返回到最开始打开的浏览器窗口
                driver.switchTo().window(parentWindowHandle);
                Assert.assertEquals(driver.getTitle(),"测试页面");
            }
        }
    }
    
    //使用页面的文字内容识别和处理新弹出的浏览器窗口
    @Test
    public void operteWindowByPageSource(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        //将当前浏览器窗口句柄存在一个变量中
        String parentWindowHandle = driver.getWindowHandle();
        //点击页面上的链接地址
        driver.findElement(By.xpath("//a")).click();
        //获取当前所有打开的窗口的句柄,并存在set中
        Set<String> windowHandles = driver.getWindowHandles();
        for(String windowHandle : windowHandles){
            try {
                if(driver.switchTo().window(windowHandle).getPageSource().contains("百度一下")){
                    driver.findElement(By.id("kw")).sendKeys("百度首页的浏览器窗口被找到");
                }
            } catch (NoSuchWindowException e) {
                e.printStackTrace();
            }
        }
        //返回到最开始打开的浏览器窗口
        driver.switchTo().window(parentWindowHandle);
        Assert.assertEquals(driver.getTitle(),"测试页面");
    }
    
    //操作javascript的Alter窗口
    @Test
    public void operteAlert(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        //查找到按钮元素
        WebElement button = driver.findElement(By.name("btn"));
        button.click();
        
        try {
            //获取alert对象
            Alert alert = driver.switchTo().alert();
            Assert.assertEquals("这是一个alert弹窗", alert.getText());
            //关闭弹窗
            alert.accept();
        } catch (NoAlertPresentException e) {
            Assert.fail("页面alert弹窗未找到");
            e.printStackTrace();
        }
    }
    
    //操作javascript的confirm窗口
    @Test
    public void operteConfirm(){
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        driver.findElement(By.name("confirmbtn")).click();
        
        try {
            Alert alert = driver.switchTo().alert();
            Assert.assertEquals("这是一个confirm弹窗", alert.getText());
            alert.accept(); // 点击确定,关闭弹出窗
            //alert.dismiss(); // 点击取消,关闭弹出窗
        } catch (NoAlertPresentException e) {
            Assert.fail("页面confirm弹窗未找到");
            e.printStackTrace();
        }
    }
    
    // 操作javascript的prompt窗口
    @Test
    public void opertePrompt() throws Throwable {
        driver.get("file:///F:/workspace/selenium_day01/text.html");
        driver.findElement(By.name("promptbtn")).click();

        try {
            Alert alert = driver.switchTo().alert();
            Assert.assertEquals("这是一个prompt弹窗", alert.getText());
            alert.sendKeys("好好学习,天天向上");
            Thread.sleep(3000);
            alert.accept();
        } catch (NoAlertPresentException e) {
            Assert.fail("页面prompt弹窗未找到");
            e.printStackTrace();
        }
    }
    
    /**
     * 操作iframe中的页面元素
     */
    @Test
    public void testFrame(){
        driver.get("file:///F:/workspace/selenium_day01/frameset.html");
        //必须先进入左侧frame_left.html页面
        driver.switchTo().frame("leftframe");
        //找到页面上的p标签
        WebElement leftFrameText = driver.findElement(By.xpath("//p"));
        Assert.assertEquals("这是左侧 frame 页面上的文字", leftFrameText.getText());
        
        //从左侧返回到frame_left页面  如果不调用 defaultContent()方法,无法从frame_left进入其他页面
        driver.switchTo().defaultContent();
        //进入frame_middle页面
        driver.switchTo().frame("middleframe");
        WebElement middleFrameText = driver.findElement(By.xpath("//p"));
        Assert.assertEquals("这是中间 frame 页面上的文字", middleFrameText.getText());
        
        driver.switchTo().defaultContent();
        driver.switchTo().frame("rightframe");
        WebElement rightFrameText = driver.findElement(By.xpath("//p"));
        Assert.assertEquals("这是右侧 frame 页面上的文字", rightFrameText.getText());
        
        driver.switchTo().defaultContent();
        driver.switchTo().frame(1);
        WebElement text = driver.findElement(By.tagName("p"));
        //System.out.println(">>>>>>"+ text.getText());
        Assert.assertEquals("这是中间 frame 页面上的文字", text.getText());
        driver.close();
    }
    
    //使用frame中的html源码内容来操作frame
    @Test
    public void testHandleFarme(){
        driver.get("file:///F:/workspace/selenium_day01/frameset.html");
        //找到所有frame标签的内容
        List<WebElement> frames = driver.findElements(By.tagName("frame"));
        for(WebElement frame : frames){
            driver.switchTo().frame(frame);
            //判断frame页面源码中是否包含“中间 frame”
            if(driver.getPageSource().contains("中间 frame")){
                //找到页面P标签页面对象
                WebElement text = driver.findElement(By.xpath("//p"));
                Assert.assertEquals("这是中间 frame 页面上的文字", text.getText());
                break;
            }else {
                //返回frameset页面
                driver.switchTo().defaultContent();
            }
        }
        driver.switchTo().defaultContent();
        driver.close();
    }
}
public class Demo3 {
    WebDriver driver;
    
    @BeforeMethod
    public void Visitor(){
        System.setProperty("webdriver.chrome.driver", "e:\\chromedriver.exe");
        driver = new ChromeDriver();
    }
    
    // 在指定元素上方进行鼠标悬浮,及点击悬浮后出现的菜单
    @Test
    public void roverOnElement() throws Exception {
        driver.get("http://www.baidu.com");
        Actions action = new Actions(driver);
        // 在指定元素上进行鼠标悬浮
        action.moveToElement(driver.findElement(By.name("tj_briicon"))).perform();
        Thread.sleep(1000);
        // 点击悬浮后出现的菜单
        driver.findElement(By.linkText("糯米")).click();
        ;
        driver.close();
    }
    
    // 使用frame中的html源码内容来操作frame
    @Test
    public void testHandleFarme() {
        driver.get("file:///F:/workspace/selenium_demo/src/main/webapp/frameset.html");
        // 找到所有frame标签的内容
        List<WebElement> frames = driver.findElements(By.tagName("frame"));
        for (WebElement frame : frames) {
            driver.switchTo().frame(frame);
            // 判断frame页面源码中是否包含“中间 frame”
            if (driver.getPageSource().contains("中间 frame")) {
                // 找到页面P标签页面对象
                WebElement text = driver.findElement(By.xpath("//p"));
                Assert.assertEquals("这是中间 frame 页面上的文字", text.getText());
                break;
            } else {
                // 返回frameset页面
                driver.switchTo().defaultContent();
            }
        }
        driver.switchTo().defaultContent();
        driver.close();
    }
    
    //操作iframe的页面元素
    @Test
    public void testHandleFarme2(){
        driver.get("file:///F:/workspace/selenium_demo/src/main/webapp/frameset.html");
        driver.switchTo().frame("leftframe");
        //找到包含“这是iframe 页面上的文字”的元素对象
        WebElement iframe = driver.findElement(By.tagName("iframe"));
        //进入iframe页面区域
        driver.switchTo().frame(iframe);
        //在iframe页面找p标签的页面元素
        WebElement p = driver.findElement(By.xpath("//p"));
        Assert.assertEquals("这是iframe 页面上的文字", p.getText());
        driver.close();
    }
    
    //操作浏览器的cookie
    @Test
    public void testCookie(){
        driver.get("http://www.baidu.com");
        //得到当前页面下所有的cookie,并输出所在域、name、value、有效时期和路径
        Set<Cookie> cookies = driver.manage().getCookies();
        Cookie cookie = new Cookie("cookieName", "cookieValue");
        System.out.println(String.format("Domain->name->value->expiry->path"));
        for(Cookie cookie2 : cookies){
            System.out.println(String.format(
                    "%s->%s->%s->%s->%s",
                    cookie2.getDomain(),
                    cookie2.getName(),
                    cookie2.getValue(),
                    cookie2.getExpiry(),
                    cookie2.getPath()
                    ));
        }
        //删除cookie  
        //通过cookie的namen属性删除
        driver.manage().deleteCookieNamed("cookieName");
        //通过cookie对象删除
        driver.manage().deleteCookie(cookie);
        //删除全部cookie
        driver.manage().deleteAllCookies();
    }
}

猜你喜欢

转载自www.cnblogs.com/wakey/p/10862858.html