• 自动化测试


    目录

    一、了解自动化和selenium

    1、什么是自动化,为什么我们需要自动化?

    2、为什么选择selenium作为web自动化工具?

    3、环境部署

    4、什么是驱动?驱动的工作原理?

    5、一个简单的web自动化演示

    6、掌握selenium的基础语法

    3、等待

    二、进阶selenium

    1、信息打印

    2、窗口 

     3、导航

    4、弹窗

    5、鼠标,键盘操作

    6、选择框

    7、文件的上传


    一、了解自动化和selenium

    1、什么是自动化,为什么我们需要自动化?

    自动化测试能够代替一部分的手工测试,自动化测试能够提高测试效率

    (随着功能的增加,版本越来越多,版本回归的压力也越来越大,所以仅仅通过人工测试来回归所有的版本肯定是不行的,所以我们需要借助自动化来进行回归)

    2、为什么选择selenium作为web自动化工具?

    1)支持多浏览器,如Chrome、Firefox、IE、edge....

    2)支持多系统,如Linux、Windows、MacOS

    3)支持多语言,java,‘python...

    4)selenium包底层有很多可以适用的API

    5)开源免费

    3、环境部署

    selenium工具包

    Chrome浏览器

    Chromedriver谷歌驱动

    java版本最低为8

    4、什么是驱动?驱动的工作原理?

    计算机里的驱动程序,可以让计算机和设备工作起来

    打开浏览器也需要驱动

    人工测试情况下(人工手动的驱动打开浏览器)

    自动化:代码不能够直接打开浏览器,需要借助驱动程序来协助打开浏览器

    代码可以驱使驱动来打开浏览器

    selenium 驱动 浏览器 三者之间的关系

     代码要发送请求——驱动接受请求——驱动解析请求

    这.........驱动不就是一个服务器吗

    运行一下驱动看一下

     可恶....竟然真的占用了我们的9515端口,我们cmd看一下9515端口

    果然被占了 

    5、一个简单的web自动化演示

    百度以下 ”迪丽热巴“

    新建一个maven项目,添加以下依赖:

     自动化代码:

    1. package com.chaoyang.webautotest;
    2. import org.openqa.selenium.By;
    3. import org.openqa.selenium.chrome.ChromeDriver;
    4. public class FirstAutoTest {
    5. // 第一个简单的自动化实例
    6. public void dilirebaTest() throws InterruptedException {
    7. // 创建一个驱动对象来打开浏览器
    8. ChromeDriver driver = new ChromeDriver();
    9. Thread.sleep(1500);
    10. // 输入网址
    11. driver.get("https://www.baidu.com");
    12. Thread.sleep(1500);
    13. // 输入关键词
    14. driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");
    15. Thread.sleep(1500);
    16. // 点击百度一下
    17. driver.findElement(By.cssSelector("#su")).click();
    18. Thread.sleep(1500);
    19. // 释放驱动对象,关闭浏览器
    20. driver.quit();
    21. }
    22. }

    调用这个函数

     

    完美运行!!!!

    6、掌握selenium的基础语法

    定位页面的元素

    driver.findElement()

    1、定位元素的方法

    css选择器

    基础选择器       id、类

    复合选择器       子类、父类.....

    ctrl + shift+c 打开谷歌浏览器页面选择器

    点击选择地元素 copy ——selector即可

     xpath

    语法:

    1)层级    / 次级   // 跳级

    2)属性    

    3)函数 By.xpath (同样的复制粘贴即可)

     2、操作元素

    1)点击 click 

    提交 submit

    可以click不一定可以submit,可以submit一定可以click

    不建议使用submit

    2)模拟输入

    send_keys

    3)clear清楚输入框输入地文本内容

    4)gettext  获取文本

    3、等待

    我们地代码执行速度通常来说是很快的,前端渲染的速度相对较慢,可能导致的结果:我们的代码已经执行到下一步了,前端页面还没渲染出来,元素找不到。

    等待分为三个:

    1)强制等待

    让程序暂停,等待指定的时间后再运行

    优点:语法简单,调试的时候用

    缺点:等待固定的时间造成测试时间大量消耗,大大浪费了自动化的测试效率

    2)隐式等待

    在规定的时间内,等待元素出现之后立即结束。否则抛出异常

    driver.manage().timeouts().implicitlyWait(Duration.ofMillis(1000));

    隐式等待作用在webdriver的整个生命周期(quit之前)

    优点:节省了大量的等待时间,元素展示之后就执行下一步,效率高

    缺点:需要等待所有的元素渲染完成后才会执行下一步,仍然会有额外的时间上浪费

    3)强制等待

    可以针对某一个元素来进行测试

    1. WebDriverWait foo = new WebDriverWait(driver,Duration.ofSeconds(3000));
    2. foo.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#...")));

    WebDriverWait(WebDriver,Duration)

    第一个参数:webserver对象

    第二个参数:Duration类方法,用于设置强制等待时间

    class ExpectedConditions

    unitl 等待到什么时间为止

    优点:针对某一个元素进行等待,极大降低了自动化整体时间

    缺点:写法复杂

    代码可以同时使用显式等待和隐式等待?

    不建议,隐式等待5s,显式等待10s,总等待10s,会出现意想不到的结果。。。

    二、进阶selenium

    1、信息打印

    1)打印标题 getTitle()

    1. String title = driver.getTitle();
    2. System.out.println("title:" + title);

    2)打印当前Url

    1. String url = driver.getCurrentUrl();
    2. System.out.println("期望的url:https://news.baidu.com/" );
    3. System.out.println("实际的url:" + url);

    2、窗口 

    点击超链接后,程序很有可能不知道我们最新的页面是哪个

    selenium依然会停留在原标签页

    selenium对每一个标签页都给了唯一标识,

    1. public void windowTest() {
    2. // 每一个页面都有一个句柄(唯一标识)
    3. // 获取当前页面的句柄
    4. String windowHandle = driver.getWindowHandle();
    5. System.out.println("current-handle:" + windowHandle);
    6. }

    最下面的就是标签页的唯一标识

    如何获取所有页面的句柄呢?

    1. for (String window: handles) {
    2. if (window != windowHandle) {
    3. driver.switchTo().window(window);
    4. }
    5. System.out.println("实际的url:" + driver.getCurrentUrl());
    6. }

     窗口的大小设置

    1. Thread.sleep(2000);
    2. // 窗口最大化
    3. driver.manage().window().maximize();
    4. Thread.sleep(2000);
    5. // 窗口最小化
    6. driver.manage().window().minimize();
    7. Thread.sleep(2000);
    8. // 窗口设置大小
    9. driver.manage().window().setSize(new Dimension(100,200));

    selenium 不能直接编译js,但可以使用方法来执行 js

    driver.executeScript() 

     3、导航

    导航的前进和后退

    1. driver.navigate().back;
    2. driver.navigate().forward();

    4、弹窗

    有的弹窗你是无法定位到它的”确定“按钮的(警告弹窗)

    因此需要使用 Selenium 中提供的 Alert 对象

    1. Alert alert = driver.switchTo().alert();
    2. // 确定
    3. alert.accept();
    4. // 取消
    5. alert.dismiss();

    5、鼠标,键盘操作

    selenium 提供了鼠标和键盘的模拟操作

    模拟鼠标,移动到指定元素点击

    1. // 模拟鼠标移动到我们想要移动的元素上,并点击
    2. WebElement element = driver.findElement(By.cssSelector("#id"));
    3. Actions actions = new Actions(driver);
    4. actions.clickAndHold(element).perform();
    5. actions.click(element).perform();

    // 键盘的操作

    1. // 模拟键盘
    2. WebElement element = driver.findElement(By.cssSelector("#id"));
    3. element.sendKeys("selenium");

    6、选择框

    selenium 提供了 select 接口

    1. // 模拟选择框
    2. WebElement element = driver.findElement(By.cssSelector("#id"));
    3. Select select = new Select(element);
    4. // 从索引 0 开始计数 因此 1 是第二个
    5. select.selectByIndex(1);
    6. // 通过value值选
    7. select.selectByValue("10.1");
    8. // 通过可见的文本来选
    9. select.selectByVisibleText("text");

    7、文件的上传

    页面点击文件上传会弹出来系统窗口,我们不能用selenium操作系统窗口

    1. // 模拟文件上传
    2. // 通过send_keys方法输入我们想要上传的路径
    3. WebElement ele = driver.findElement(By.cssSelector("#id"));
    4. ele.sendKeys("D:\\1.txt");

    8、屏幕截图

    代码的执行速度比页面更快,通过截图验证

    1. //屏幕截图
    2. File screenshotAs = driver.getScreenshotAs(OutputType.FILE);
    3. // 将截图文件保存到我们指定的路径下
    4. File filename = new File("./src/test/autoPic/my.png");
    5. FileUtils.copyFile(screenshotAs,filename);

  • 相关阅读:
    mysql添加普通索引(简单使用)
    脚本:python实现樱花树
    pytest合集(11)— 日志管理
    离散化(超详细)
    LeetCode,二叉搜素树
    [H5动画制作系列]雪花随机产生飘落
    C语言学习笔记(二一)
    4.5 final修饰符
    Maven setting配置文件
    十三、Vue CLI(2)
  • 原文地址:https://blog.csdn.net/qq_59539549/article/details/127759608