Java自动化测试系列[v1.0.0][Gradle开发环境]

准备与Gradle安装

Gradle支持目前大多数主流操作系统,并且需要JDK1.8及以上版本

C:\>java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

下载

官方下载地址为Gradle下载,根据自己的操作系统下载即可,安装文件分为两种,一种是二进制ZIP包,另一种是完整版本它除了二进制包外还有文档和源码,实际上如果只是使用Gradle这个自动化构建工具的话,下载第一种即可,如果需要看它的官方文档可以在线看在线文档,并且因为它同样是个开源工具,也提供了源码源码地址

环境配置

  • 方式一:在系统环境变量的path选项中,直接添加gradle根目录下的bin文件夹路径,例如C:\Gradle\bin
  • 方式二:添加根路径变量名GRADLE_HOME,变量值为C:\Gradle也就是bin文件夹路径的上层路径,然后再path中添加%GRADLE_HOME%\bin;相对路径

环境验证

配置好后,启动命令行,注意这种系统配置不可使用已经打开的命令行窗口,如果系统环境配置实在打开命令行窗口之后进行的,那么该命令行窗口是无法加载该配置的,在这个窗口进行验证会失败;重新启动一个命令行窗口,然后输入gradle -v,得到如下窗口所示内容,则表示环境安装配置成功
Java自动化测试系列[v1.0.0][Gradle开发环境]_第1张图片

创建工程

启动IDEA,并点击Create New Project
Java自动化测试系列[v1.0.0][Gradle开发环境]_第2张图片
选择Gradle,并选择自己的JDK版本以及库
Java自动化测试系列[v1.0.0][Gradle开发环境]_第3张图片
然后下一步,输入工程的名称以及存储路径
Java自动化测试系列[v1.0.0][Gradle开发环境]_第4张图片
然后进入工程的构建过程
Java自动化测试系列[v1.0.0][Gradle开发环境]_第5张图片
如果右上角有如下图中提醒弹出,需点击后边的选项
Java自动化测试系列[v1.0.0][Gradle开发环境]_第6张图片

配置IDEA

Java自动化测试系列[v1.0.0][Gradle开发环境]_第7张图片
项目构建成功后,目录结构如下所示
Java自动化测试系列[v1.0.0][Gradle开发环境]_第8张图片

配置远程仓库

在Gradle安装目录下的 init.d 文件夹下,新建一个 init.gradle 文件,里面填写以下配置。
Java自动化测试系列[v1.0.0][Gradle开发环境]_第9张图片

allprojects {
    repositories {
        maven { url 'file:///C:/Java/maven_repositoryD:/apache-maven-3.6.2/repository'}
        mavenLocal()
        maven { name "Alibaba" ; url "https://maven.aliyun.com/repository/public" }
        maven { name "Bstek" ; url "http://nexus.bsdn.org/content/groups/public/" }
        mavenCentral()
		maven {url "https://maven.aliyun.com/repository/public"}
		maven {url "https://maven.aliyun.com/repository/jcenter"}
		maven {url "https://maven.aliyun.com/repository/spring"}
		maven {url "https://maven.aliyun.com/repository/spring-plugin"}
		maven {url "https://maven.aliyun.com/repository/gradle-plugin"}
		maven {url "https://maven.aliyun.com/repository/google"}
		maven {url "https://maven.aliyun.com/repository/grails-core"}
		maven {url "https://maven.aliyun.com/repository/apache-snapshots"}
    }

    buildscript { 
        repositories { 
            maven { name "Alibaba" ; url 'https://maven.aliyun.com/repository/public' }
            maven { name "Bstek" ; url 'http://nexus.bsdn.org/content/groups/public/' }
            maven { name "M2" ; url 'https://plugins.gradle.org/m2/' }
        }
    }
}


repositories 中写的是获取 jar 包的顺序。先是本地的 Maven 仓库路径;接着的 mavenLocal() 是获取 Maven 本地仓库的路径,应该是和第一条一样,但是不冲突;第三条和第四条是从国内和国外的网络上仓库获取;最后的 mavenCentral() 是从Apache提供的中央仓库获取 jar 包

配置依赖

这点也是gradle相较maven的优势之一了。相较于maven一大串的XML配置,gradle的依赖项仅需一行。

dependencies {
    testImplementation 'junit:junit:4.13'
    implementation 'com.google.code.gson:gson:2.8.6'
}

gradle依赖的粒度控制相较于Maven也更加精细,maven只有compile、provided、test、runtime四种scope,而gradle有以下几种scope:

1.implementation,默认的scope。implementation的作用域会让依赖在编译和运行时均包含在内,但是不会暴露在类库使用者的编译时。举例,如果我们的类库包含了gson,那么其他人使用我们的类库时,编译时不会出现gson的依赖。

2.api,和implementation类似,都是编译和运行时都可见的依赖。但是api允许我们将自己类库的依赖暴露给我们类库的使用者。

3.compileOnly和runtimeOnly,这两种顾名思义,一种只在编译时可见,一种只在运行时可见。而runtimeOnly和Maven的provided比较接近。

4.testImplementation,这种依赖在测试编译时和运行时可见,类似于Maven的test作用域。

5.testCompileOnly和testRuntimeOnly,这两种类似于compileOnly和runtimeOnly,但是作用于测试编译时和运行时。

通过简短精悍的依赖配置和多种多样的作用与选择,Gradle可以为我们提供比Maven更加优秀的依赖管理功能。

Maven和Gradle

  • Maven的配置文件是XML格式的,假如你的项目依赖的包比较多,那么XML文件就会变得非常非常长;
  • XML文件不太灵活,假如你需要在构建过程中添加一些自定义逻辑,搞起来非常麻烦;
  • Maven非常的稳定,但是相对的就是对新版java支持不足,哪怕就是为了编译java11,也需要更新内置的Maven插件

  • 速度,gradle使用构建缓存、守护进程等方式提高编译速度。结果就是gradle的编译速度要远超maven,平均编译速度比Maven快好几倍,而且项目越大,这个差距就越明显
  • 灵活性,gradle要比Maven灵活太多,虽然有时候灵活并不是一件好事情。但是大部分情况下,灵活一点可以极大的方便我们。Maven死板的XML文件方式做起事情来非常麻烦。很多Maven项目都通过执行外部脚本的方式来完成一些需要灵活性的工作。而在gradle中配置文件就是构建脚本,构建脚本就是编程语言(groovy编程语言),完全可以自给自足,无需外部脚本
  • 简洁性,完成同样的功能,gradle脚本的长度要远远短于maven配置文件的长度。虽然很多人都说XML维护起来不麻烦,但是我觉得,维护一个光是依赖就有几百行的XML文件,不见得就比gradle脚本简单

实战

在build.gradle文件中增加依赖

plugins {
    id 'java'
}

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    // https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java
    compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '4.0.0-alpha-6'
    // https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-chrome-driver
    compile group: 'org.seleniumhq.selenium', name: 'selenium-chrome-driver', version: '4.0.0-alpha-6'
}

编写如下代码并执行

import org.openqa.selenium.*;
import java.util.Arrays;
import java.util.List;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;


class JavaScriptToDo {
    public static void javaScriptClick(WebDriver driver, String id) {
        WebElement element = driver.findElement(By.id(id));
        try{
            if(element.isEnabled() && element.isDisplayed()){
                System.out.println("使用JS进行也面元素单击");
                //执行JS语句arguments[0].click();
                ((JavascriptExecutor) driver).executeScript("arguments[0].click();", element);
            }else {
                System.out.println("页面上元素无法进行单击操作");
            }
        }catch (StaleElementReferenceException e){
            System.out.println("页面元素没有附加在页面中" + Arrays.toString(e.getStackTrace()));
        }catch (NoSuchElementException e){
            System.out.println("在页面中没有找到要操作的元素" + Arrays.toString(e.getStackTrace()));
        }catch (Exception e){
            System.out.println("无法完成单击操作" + Arrays.toString(e.getStackTrace()));
        }
    }

    public static void highLightElement(WebDriver driver, WebElement element){
        JavascriptExecutor js = (JavascriptExecutor) driver;
        /**
         * 调用js将传入参数的页面元素对象的背景颜色和边框颜色分别设定为黄色和红色
         */
        js.executeScript("arguments[0].setAttribute('style', arguments[1]);", element, "background: yellow; border:2px solid red;");
    }

    public static void main(String[] args) throws InterruptedException {
        WebDriver driver = new ChromeDriver();
        driver.get("http://www.baidu.com");
        Thread.sleep(10);
        driver.findElement(By.id("kw")).sendKeys("davieyang");
        String id = "su";
        WebElement element = driver.findElement(By.id(id));
        JavaScriptToDo.javaScriptClick(driver, id);
        JavaScriptToDo.highLightElement(driver, element);
        driver.quit();
    }
}

你可能感兴趣的:(玩转环境配置)