diff --git a/src/university/105.md b/src/university/105.md
new file mode 100644
index 0000000..2502116
--- /dev/null
+++ b/src/university/105.md
@@ -0,0 +1,1151 @@
+!> 转载链接:[selenium 使用教程详解-java版本](https://www.cnblogs.com/tester-ggf/p/12602211.html)
+
+
+
+## Selenium 概述
+
+### Selenium 发展史
+
+ Selenium是一系列基于Web的自动化工具,提供一套测试函数,用于支持Web自动化测试。函数非常灵活,能够完成界面元素定位、窗口跳转、结果比较。具有如下特点:
+
+- 多浏览器支持
+ - 如IE、Firefox、Safari、Chrome、Android手机浏览器等。
+- 支持多语言
+ - 如Java、C#、Python、Ruby、PHP等。
+- 支持多操作系统
+ - 如Windows、Linux、IOS、Android等。
+- 开源免费
+ - 官网:http://www.seleniumhg.org/
+
+Selenium框架由多个工具组成,包括:Selenium IDE,Selenium RC,Selenium WebDriver和SeleniumRC。
+
+发展到如今 Selenium 已经发布到了 3.0 版本了,以下是简单总结发展过程以及一些变化:
+
+- **Selenium 1.0**
+
+Jason Huggins在2004年发起的 Selenium 项目,使用 JavaScript 编写的一个类库,这个 JavaScript 类库就是Selenium core,同时也是seleniumRC、Selenium IDE的核心组件。Selenium由此诞生。
+
+
+
+- **Selenium 2.0**
+
+因为Selenium和Webdriver的合并,所以,Selenium 2.0由此诞生。
+
+简单用公式表示为:Selenium 2.0 = Selenium 1.0 + WebDriver
+
+需要强调的是,在Selenium 2.0中主推的是WebDriver,可以将其看作Selenium RC的替代品。因为Selenium为了保持向下的兼容性,所以在Selenium 2.0中并没有彻底地抛弃Selenium RC。
+
+所以,我们在学习Selenium2.0的时候,核心是学习WebDriver。它的工作原理是这样的:
+
+
+
+- **Selenium 3.0**
+
+ Selenium 3.0做了一些不大不小的更新:
+
+ - 1、终于去掉了RC,简单用公式表示为:Selenium 3.0 = Selenium 2.0 - Selenium RC(Remote Control)
+ - 2、Selenium3.0只支持Java8版本以上。
+ - 3、Selenium3.0中的Firefox浏览器驱动独立了,以前装完selenium2就可以驱动Firefox浏览器了,现在和Chrome一样,必须下载和设置浏览器驱动。
+ - 4、MAC OS 集成Safari的浏览器驱动。默认在/usr/bin/safaridriver 目录下。
+ - 5、只支持IE 9.0版本以上。
+
+### Selenium WebDriver原理
+
+将 WebDriver 驱动浏览器类比成开出租车的场景。
+
+在开出租车时有三个角色:
+
+- **乘客:**他/她告诉出租车司机去哪里,大概怎么走。
+- **出租车司机:**他按照乘客的要求来操控出租车。
+- **出租车:**出租车按照司机的操控完成真正的行驶,把乘客送到目的地。
+
+
+
+在WebDriver中也有类似的三个角色:
+
+- **工程师写的自动化测试代码**:自动化测试代码发送请求给浏览器的驱动(比如火狐驱动、谷歌驱动)
+- **浏览器的驱动**:它来解析这些自动化测试的代码,解析后把它们发送给浏览器
+- **浏览器**:执行浏览器驱动发来的指令,并最终完成工程师想要的操作。
+
+
+
+## Selenium 环境搭建
+
+### java 环境
+
+想要通过 java 语言来使用 selenium 框架,前提要完成 jdk 环境的安装。
+
+详细安装教程见:https://blog.csdn.net/shengmer/article/details/78836255
+
+### selenium 环境
+
+**简单 java 工程:**
+
+直接导入 selenium的 jar 包就可以了。
+
+jar包下载地址:[ Selenium各个版本jar下载](https://npm.taobao.org/mirrors/selenium) , 下载对应的版本即可
+
+**maven工程:**
+
+在pom文件中引入对应的依赖即可:
+
+maven仓库:https://mvnrepository.com/
+
+```xml
+
+ org.seleniumhq.selenium
+ selenium-java
+ 3.4.0
+
+```
+
+### selenium3 对应浏览器驱动下载
+
+当selenium升级到3.0之后,对不同的浏览器驱动进行了规范。如果想使用selenium驱动不同的浏览器,必须单独下载并设置不同的浏览器驱动。
+各浏览器下载地址:
+
+- Firefox浏览器驱动:[geckodriver](https://github.com/mozilla/geckodriver/releases)
+
+- Chrome浏览器驱动:[chromedriver](https://sites.google.com/a/chromium.org/chromedriver/home)[taobao备用地址](https://npm.taobao.org/mirrors/chromedriver)
+
+- IE浏览器驱动:[IEDriverServer](http://selenium-release.storage.googleapis.com/index.html)
+
+- Edge浏览器驱动:[MicrosoftWebDriver](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/)
+
+- Opera浏览器驱动:[operadriver](https://github.com/operasoftware/operachromiumdriver/releases)
+
+- PhantomJS浏览器驱动:[phantomjs](http://phantomjs.org/)
+
+ 注:部分浏览器驱动地址需要梯子。
+
+**设置浏览器驱动**
+
+设置浏览器的地址非常简单。 我们可以手动创建一个存放浏览器驱动的目录,如: C:\driver , 将下载的浏览器驱动文件(例如:chromedriver、geckodriver)丢到该目录下。
+我的电脑–>属性–>系统设置–>高级–>环境变量–>系统变量–>Path,将“C:\driver”目录添加到Path的值中。
+
+也可以通过设置`System.setProperty("webdriver.chrome.driver", "YOUR_DRIVER_PATH");`进行设置
+
+**验证浏览器驱动**
+
+验证不同的浏览器驱动是否正常使用。
+
+```java
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.edge.EdgeDriver;
+import org.openqa.selenium.ie.InternetExplorerDriver;
+import org.openqa.selenium.opera.OperaDriver;
+import org.openqa.selenium.phantomjs.PhantomJSDriver;
+
+// Chrome浏览器
+System.setProperty("webdriver.chrome.driver", "YOUR_DRIVER_PATH");
+WebDriver driver = new ChromeDriver();
+
+// Firefox浏览器
+WebDriver driver = new FirefoxDriver();
+
+// Edge浏览器
+System.setProperty("webdriver.edge.driver", "YOUR_DRIVER_PATH");
+WebDriver driver = new EdgeDriver();
+
+// Internet Explorer浏览器
+WebDriver driver = new InternetExplorerDriver();
+
+// Opera浏览器
+WebDriver driver = new OperaDriver();
+
+// PhantomJS
+WebDriver driver = new PhantomJSDriver();
+```
+
+## Selenium 简单示例
+
+- **打开百度进行搜索:**
+
+```java
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.chrome.ChromeDriver;
+
+/**
+ * @Description: 通过selenium操作浏览器打开百度进行搜索
+ * selenium版本:3.12.0; 通过maven管理jar包
+ * 开发工具:IDEA
+ * jdk:1.8
+ * 浏览器:chrome 75+
+ * @Author: ggf
+ * @Date: 2020/03/22
+ */
+public class BaiduSearch {
+ public static void main(String[] args) {
+ // 1.创建webdriver驱动
+ WebDriver driver = new ChromeDriver();
+ // 2.打开百度首页
+ driver.get("https://www.baidu.com");
+ // 3.获取输入框,输入selenium
+ driver.findElement(By.id("kw")).sendKeys("selenium");
+ // 4.获取“百度一下”按钮,进行搜索
+ driver.findElement(By.id("su")).click();
+ // 5.退出浏览器
+ driver.quit();
+ }
+}
+```
+
+## 八大元素定位
+
+- **为什么要进行元素定位?**
+
+ 我们必须告诉 selenium 怎么去定位元素,用来模拟用户的动作,或者查看元素的属性和状态,以便于我们可以执行检查。例如:我们要搜索一个产品,首先要找到搜索框与搜索按钮,接着通过键盘输入要查询的关键字,最后鼠标单击搜索按钮,提交搜索请求。
+
+ 正如上述的人工操作步骤一样,我们也希望 selenium 能模拟这样的动作,然而,selenium 并不能理解类似在搜索框中输入关键字或者点击搜索按钮这样的图形化的操作。所以需要我们程序化的告诉 selenium 如何定位搜索框和搜索按钮,从而模拟键盘和鼠标的操作。
+
+### 定位方式
+
+**selenium 提供了8种的定位方式:**
+
+- id
+- name
+- class name
+- tag name
+- link text
+- partial link text
+- xpath
+- css selector
+
+这8种定位方式在java selenium 中对应的方法为:
+
+| 方法 | 描述 | 参数 | 示例 |
+| --------------------------------- | ------------------------------------------ | --------------- | ------------------------------------------ |
+| findElement(By.id()) | 通过元素的 id 属性值来定位元素 | 对应的id属性值 | findElement(By.id("kw")) |
+| findElement(By.name()) | 通过元素的 name 属性值来定位元素 | 对应的name值 | findElement(By.name("user")) |
+| findElement(By.className()) | 通过元素的 class 名来定位元素 | 对应的class类名 | findElement(By.className("passworld")) |
+| findElement(By.tagName()) | 通过元素的 tag 标签名来定位元素 | 对应的标签名 | findElement(By.tagName("input")) |
+| findElement(By.linkText()) | 通过元素标签对之间的文本信息来定位元素 | 文本内容 | findElement(By.linkText("登录")) |
+| findElement(By.partialLinkText()) | 通过元素标签对之间的部分文本信息来定位元素 | 部分文本内容 | findElement(By.partialLinkText("百度")) |
+| findElement(By.xpath()) | 通过xpath语法来定位元素 | xpath表达式 | findElement(By.xpath("//input[@id='kw']")) |
+| findElement(By.cssSelector()) | 通过css选择器来定位元素 | css元素选择器 | findElement(By.cssSelector("#kw")) |
+
+同时这8种方法都对应有着返回复数元素的方法,分别在调用的方法findElements(By.id()) 加上一个s:
+
+- findElements(By.id())
+- findElements(By.name())
+- findElements(By.className())
+- findElements(By.tagName())
+- findElements(By.linkText())
+- findElements(By.partialLinkText())
+- findElements(By.xpath())
+- findElements(By.cssSelector())
+
+### 定位方式的用法
+
+假如我们有一个Web页面,通过前端工具(如,Firebug)查看到一个元素的属性是这样的。
+
+```html
+
+
+
+
+