当前位置: 代码网 > it编程>网页制作>网页播放器 > 详解自动化测试之 Selenium

详解自动化测试之 Selenium

2024年08月01日 网页播放器 我要评论
作用:通过自动化测试有效减少人力的投入,同时提高了测试的质量和效率概念:自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。比如,回归测试版本越来越多,版本回归的压力越来越大,仅通过人工测试来回归所有的版本肯定是不现实的,所以我们需要借助自动化测试。

目录

1. 什么是自动化

2.自动化测试的分类

3. selenium(web 自动化测试工具)

1)选择 selenium 的原因

2)环境部署

3)什么是驱动?

4. 一个简单的自动化例子

5.selenium 常用方法

5.1 查找页面元素(findelement())

5.2 findelements()方法

5.3 元素的定位 by 类

5.4 xpath 路径语言

6.常见的元素操作

6.1 输入文本(sendkeys())

6.2 点击 click

6.3 提交 submit(通过回车键提交)

6.4 清除 clear

6.5 获取文本 (gettext())

6.6 获取属性对应的值 getattribute

6.7 获取页面的标题和 url

7.窗口

7.1 窗口的大小设置(manage().window())

7.2 窗口的切换

8. 屏幕截图 getscreenshotas 

9.等待

9.1 强制等待

9.2 隐式等待

9.3 显示等待

10.2 浏览器导航

11. 弹窗

 12.选择框 select

13.执行脚本 executescript()

14.文件上传

15. 浏览器的参数设置 chromeoptions


1. 什么是自动化

2.自动化测试的分类

3. selenium(web 自动化测试工具)

1)选择 selenium 的原因

2)环境部署

如果想要使用 selenium 实施 web 自动化测试,需要的环境是什么:

edg浏览器、edg驱动(edgedriver)、selenium 工具包

3)什么是驱动?

驱动要接受 selenium 脚本发送过来的 http 请求并解析 

4. 一个简单的自动化例子

首先先导入 selenium 包

<dependencies>
    <dependency>
        <groupid>org.seleniumhq.selenium</groupid>
        <artifactid>selenium-java</artifactid>
        <version>3.0.0</version>
    </dependency>
</dependencies>
package com.autotest0113;

import org.openqa.selenium.by;
import org.openqa.selenium.webelement;
import org.openqa.selenium.chrome.chromedriver;

import java.util.list;

public class firstautotest {
    // 在百度网址搜索关键词 “胡歌”
    public void yifei() throws interruptedexception {
        // 1.打开浏览器
        chromedriver chromedriver = new chromedriver();
        thread.sleep(3000);
        // 2.在浏览器里输入百度网址,访问百度首页
        chromedriver.get("https://www.baidu.com");
        thread.sleep(3000);
        // 3.找到百度首页输入框元素,并输入关键词 “胡歌”
        chromedriver.findelement(by.cssselector("#kw")).sendkeys("刘亦菲");
        thread.sleep(3000);
        // 4.找到百度首页 “百度一下” 按钮,并点击一下
        chromedriver.findelement(by.cssselector("#su")).click();
        thread.sleep(3000);
        // 5.结束会话(关闭浏览器)
        chromedriver.quit();
    }
}
package com.autotest0113;

import sun.text.normalizer.chartrie;

public class runautotest {
    public static void main(string[] args) throws interruptedexception {
        firstautotest firstautotest = new firstautotest();
        firstautotest.huge();
    }
}

5.selenium 常用方法

5.1 查找页面元素(findelement())

5.2 findelements()方法

public void methodtest() {
    chromedriver driver = new chromedriver();
    driver.get("https://www.baidu.com");
    driver.findelement(by.cssselector("#kw"));
    list<webelement> elements= driver.findelements(by.classname("hotsearch-item"));
    for (webelement element : elements) {
        system.out.println(element.gettext());
    }

    driver.findelement(by.cssselector("#su"));
    driver.quit();
}

5.3 元素的定位 by 类

5.4 xpath 路径语言

自动化里要求元素的定位必须要唯一,但是手动在页面复制 selector 或者 path 元素不一定是唯一的,需要我们进行手动修改到唯一

6.常见的元素操作

6.1 输入文本(sendkeys())

sendkeys,仅适用于文本字段和内容可编辑的元素


        driver.get("https://www.baidu.com");
        webelement element = driver.findelement(by.cssselector("#kw"));
        element.sendkeys("豆腐乾净搞方规");
//        driver.findelement(by.cssselector("#kw")).sendkeys("豆腐乾净搞方规");
        driver.quit();

6.2 点击 click

        driver.findelement(by.cssselector("#su")).click();

6.3 提交 submit(通过回车键提交)

submit 仅适用于表单元素,selenium 官方不推荐使用 submit,更推荐 click

        driver.findelement(by.cssselector("#kw")).sendkeys("豆腐乾净搞方规");
        driver.findelement(by.cssselector("#su")).submit();
        thread.sleep(2000);
        driver.quit();

6.4 清除 clear

clear:适用于频繁测试输入是否可以重复输入

// 清除输入框的内容
driver.findelement(by.cssselector("#kw")).clear();

6.5 获取文本 (gettext())

// 获取文本
string text = driver.findelement(by.cssselector("#s-top-left > div > a")).gettext();
system.out.println("获取到的文本:" + text);

6.6 获取属性对应的值 getattribute

// 获取属性的值
        string buttontext = driver.findelement(by.cssselector("#su")).getattribute("type");
        system.out.println("获取到的属性名:" + buttontext);
        string buttontext1 = driver.findelement(by.cssselector("#su")).getattribute("id");
        system.out.println("获取到的属性名:" + buttontext1);
        string buttontext2 = driver.findelement(by.cssselector("#su")).getattribute("value");
        system.out.println("获取到的属性名:" + buttontext2);

6.7 获取页面的标题和 url

system.out.println(driver.gettitle());
system.out.println(driver.getcurrenturl());
driver.findelement(by.cssselector("#kw")).sendkeys("你好");
driver.findelement(by.cssselector("#su")).click();
system.out.println(driver.gettitle());
system.out.println(driver.getcurrenturl());

7.窗口

7.1 窗口的大小设置(manage().window())

最大化,最小化,全屏窗口,手动设置窗口大小

public void windowcontrol() throws interruptedexception {
    thread.sleep(3000);
    // 窗口最大化
    driver.manage().window().maximize();
    thread.sleep(3000);
    // 窗口最小化
    driver.manage().window().minimize();
    thread.sleep(3000);
    // 全屏
    driver.manage().window().fullscreen();
    thread.sleep(3000);
    // 手动设置窗口大小
    driver.manage().window().setsize(new dimension(1024,768));
    thread.sleep(2000);
    
    driver.quit();
}

7.2 窗口的切换

 // 窗口切换
        driver.get("https://www.baidu.com");
        driver.findelement(by.cssselector("#s-top-left > a:nth-child(6)")).click();
        thread.sleep(3000);
        driver.findelement(by.cssselector("#homesearchform > span.s_btn_wr > input"));
        driver.quit();

    public void windowcontrol() throws interruptedexception, ioexception {
        driver.get("https://www.baidu.com");
        driver.findelement(by.cssselector("#s-top-left > a:nth-child(6)")).click();
        thread.sleep(3000);
        // 获取当前页面的句柄
        string curhandle = driver.getwindowhandle();
        system.out.println("当前页面的句柄:" + curhandle);
        // 获取所有标签的句柄
        set<string> handles =  driver.getwindowhandles();
        for (string handle : handles) {
            if(handle != curhandle) {
                driver.switchto().window(handle);
            }
        }
        driver.findelement(by.cssselector("#homesearchform > span.s_btn_wr > input"));
        thread.sleep(3000);
        driver.quit();
    }

8. 屏幕截图 getscreenshotas 

添加 maven

    <!-- 保存屏幕截图文件需要用到的包-->
    <dependency>
        <groupid>commons-io</groupid>
        <artifactid>commons-io</artifactid>
        <version>2.6</version>
    </dependency>
        driver.get("https://www.baidu.com");
        driver.findelement(by.cssselector("#kw")).sendkeys("刘亦菲");
        driver.findelement(by.cssselector("#su")).click();
        thread.sleep(3000);
        // 屏幕截图(保存现场)
        file srcfile = driver.getscreenshotas(outputtype.file);
        // 把屏幕截图好的文件放到指定当前项目的路径下
        string filename = "cur.png";
        fileutils.copyfile(srcfile,new file(filename));
        driver.findelement(by.cssselector("#\\31  > div > div > div > div > div > div.cos-row.row-text_johh7.row_5y9az > div > div.title-wrapper_xlsik > a > div > p > span > span"));
        driver.quit();

9.等待

9.1 强制等待

9.2 隐式等待

public class autotest {
   
    public void waitcontro() {
        chromeoptions options = new chromeoptions();
        // 添加隐式等待
        driver.manage().timeouts().implicitlywait(duration.ofseconds(3));
        driver.get("https://www.baidu.com");
        driver.findelement(by.cssselector("#kw")).sendkeys("刘亦菲");
        driver.findelement(by.cssselector("#su")).click();
        driver.findelement(by.cssselector("#content_left"));
        driver.quit();
    }
}

9.3 显示等待

显示等待会等到设置的命令再进行等待

public class autotest {

   
    public void webdriverwait(){
        chromeoptions options = new chromeoptions();
        driver.get("https://www.baidu.com");
        driver.findelement(by.cssselector("#kw")).sendkeys("刘亦菲");
        driver.findelement(by.cssselector("#su")).click();
        // 添加显示等待
        new webdriverwait(driver,duration.ofseconds(5)).until(driver->driver.findelement(by.cssselector("#content_left")));
        driver.quit();
    }
}

10.2 浏览器导航

浏览器的前进(forward)、后退(back)、刷新(refresh)

public void navigatecontrol() throws interruptedexception {
        chromeoptions options = new chromeoptions();
//        driver.get("https:///www.baidu.com");
        driver.navigate().to("https://www.baidu.com");
        thread.sleep(3000);
        // 想要回退到访问百度网址之前的状态
        driver.navigate().back();
        thread.sleep(3000);
        // 前进,再次进入到百度首页
        driver.navigate().forward();
        thread.sleep(3000);
        // 刷新一下页面
        driver.navigate().refresh();
        thread.sleep(3000);
        driver.quit();
    }

11. 弹窗

 

    public void alertcontrol() throws interruptedexception {
        driver.get("file:///d:/%e6%8f%90%e7%a4%ba%e5%bc%b9%e7%aa%97.html");
        thread.sleep(3000);
        driver.findelement(by.cssselector("body > input[type=button]")).click();//找到选择框元素
        thread.sleep(3000);
        // 切换到弹窗进行弹窗处理
        alert alert = driver.switchto().alert();//创建选择框对象
        thread.sleep(3000);
        // 1. 输入
        alert.sendkeys("666");
        thread.sleep(3000);
        // 2. 点击确认
        alert.accept();
        thread.sleep(3000);
        // 取消
        alert.dismiss();
        driver .quit();
    }

 12.选择框 select

    public void selectcontrol() throws interruptedexception {
        driver.get("file:///d:/%e9%80%89%e6%8b%a9%e6%a1%86.html");
        webelement element = driver.findelement(by.cssselector("mathnumber"));
        thread.sleep(3000);
        // 1.创建选择框对象
        select select = new select(element);
        thread.sleep(3000);
        //1)根据文本来选择
//        select.selectbyvisibletext("123");
//        //2)根据属性值来选择
//        select.selectbyvalue("234");
//        //3)根据序号来选择
//        select.selectbyindex(2);
        thread.sleep(3000);
        driver.quit();
    }

13.执行脚本 executescript()

executescript(参数:js)

    void scriptcontrol() throws interruptedexception {
        driver.get("https://image.baidu.com/");
        thread.sleep(3000);
        // 执行js命令,让页面置底
//        driver.executescript("document.documentelement.scrolltop=500");
//        thread.sleep(3000);
//        // 执行js命令,让页面置顶,0 就是顶部
//        driver.executescript("document.documentelement.scrolltop=0");
//        thread.sleep(3000);
        driver.executescript("var ss = document.queryselector(\"#kw\");ss.value = '刘亦菲';");//通过js代码来实现搜索
        thread.sleep(3000);
        driver.quit();
    }

14.文件上传

sendkeys("文件路径+文件")

    void fileuploadcontroll() throws interruptedexception {
        driver.get("file:///d:/%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0.html");
        driver.findelement(by.cssselector("#avatar")).sendkeys("d:\\desktop\\csdn封面图片\\u=1008366999,1348072899&fm=253&fmt=auto&app=120&f=jpeg.webp");
        thread.sleep(3000);
        driver.quit();
    }

15. 浏览器的参数设置 chromeoptions

浏览器的参数设置需要在创建浏览器对象之前

    void paramscontrol(){
        // 百度搜索刘亦菲
        // 先创建选项对象,然后再设置浏览器参数
        chromeoptions options = new chromeoptions();
        options.addarguments("-headless");
//        options.addarguments("--remote-allow-origins=*");
        chromedriver driver = new chromedriver(options);
        driver.get("https://image.baidu.com/");
        driver.executescript("var ss = document.queryselector(\"#kw\");ss.value = '刘亦菲';");
    }

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com