• 自动化测试Selenium(二)


    接上一篇:自动化测试selenium(一)

    1.信息打印

    (1)打印标题:getTitle()

    (2)打印url:getCurrenUrl()

    public void printtest(){
            //打印标题
            String title = driver.getTitle();
            System.out.println("title:"+title);
            //进入到百度搜索首页,点击新闻连接
            driver.findElement(By.cssSelector("#s-top-left > a:nth-child(1")).click();
            //打印url
            String curUrl = driver.getCurrentUrl();
            System.out.println("url:"+curUrl);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述


    2.窗口

    2.1.句柄

    selenium对每一个标签都给了唯一的标识,称之为句柄

    如果有多个页面打开的话,selenium不知道当前应该操作哪个页面,所以它就会直接操作打开第一个页面,如果我们想要操作新打开的页面,就需要手动操作页面句柄。

    (1)获取当前页面的句柄:getCurrentUrldriver.getWindowHandle(); 返回值类型为:String

            //每个页面都有一个句柄(唯一标识)
            //获取当前页面的句柄
            String curwindow1 = driver.getWindowHandle();
            System.out.println("curwindows-handle:"+curwindow1);
            driver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
            //获取当前页面的句柄2
            String curwindow2 = driver.getWindowHandle();
            System.out.println("curwindows-handle:"+curwindow2);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    (2)获取所有标签页的句柄:getCurrentUrldriver.getWindowHandles();返回值为集合

     //获取所有页面的句柄
            Set<String> allwindows = driver.getWindowHandles();
            for(String window:allwindows){
                if(window != curwindow1){
                    //跳转到该句柄(页面)
                    driver.switchTo().window(window);
                }
                System.out.println("allwindow-handle:" + window);
    
                //打印标题
                String title = driver.getTitle();
                System.out.println("title:"+title);
                //打印url
                String curUrl = driver.getCurrentUrl();
                System.out.println("url:"+curUrl);
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    2.2.窗口的切换

    从所有句柄中选择想要跳转的句柄(页面):

    driver.switchTo().window(页面);括号里面是String类型

    //获取所有页面的句柄
            Set<String> allwindows = driver.getWindowHandles();
            for(String window:allwindows){
                if(window != curwindow1){
                    //跳转到该句柄(页面)
                    driver.switchTo().window(window);
                }
                System.out.println("allwindow-handle:" + window);
    
                //打印标题
                String title = driver.getTitle();
                System.out.println("title:"+title);
                //打印url
                String curUrl = driver.getCurrentUrl();
                System.out.println("url:"+curUrl);
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2.3.窗口大小的设置

    最大化:driver.manage().window().maximize();
    最小化:driver.manage().window().minimize()
    设置指定的尺寸:driver.manage().window.setSize(new Dimension(宽度,高度));

    【注意】selenium不能够直接编译js语言,但是可以使用方法来执行js语言,方法如下:

    driver.executeScript(); 括号的参数为js语言的字符串

    public void windowtest() throws InterruptedException {
            //窗口最大化
            driver.manage().window().maximize();
            Thread.sleep(2000);
            //窗口最小化
            driver.manage().window().minimize();
            Thread.sleep(2000);
            //设置指定宽高
            driver.manage().window().setSize(new Dimension(1000,800));
            Thread.sleep(2000);
    
            
    //置顶与下拉
            driver.executeScript("window.scroll(0,document.body.scrollHeight)");
            Thread.sleep(2000);
            driver.executeScript("window.scroll(0,document.body.scrollTop)");
            Thread.sleep(2000);
    
        }
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    2.4.导航

    selenium里面提供了navigate接口来实现页面的导航

    前进:driver.navigate().forward()
    后退:driver.navigate().back()

    //前进与后退
        public void navigateTest() throws InterruptedException {
            //点击页面,
            driver.findElement(By.cssSelector("#page > div:nth-child(1) > div.tabs-wrap > ul > li:nth-child(2) > a")).click();
            Thread.sleep(2000);
            //后退操作
            driver.navigate().back();
            Thread.sleep(2000);
            //前进操作
            driver.navigate().forward();
            Thread.sleep(2000);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.5.弹窗

    在前端代码里定位到普通的弹窗都可以使用driver.findElement()方法来定位元素

    首先需要切换到警告框:

    Alert alert = driver.switchTo().alert();
    
    • 1

    然后点击确认按钮或取消按钮:

    //确认按钮
    alert.accept();
    alert.dismiss();
    
    • 1
    • 2
    • 3

    如果需要发送信息:

    alert.senKey("");
    
    • 1

    2.6.鼠标和键盘

    首先需要创建一个action对象:

    Actions actions = new Actions(driver);
    
    • 1

    (1)鼠标
    移动到指定元素并且保持:

    actions.clickAndHold(Webelement ele).perform();
    
    • 1

    移动到指定元素并点击:

    actions.click().perform();
    
    • 1

    在这里插入图片描述

    (2)键盘

    senKey("");
    
    • 1

    在这里插入图片描述

    2.7.选择框

    创建对象:

    Select select = new Select(WebElement ele);//ele 需要指定对象才能进行操作
    
    • 1

    有三种方法
    (1)方法一:通过索引来选择

    select.selectByIndex();//括号里面的参数是索引值,从0开始
    
    • 1

    (2)通过value属性来选择

    select.selectByValue("Value");
    
    • 1

    (3)通过可见的元素来选择:

    select.selectByvisibleText("");
    
    • 1

    2.8.文件的上传

    我们在进行文件上传的时候会打开一个系统窗口,但是selenium是不能操作这个系统窗口的。因此这里另辟蹊径,直接使用文件的路径+文件名

    driver.findElement(By).senKeys("文件的路径+文件名");
    
    • 1
    	driver.get("http://localhost:1375/autoTest1/target/testdaima/fileupload.html");
    	driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        //文件上传
        public void fileupload() throws InterruptedException {
            WebElement ele = driver.findElement(By.cssSelector("body > p > input[type=file]"));
            ele.sendKeys("D:\\test\\aa.txt");
            Thread.sleep(3000);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.9.屏幕截图

    这里首先需要说明的一点是:代码的执行速度比页面渲染的速度要更快,因此,如果要想顺利截图,程序不报错的情况下,我们需要添加等待。

    屏幕截图:

    driver.getScreenshotAs(Outpute.x);//x可以是:File,Base64,bytes
    
    • 1

    示例:

     //屏幕截图
        public void screenshotTest() throws IOException {
            //百度搜索关键词并验证结果页
            driver.findElement(By.cssSelector("#kw")).sendKeys("selenium");
            driver.findElement(By.cssSelector("#su")).click();
            //屏幕截图
            File srcfile = driver.getScreenshotAs(OutputType.FILE);
            //将屏幕截图保存在我们指定的路径下
            File filename = new File(".src/test/autoPic/my.png");
            FileUtils.copyFile(srcfile,filename);
            driver.findElement(By.cssSelector("#\\32  > div > div > h3 > a"));
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述


    完!selenium的基本介绍就到这里了,如果以后有机会更加深入地学习的话,再来重新更新!

  • 相关阅读:
    深入探讨 Presto 中的缓存
    Ajax--Ajax加强--XMLHttpRequest的基本使用
    知识图谱(Knowledge Graph)- Neo4j 5.10.0 使用 - Python 操作
    【面试题】 面试官:你个老六,连继承都不会...
    Unity C#随笔:简述String和StringBuilder的区别
    数字信封技术概论
    ELK搭建
    Spring整合Web环境
    python爬虫下载音乐
    Molecule实现数栈至简前端开发新体验
  • 原文地址:https://blog.csdn.net/weixin_46913665/article/details/127736661