前言
新人一个,打算写写博客,去记录个人的学习历程。
花了一周的时间去学习了selenium自动化,然后记录下来,一些语法、代码之类的。
文笔不是很好,一些代码标注、注释可能不是很准确,望见谅。
selenium自动化测试呢我用的是Java+maven,工具是IDEA。我在学习自动化的时候用的是eclipse,我习惯用IDEA,看个人喜好了。(要有Java编程基础,Java的话可能会在后续上线,还没写)
介绍
自动化测试,顾名思义,是使用机器软件替代手工执行测试用例。
自动化测试分类:分为自动功能、自动接口、自动单元测试。
自动化测试前提:需求相对稳定,手工测试通过后,项目周期长,脚本复用性强。
搭建环境
一、Java-jdk1.8版本的,具体安装步骤的话去搜,这里就不详细介绍了。环境变量要配好,新建JAVA_HOME,Path,%JAVA_HOME\bin。完成之后可以去dos窗口(win+r 输入cmd)输入java、javac、java -version看看有没有安装成功。
二、开发工具我用的是IDEA,直接去官网下载即可:IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrains
三、maven,我用的是3.6.3版本,直接去官网下载:Maven – Maven Releases History
注意,在使用之前,必须安装配置好JDK。这里引用一位大佬文章:史上最全安装Maven教程_小Du猿的博客-CSDN博客
去dos窗口输入mvn、mvn -v检查有没有安装成功
四、与IEDA进行关联
file-->settings-->maven
五、浏览器,我用的是火狐浏览器,有两点:必须是安装版和必须是默认安装路径。否则会报错
六、驱动程序,geckodriver,去官网下载:geckodriver Mirror
然后把geckodriver.exe文件复制到D:\apache-maven-3.6.3\bin里面(你的maven安装路径)
打开dos输入geckodriver
七、结束了,环境都差不多弄完了,接下来就是编写自动化测试脚本:编写代码控制浏览器,实际脚本控制驱动,驱动控制浏览器,浏览器控制网页
开始编程
创建项目:file--》new--》project--》maven--》打对勾--》选择maven-archetype-quic'kstart--》next--》项目名称路径名自己写--》然后maven home path选择自己安装maven的路径--》finsh
然后等待加载(需要联网)
然后去修改pom.xml导入需要的jar文件
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>3.14.0</version> <scope>test</scope> </dependency>
复制粘贴
然后保存,右上角会出来一个小小的m,点一下就可以
左边界面如图所示,如果是这样,那说明都OK了,接下来就开始编码了。注意,所有代码要写在test文件里面,不要写在main里面。
创建package包(右键package),创建class类(包名右键class)。
测试用的网站,服务器可以去搜一下(开源的)。我用的是phpfind,百度也能下载,要是用的是phpfind,把端口号改成8088其他不用改,启动就可以
首先,测试一下能否自动打开网站(http://localhost:8088/)
然后,输入脚本,测试能否自动打开浏览器,网站
package org.example.autotest01;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Demo {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
driver.get("http://localhost:8088/");
}
}
打开成功!可以看到浏览器输入栏有红色标志,机器人的头,说明机器已经代管
接下来我们开始测试登录功能(因为第一次打开这个网站,没有注册,所以写一个脚本测试登录功能, 输入一组错误的用户名和密码, 预期结果是登录失败)
在这个网页,点击登录,然后复制网址(http://localhost:8088/index.php?m=user&c=public&a=login)新建class类(Login.java)
测试能否进入登录界面
package org.example.autotest01;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Login {
public static void main(String[] args) {
// 写一个脚本测试登录功能, 输入一组错误的用户名和密码, 预期结果是登录失败
// 打开浏览器
WebDriver driver = new FirefoxDriver();
// 浏览器窗口最大化 因为有的打开网站的时候窗口特别小,所以要窗口最大化
driver.manage().window().maximize();
//访问网址
driver.get("http://localhost:8088/index.php?m=user&c=public&a=login");
}
}
登录页面测试成功
接下来开始测试输入账号和密码,右键输入框,选择检查(F12不可以,可能有数据不同,会报错)然后定位元素(id,name,class三种选择)复制定位元素,输入用户名的元素是username,密码元素是password
// 找到用户名和密码框,输入对应测试数据
driver.findElement(By.id("username")).sendKeys("test123");//findElement 查找定位元素 sendKeys 向定位到的元素输入数据
driver.findElement(By.id("password")).sendKeys("123456");
然后点击登录按钮,右键检查元素,我们可以发现他只有class,所以我们就定位class元素,然后class里面是login_btn fl,这时候我们选择(推荐)第一个,也就是login_btn,否则的话会报错
// 找到并点击登录按钮
driver.findElement(By.className("login_btn")).click();//click() 点击定位到的元素
代码整合,然后就完成了登录测试功能
在登录过程中,我们可以发现登录时会有网页跳转(会有等待时间)所以我们要给他添加一个强制等待时间,添加这段代码会报错,点击add就可以
获取登录结果,作用就是进行比较。在此之前我们先注册一个账号,然后进行登录,把登陆成功后的网址复制下来(http://localhost:8088/index.php?m=user&c=index&a=index)两两进行比较,预期网址和实际网址进行比较。
//获取操作结果 sjwz:实际网址
String sjwz = driver.getCurrentUrl();//获取当前浏览器中的网址
// 和预期结果进行比较 取2个值进行比较
//预期网址就是登录网址 yqwz:预期网址
String yqwz = "http://localhost:8088/index.php?m=user&c=public&a=login";
//sjwz.equals(yqwz)比较2个字符串是否一致 一致是true 不一致是false
if (sjwz.equals(yqwz)){
System.out.println("登录失败,用例通过");
}else {
System.out.println("登录成功,用例失败---bug");
}
最后代码整合,进行测试
package org.example.autotest01;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Login {
public static void main(String[] args) throws InterruptedException {
// 写一个脚本测试登录功能, 输入一组错误的用户名和密码, 预期结果是登录失败
// 打开浏览器
WebDriver driver = new FirefoxDriver();
// 浏览器窗口最大化 因为有的打开网站的时候窗口特别小,所以要窗口最大化
driver.manage().window().maximize();
//访问网址
driver.get("http://localhost:8088/index.php?m=user&c=public&a=login");
// 找到用户名和密码框,输入对应测试数据
driver.findElement(By.id("username")).sendKeys("test123");//findElement 查找定位元素 sendKeys 向定位到的元素输入数据
driver.findElement(By.id("password")).sendKeys("123456");
// 找到并点击登录按钮
driver.findElement(By.className("login_btn")).click();//click() 点击定位到的元素
// 等待5s登录操作完成
Thread.sleep(5000);
//获取操作结果 sjwz:实际网址
String sjwz = driver.getCurrentUrl();//获取当前浏览器中的网址
// 和预期结果进行比较 取2个值进行比较
//预期网址就是登录网址 yqwz:预期网址
String yqwz = "http://localhost:8088/index.php?m=user&c=public&a=login";
//sjwz.equals(yqwz)比较2个字符串是否一致 一致是true 不一致是false
if (sjwz.equals(yqwz)){
System.out.println("登录失败,用例通过");
}else {
System.out.println("登录成功,用例失败---bug");
}
}
}
输出结果
第一次写博客,可能有些地方不足,有纰漏,望谅解