软件测试-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:以层级的关系来定位页面元素。

在这里插入图片描述

在这里插入图片描述

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

获取属性的文本

在这里插入图片描述

@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();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Web自动化测试是一种利用特定软件工具来模拟和自动执行人工操作的方法。这种测试方法可以增强测试效率,减少人力成本,并且能够提供更加准确和可靠的测试结果。 在进行Web自动化测试之前,首先需要通过编写测试脚本来规定测试的步骤和预期结果。这些脚本通常使用特定的脚本语言或者测试框架来编写,可以实现模拟鼠标点击、键盘输入等操作。通过编写脚本,可以将人工操作转化为自动化测试的步骤,并且可以通过调整脚本来覆盖更多的测试场景。 当测试脚本编写完成后,可以使用特定的自动化测试工具来执行测试脚本。这些工具可以模拟用户的操作,自动打开浏览器,输入URL,点击特定链接或按钮,并检查页面的显示和行为是否符合预期。通过这种方式,可以快速、高效地执行大量的测试用例,覆盖更多的功能和场景,从而提高测试的覆盖率和准确性。 与人工操作相比,Web自动化测试具有以下优势: 1. 提高测试效率:自动化测试可以快速执行大量的测试用例,减少了人工操作的时间和成本,提高了测试的效率。 2. 提高测试准确性:自动化测试可以准确地模拟和执行人工操作,避免了人为因素对测试结果的影响,提供了更加准确和可靠的测试结果。 3. 扩展测试覆盖范围:通过自动化测试,可以覆盖更多的测试场景和功能,提高测试的覆盖率和全面性。 4. 便于重复执行:自动化测试可以重复执行相同的测试用例,确保每次测试的一致性和可靠性。 然而,Web自动化测试也存在一些局限性。例如,对于一些动态变化的Web页面或者需要复杂交互的功能,自动化测试可能无法准确地模拟人工操作,需要手动操作或者进行人工验证。因此,自动化测试应用于Web测试时,需要根据具体的测试需求和场景进行综合考虑,确保测试的准确性和覆盖率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南 栀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值