软件测试-Web自动化测试

Web自动化测试

1.什么是自动化测试

自动测试指软件测试的自动化,根据预设的要求,采用一些工具来帮我们完成一些频繁操作的事情,然后评估运行结果。随着软件的更新迭代版本越来越多,仅仅通过人工测试回归所有的版本肯定是不现实的,因此自动化可以提高我们的测试效率。

2.自动化测试的分类

2.1单元测试

主要针对于一个单元进行测试,测试效率高,Java中常采用Junit框架。

2.2UI自动化测试

指的是模拟用户手动操作来操作我们的程序,使用UI自动化测试更加贴近用户的操作,提高测试效率和准确性。一般采用一些自动化测试框架来实现,如Selenium等。

  1. Web端自动化测试
  2. 移动端自动化测试

2.3接口自动化测试

接口测试是对API的测试,相对于UI自动化更加容易实现,执行更加稳定。常用的工具有Postman等等。

3.认识Senlenium自动化测试工具

3.1Senlenium工具的优点

  1. 开源免费。
  2. 支持多浏览器,如chrome、edge、firefox等等。
  3. 支持多系统,Linux、Windows、MacOS。
  4. 支持多语言,Java、Python、JavaScript、C#、Kotlin
  5. 提供了很多可供测试使用的API。

3.2环境部署

  1. 安装Chrome浏览器。
  2. 下载ChromeDriver驱动(需要下载和浏览器相应版本的驱动)。
  3. 配置Selenium工具包(Java最低版本要求8)。

ChromeDriver:是一个独立的可执行文件,用于自动化操作Chrome浏览器。它是WebDriver的一部分,WebDriver是一个用于自动化web应用程序的工具。ChromeDriver通过与Chrome浏览器的DevTools协议进行通信来控制浏览器的行为。当我们编写自动化脚本时,需要先启动ChromeDriver,然后它才能与我们的浏览器进行交互。ChromeDriver可以模拟用户在浏览器中执行的各种操作,例如点击、输入、滚动页面等。

3.3使用Selenium进行自动化测试

 public void test1() throws InterruptedException {
        //添加参数允许远程访问
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.addArguments("--remote-allow-origins=*");
        //创建驱动对象
        ChromeDriver chromeDriver = new ChromeDriver(chromeOptions);
        //访问的网页
        chromeDriver.get("http://www.baidu.com");
        //寻找元素并在给元素输入内容
        chromeDriver.findElement(By.xpath("//*[@id=\"kw\"]"))
                .sendKeys("景甜");
        chromeDriver.findElement(By.cssSelector("#su")).click();
        //等等查看结果
        Thread.sleep(10000);
        //退出浏览器
        chromeDriver.quit();
    }

3.3.2 对元素的基本操作

1.查找元素

通过By类标识元素并告诉findElemen查找元素的方式,findElement就能使用不同的选择方式来准确的查找元素。

xpath:以层级的关系来定位页面元素。

软件测试-Web自动化测试_第1张图片

软件测试-Web自动化测试_第2张图片

2.sendKeys

给输入框/编辑框输入内容(非输入框也能使用,但是没有必要使用,使用也不会报错)。

@Test
public void testSendKeys() throws InterruptedException {
    chromeDriver.get("http://www.baidu.com");
    Thread.sleep(5000);
    chromeDriver.findElement(By.cssSelector("#kw")).sendKeys("杨颖");
    Thread.sleep(5000);
    chromeDriver.quit();
}
3.click

点击选中的元素.

@Test
public void testClick() throws InterruptedException {
    chromeDriver.get("http://www.baidu.com");
    Thread.sleep(5000);
    chromeDriver.findElement(By.cssSelector("#kw")).sendKeys("杨颖");
    Thread.sleep(5000);
    chromeDriver.findElement(By.cssSelector("#su")).click();
    Thread.sleep(5000);
    chromeDriver.quit();
}
4.submit

应用于表单元素,可以不用操作提交按钮即可发送请求。(使用的较少一般使用click)。

@Test
public void testSubmit() throws InterruptedException {
    chromeDriver.get("http://www.baidu.com");
    Thread.sleep(5000);
    chromeDriver.findElement(By.cssSelector("#kw")).sendKeys("杨颖");
    Thread.sleep(5000);
    chromeDriver.findElement(By.cssSelector("#form")).submit();
    Thread.sleep(5000);
    chromeDriver.quit();
}
5.clear

清除输入框/编辑框的内容。对于一些元素,比如复选框(checkbox)和单选框(radio button),使用clear()方法可能不会有任何效果,因为这些元素的选中状态不能通过clear()来清除。不能滥用。

@Test
public void testClear() throws InterruptedException {
    chromeDriver.get("http://www.baidu.com");
    Thread.sleep(5000);
    chromeDriver.findElement(By.cssSelector("#kw")).sendKeys("杨颖");
    Thread.sleep(5000);
    chromeDriver.findElement(By.cssSelector("#kw")).clear();
    Thread.sleep(5000);
    chromeDriver.quit();
}
6.getText

获取属性的文本

软件测试-Web自动化测试_第3张图片

@Test
public void testGetText() throws InterruptedException {
    chromeDriver.get("http://www.baidu.com");
    String text = chromeDriver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(1) > a > span.title-content-title")).getText();
    System.out.println(text);
    chromeDriver.quit();
}
7.getArrtibute

获取属性值。

@Test
public void testGetAttribute() throws InterruptedException {
    chromeDriver.get("http://www.baidu.com");
    String value = chromeDriver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(1) > a > span.title-content-title"))
            .getAttribute("class");
    System.out.println(value);
    chromeDriver.quit();
}
8.获取当前网页的title/url
@Test
public void testGetTitle() throws InterruptedException {
    chromeDriver.get("http://www.baidu.com");
    String title = chromeDriver.getTitle();
    String url = chromeDriver.getCurrentUrl();
    System.out.println(title);
    System.out.println(url);
    chromeDriver.quit();
}

3.3.3窗口操作

设置打开浏览器的显示大小(最大化、最小化、全屏窗口、手动设置窗口大小)和页面切换等。

1.设置窗口大小
@Test
public void testScreenSize() throws InterruptedException {
    chromeDriver.get("http://www.baidu.com");
    //设置全屏
    chromeDriver.manage().window().fullscreen();
    Thread.sleep(5000);
    //设置最小化
    chromeDriver.manage().window().minimize();
    Thread.sleep(5000);
    //设置最大化
    chromeDriver.manage().window().maximize();
    Thread.sleep(5000);
    //手动指定大小
    chromeDriver.manage().window().setSize(new Dimension(1000, 500));
    Thread.sleep(5000);
    chromeDriver.quit();
}
2.窗口切换

当我们执行自动化的过程中,如果窗口进行了切换,就会产生一个新的页面句柄,我们切换后的页面的元素元素选不到,因为chromeDriver的操作的页面句柄是之前的页面句柄。因此我们可以通过切换操作的页面句柄来选择我们想要的元素。

@Test
public void testScreenHandle() throws InterruptedException {
    chromeDriver.get("http://www.baidu.com");
    Thread.sleep(3000);
    chromeDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(4)"))
    .click();
    //获取浏览器所有页面的句柄
    Set<String> windowHandles = chromeDriver.getWindowHandles();
    String currentHandler = chromeDriver.getWindowHandle();
    for(String h	andle: windowHandles){
    System.out.println(handle);
    //切换到新的句柄进行操作
    if(!currentHandler.equals(handle)){
    chromeDriver.switchTo().window(handle);
    }
    }

    //进行后续的操作
    //注意超过两个页面就要另当别论了
    chromeDriver.quit();
}
3.3.4屏幕截图

可以将当前自动化执行的结果进行保存,方便查看是否有问题。

@Test
public void testGetScreenShotAs() throws InterruptedException, IOException {
    chromeDriver.get("http://www.baidu.com");
    Thread.sleep(5000);
    chromeDriver.findElement(By.cssSelector("#kw")).sendKeys("杨颖");
    chromeDriver.findElement(By.cssSelector("#su")).click();
    Thread.sleep(5000);
    //对当前页面进行截图,以文件形式保存
    File screenshotAs = chromeDriver.getScreenshotAs(OutputType.FILE);
    File file = new File("杨颖.png");
    //将截图文件复制到file中
    FileUtils.copyFile(screenshotAs, file);
    Thread.sleep(5000);
    chromeDriver.quit();
}

注意:程序的执行速度比页面的渲染速度要快很多,会导致页面还没被渲染好,程序就会查找页面元素,导致查找不到,发生报错。通过截图的形式我们可以看到当前页面的渲染状态。

3.3.5等待机制

1.强制等待

使用sleep方法,让程序强制睡眠等待。

2.隐式等待

隐式等待会在指定的等待时间内不停轮询查找元素,直到找到相关元素或者时间结束。要查找的元素出现了,那么WebDriver就会立即执行接下来的操作。如果超过了设置的时间,元素还没有出现,那么WebDriver就会抛出异常。

 @Test
public void testImplicitWaiting() throws InterruptedException, IOException {
    chromeDriver.get("http://www.baidu.com");
    chromeDriver.manage().timeouts().implicitlyWait(Duration.ofMillis(2000));
    chromeDriver.findElement(By.cssSelector("#kw")).sendKeys("杨颖");
    chromeDriver.findElement(By.cssSelector("#su")).click();
    //判定页面结果是否渲染成功
    chromeDriver.findElement(By.xpath("//*[@id=\"2\"]/div/div/div[1]/a/i[1]"));
    //对当前页面进行截图,以文件形式保存
    File screenshotAs = chromeDriver.getScreenshotAs(OutputType.FILE);
    File file = new File("杨颖.png");
    //将截图文件复制到file中
    FileUtils.copyFile(screenshotAs, file);
    chromeDriver.quit();
}
3.显示等待

Selenium中的显示等待是指使用WebDriverWait(driver, timeout).until(method, message)来等待某个条件满足。统会按照一定的时间间隔(这个间隔可以自定义)去检查(轮询)页面上的元素是否满足特定的条件。如果元素在指定的时间内出现了,那么程序就会继续执行下去;如果元素在指定的时间内没有出现,那么显式等待就会抛出一个异常。

 @Test
public void testExplicitWaiting() throws InterruptedException, IOException {
    chromeDriver.get("http://www.baidu.com");
    chromeDriver.findElement(By.cssSelector("#kw")).sendKeys("杨颖");
    chromeDriver.findElement(By.cssSelector("#su")).click();
    //判定页面结果是否渲染成功
    new WebDriverWait(chromeDriver, Duration.ofSeconds(2)).until(chromeDriver->
                                                                 chromeDriver.findElement(By.xpath("//*[@id=\"2\"]/div/div/div[1]/a/i[1]")));
    //对当前页面进行截图,以文件形式保存
    File screenshotAs = chromeDriver.getScreenshotAs(OutputType.FILE);
    File file = new File("杨颖.png");
    //将截图文件复制到file中
    FileUtils.copyFile(screenshotAs, file);
    chromeDriver.quit();
}

注意:显式等待和隐式等待不能同时使用,可能会出现意想不到的结果。

3.3.6浏览器导航

@Test
public void testNavigate() throws InterruptedException, IOException {
    chromeDriver.get("http://www.baidu.com");
    chromeDriver.findElement(By.cssSelector("#kw")).sendKeys("杨颖");
    chromeDriver.findElement(By.cssSelector("#su")).click();
    //回退
    Thread.sleep(5000);
    chromeDriver.navigate().back();
    Thread.sleep(5000);
    //前进
    chromeDriver.navigate().forward();
    Thread.sleep(5000);
    //刷新
    chromeDriver.navigate().refresh();
    Thread.sleep(5000);
    chromeDriver.quit();
}

3.3.7对弹窗的操作

弹窗的类型有alert(警告)、confirm(确认)、prompt(提示)。

处理弹窗的步骤:

  1. 将驱动对象作用于弹窗
  2. 选择相应的操作(确认、取消、输入)
@Test
public void testAlert() throws InterruptedException, IOException {
    Alert alert = chromeDriver.switchTo().alert();
    //往提示框中输入内容(输入框中看不见输入的内容)
    alert.sendKeys("hello");
    //点击确认按钮
    alert.accept();
    //点击取消按钮
    alert.dismiss();
}

3.3.8选择框

选择框的选中方式:

  1. 根据文件进行选择
  2. 根据属性值进行选择
  3. 根据序号进行选择
 @Test
public void testSelect() throws InterruptedException{
    //获取选择框元素
    WebElement element = chromeDriver.findElement(By.cssSelector(""));
    //创建Select对象
    Select select  = new Select(element);
    select.selectByIndex(1);
    select.selectByValue("");
    select.selectByVisibleText("");
}

3.3.9执行JS脚本

 @Test
public void testJS() throws InterruptedException {
    chromeDriver.get("http://www.baidu.com");
    chromeDriver.executeScript(
        "let input = document.querySelector('#kw'); " +
        "input.value = '杨颖'; " +
        "let btn = document.querySelector('#su');" +
        "btn.click()");
    Thread.sleep(5000);
    chromeDriver.quit();
}

3.3.10文件的上传

文件的上传本质上是选中本地的文件路径,因此我们只有修改上传文件元素的文件路径就行。

@Test
public void testUploadFile() throws InterruptedException {
    chromeDriver.get("file:///D:/360MoveData/Users/FORSE/Desktop/1.html");
    chromeDriver.findElement(By.cssSelector("body > input[type=file]"))
            .sendKeys("D:\\360MoveData\\Users\\FORSE\\Desktop\\1.html");
    Thread.sleep(5000);
    chromeDriver.quit();
}

文件的上传

文件的上传本质上是选中本地的文件路径,因此我们只有修改上传文件元素的文件路径就行。

@Test
public void testUploadFile() throws InterruptedException {
    chromeDriver.get("file:///D:/360MoveData/Users/FORSE/Desktop/1.html");
    chromeDriver.findElement(By.cssSelector("body > input[type=file]"))
            .sendKeys("D:\\360MoveData\\Users\\FORSE\\Desktop\\1.html");
    Thread.sleep(5000);
    chromeDriver.quit();
}

你可能感兴趣的:(软件测试,功能测试)