0.1---selenium+java自动化测试进阶02----项目实战之登录代码重构
一、测试登录功能实现
以慕课网的登录为例,分析登录的功能需求,编写测试用例,找到要定位的元素以及需要的操作,编写登录功能的测试代码。代码实现如下:
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.gecko.driver","c:\\Program Files\\Mozilla Firefox\\geckodriver.exe");
WebDriver driver=new FirefoxDriver();
driver.get("https://www.imooc.com");
driver.manage().window().setSize(new Dimension(1456,876));//设置窗口的尺寸
driver.findElement(By.id("js-signin-btn")).click();//点击登录按钮
Thread.sleep(2000);
driver.findElement(By.name("email")).sendKeys("*********");
driver.findElement(By.name("password")).sendKeys("******");
driver.findElement(By.cssSelector(".moco-btn")).click();
Thread.sleep(2000);
Actions a=new Actions(driver);//鼠标移动,perform()执行所有Actions中存储的行为,可以理解成对整个操作事件的提交动作。
a.moveToElement(driver.findElement(By.cssSelector("#header-avator>img"))).perform();
String s=driver.findElement(By.className("name")).getText();//获取标签属性
String t=driver.getTitle();
String v=driver.getCurrentUrl();
System.out.println(s+t+v);
assertEquals(s,"搁浅的青木"); //验证失败时该测试将停止。vertify:失败时,该测试将继续执行,并将错误记入日显示屏。Waitfor用于等待某些条件变为真。可用于AJAX应用程序的测试。
if(s.equals("搁浅的青木")) {
System.out.println("登陆成功,请退出");
driver.findElement(By.linkText("安全退出")).click();
}else {
System.out.println("登录失败");
}
driver.quit();
}
二、代码重构之封装findElement()方法
1.提取参数,包括:输入信息、定位属性、定位属性值
2.封装findElement()方法
public class moocloginOne {
public WebDriver driver;
public void initDriver() throws InterruptedException {
System.setProperty("webdriver.gecko.driver","c:\\Program Files\\Mozilla Firefox\\geckodriver.exe");
driver=new FirefoxDriver();
driver.get("https://www.imooc.com");
driver.manage().window().setSize(new Dimension(1456,876));//设置窗口的尺寸
Thread.sleep(3000);
driver.findElement(By.id("js-signin-btn")).click();
}
public void loginScript() throws InterruptedException {
this.initDriver();
Thread.sleep(3000);
//1.提取定位参数,提高代码可用性
String userBy="name";
String userLocal="email";
String passowrdBy="name";
String PasswordLocal="password";
String loginbtnBy="cssSelector";
String loginbtnLocal=".moco-btn";
String userInfo="17839196010";
String passwordInfo="duhui619";
String userImgBy="cssSelector";
String userImgLocal="#header-avator>img";
String usernameBy="className";
String usernameLocal="name";
String usernameInfo="搁浅的青木";
WebElement user=element(userBy,userLocal);
user.isDisplayed();
WebElement password=element(passowrdBy,PasswordLocal);
password.isDisplayed();
WebElement button=element(loginbtnBy,loginbtnLocal);
button.isDisplayed();
user.sendKeys(userInfo);
password.sendKeys(passwordInfo);
button.click();
Thread.sleep(2000);
WebElement header=element(userImgBy,userImgLocal);
header.isDisplayed();
Actions a=new Actions(driver);
a.moveToElement(header).perform();
String s=element(usernameBy,usernameLocal).getText();
if(s.equals(usernameInfo)) {
System.out.println("登陆成功,请退出");
}else {
System.out.println("登录失败");
}
driver.quit();
}
//2.封装driver.findElement( By.id(local))
public WebElement element(String by,String local) {
WebElement element=null;
if(by.equals("id")) {
element=driver.findElement( By.id(local));
}else if(by.equals("name")) {
element=driver.findElement( By.name(local));
}else if(by.equals("className")) {
element=driver.findElement( By.className(local));
}else if(by.equals("linkText")) {
element=driver.findElement( By.linkText(local));
}else if(by.equals("xpath")) {
element=driver.findElement( By.xpath(local));
}else if(by.equals("cssSelector")) {
element=driver.findElement( By.cssSelector(local));
}else if(by.equals("tageName")){
element=driver.findElement( By.tagName(local));
}else {
element=driver.findElement( By.partialLinkText(local));
}
return element;
}
public static void main(String[] args) throws InterruptedException {
moocloginOne login=new moocloginOne();
Thread.sleep(2000);
login.loginScript();
}
三、代码重构之封装读取配置文件的方法
1.拆分findElement方法为by方法和element方法
2.修改byStr函数中的代码,只返回by的方式 。
3.将变量放到配置文件中,并编写读取文件类及方法-----ProUtil类。
4.编写读取配置文件函数-----调用ProUtil类,读取配置文件。
5.在byStr函数中调用读取文件函数--getproperties(),并修改byStr传入参数。
主函数:
public class moocloginTwo {
public WebDriver driver;
public void initDriver() throws InterruptedException {
System.setProperty("webdriver.gecko.driver","c:\\Program Files\\Mozilla Firefox\\geckodriver.exe");
driver=new FirefoxDriver();
driver.get(this.getproperties("Url"));
driver.manage().window().setSize(new Dimension(1456,876));//设置窗口的尺寸
Thread.sleep(3000);
element(this.byStr("closeLocal")).click();
element(this.byStr("loginLocal")).click();
}
public void loginScript() throws InterruptedException {
this.initDriver();
Thread.sleep(3000);
//3.将变量放到配置文件中,并编写读取文件类及方法-----ProUtil类
WebElement user=this.element(this.byStr("userLocal"));
user.isDisplayed();
WebElement password=this.element(this.byStr("PasswordLocal"));
password.isDisplayed();
WebElement button=this.element(this.byStr("loginbtnLocal"));
button.isDisplayed();
user.sendKeys(this.getproperties("userInfo"));
password.sendKeys(this.getproperties("passwordInfo"));
button.click();
Thread.sleep(3000);
WebElement header=this.element(this.byStr("userImgLocal"));
header.isDisplayed();
Actions a=new Actions(driver);
a.moveToElement(header).perform();
Thread.sleep(3000);
String s=this.element(this.byStr("usernameLocal")).getText();//获取标签属性
System.out.println(s);
if(s.equals(this.getproperties("usernameInfo"))) {
System.out.println("登陆成功,请退出");
this.element(this.byStr("logOut")).click();
}else {
System.out.println("登录失败");
}
//driver.quit();
}
public By byStr(String local) {
//5.在byStr函数中调用读取文件函数--getproperties(),并修改byStr传入参数
String locator=this.getproperties(local);
String locatorType=locator.split(">")[0];
String locatorValue=locator.split(">")[1];
//2.修改byStr函数中的代码,只返回by的方式
if(locatorType.equals("id")) {
return By.id(locatorValue);
}else if(locatorType.equals("name")) {
return By.name(locatorValue);
}else if(locatorType.equals("className")) {
return By.className(locatorValue);
}else if(locatorType.equals("linkText")) {
return By.linkText(locatorValue);
}else if(locatorType.equals("xpath")) {
return By.xpath(locatorValue);
}else if(locatorType.equals("cssSelector")) {
return By.cssSelector(locatorValue);
}else if(locatorType.equals("tageName")){
return By.tagName(locatorValue);
}else {
return By.partialLinkText(locatorValue);
}
}
//1.封装 driver.findElenment(),编写element函数————将byStr函数中的 driver.findElenment()与by.方式()拆开
public WebElement element(By location) {
return driver.findElement(location);
}
//4.编写读取配置文件函数-----调用ProUtil类,读取配置文件
public String getproperties(String local) {
ProUtil properties=new ProUtil("E:\\eclipse\\workspace\\mypro\\src\\mooc\\day01\\element.properties");
String locator=properties.getPro(local);
return locator;
}
public static void main(String[] args) throws InterruptedException {
moocloginTwo login=new moocloginTwo();
login.loginScript();
}
}
读取配置文件函数:
public class ProUtil {
private Properties properties;
private String filePath;
public ProUtil(String filePath) {
this.filePath=filePath;
this.properties=readProperties();
}
public Properties readProperties() {
Properties pro=new Properties();
try {
InputStreamReader inputstream=new InputStreamReader(new FileInputStream(filePath),"UTF-8" );//考虑到编码格式
BufferedReader in=new BufferedReader(inputstream);
pro.load(in);
} catch (IOException e) {
e.printStackTrace();
}
return pro;
}
public String getPro(String key) {
if(properties.containsKey(key)) {
String value=properties.getProperty(key);
return value;
}else {
System.out.println("获取的键值不对");
return " ";
}
}
}
配置文件:
#-----------登录页面元素部分:----------
#登录网址
Url=https://www.imooc.com
#登录连接的位置
loginLinkLocal=id>js-signin-btn
#输入登录账号
userLocal=name>email
#输入登录密码
PasswordLocal=name>password
#点击登录按钮
loginbtnLocal=cssSelector>.moco-btn
#个人头像
userImgLocal=cssSelector>#header-avator
#个人用户名
usernameLocal=className>name
#安全退出
logOut=linkText>安全退出
#--------登录参数部分:--------
#登录账号
userInfo=*********
#登录密码
passwordInfo=*******
#用于比对的用户名
usernameInfo=搁浅的青木
0.1---selenium+java自动化测试进阶02----项目实战之登录代码重构的更多相关文章
- Java自动化测试框架-02 - TestNG之理论实践 - 纸上得来终觉浅,绝知此事要躬行(详细教程)
理论 TestNG,即Testing, NextGeneration,下一代测试技术,是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用 ...
- Java自动化测试框架-02 - TestNG之理论到实践
TestNG,即Testing, NextGeneration,下一代测试技术,是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用来做集 ...
- selenium+java破解极验滑动验证码的示例代码
转自: https://www.jianshu.com/p/1466f1ba3275 selenium+java破解极验滑动验证码 卧颜沉默 关注 2017.08.15 20:07* 字数 3085 ...
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十二) 代码重构使用反射工厂解耦(一)缓存切换
前言 上一篇中,我们用了反射工厂来解除BLL和UI层耦合的问题.当然那是最简单的解决方法,再复杂一点的程序可能思路相同,但是在编程细节中需要考虑的就更多了,比如今天我在重构过程中遇到的问题.也是接下来 ...
- 0.1---selenium+java自动化测试进阶01---PageObject设计模式
一.PageObject设计模式 1.简介 PageObject设计模式,又称页面对象模式,是使用Selenium的广大同行最为公认的一种设计模式.在设计测试时,把元素和方法按照页面抽象出来,分离 ...
- selenium java 自动化测试 基于火狐浏览器/谷歌浏览器
:环境 java1.8+ieda 直接上代码 pom.xml <?xml version="1.0" encoding="UTF-8"?> < ...
- cumber + selenium +java自动化测试
1.新建一个maven项目,pom文件为: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&quo ...
- Selenium+Java自动化测试的方法
1.设置等待时间Thread.sleep(2000); (1000代表1s)2.断言assertion:验证应用程序的状态是否同所期望的一致.常见的断言包括:验证页面内容,如标题是否为X或当前位置是否 ...
- Java自学基础、进阶、项目实战网站推荐
推荐一个自学的好平台,有Java基础,前端,后端,基础的内容都有讲解,还有框架的讲解和实战项目,特别适合自学 JAVA 自学网站 JAVA 练习题 Spring 教程 Mybatis 教程 Sprin ...
随机推荐
- MySQL创建用户,并设置指定访问数据库
一.创建用户并授权 1. 登录mysql mysql -u root -q输入密码2. 创建数据库(已有数据库就不需要建立) create database newDB;//以创建newDB为例3. ...
- 校园网络 luogu P2812 (又是强联通)
题目传送门!(luogu) 首先考虑问题一 不难想到,如果有一个学校作为终端机,那么跟其处于同一个强联通中的所有学校就可以不用作为终端机了. 那么,问题一也就迎刃而解了:找到所有入度为0的缩点.因为这 ...
- C#线程 并行线程
第五部分 并行线程 在本节中,我们将介绍Framework 4.0新增的利用多核处理器的多线程API: 并行LINQ或PLINQ Parallel 类 任务并行性构造 并发集合 自旋锁和自旋等待 ...
- 树莓派 Ubuntu Mate更换中国软件源
更换步骤: 1.以root身份打开 /etc/apt/sources.list ,可以用vim或者nano 2.将 http://ports.ubuntu.com/ 全部替换为 http://mirr ...
- GNS3--cisco路由器NAT配置
一.基础 Cisco路由器配置中NAT的主要命令: 静态NAT: 1.指定NAT内部接口 在内网相应接口的接口配置模式下执行:ip nat inside 2.指定NAT外部接口 在外网相应接口的接口配 ...
- Java实现 LeetCode 802 找到最终的安全状态 (DFS)
802. 找到最终的安全状态 在有向图中, 我们从某个节点和每个转向处开始, 沿着图的有向边走. 如果我们到达的节点是终点 (即它没有连出的有向边), 我们停止. 现在, 如果我们最后能走到终点,那么 ...
- Java 第十一届 蓝桥杯 省模拟赛 第十层的二叉树
一棵10层的二叉树,最多包含多少个结点? 注意当一棵二叉树只有一个结点时为一层. 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可.本题的结果为一个整数,在提交答案时只填写这个整数,填写多余 ...
- Java实现 LeetCode 743 网络延迟时间(Dijkstra经典例题)
743. 网络延迟时间 有 N 个网络节点,标记为 1 到 N. 给定一个列表 times,表示信号经过有向边的传递时间. times[i] = (u, v, w),其中 u 是源节点,v 是目标节点 ...
- Java实现 蓝桥杯 基础练习 字母图形
基础练习 字母图形 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCD ...
- Java实现 蓝桥杯 历届试题 小数第n位
历届试题 小数第n位 时间限制:1.0s 内存限制:256.0MB 问题描述 我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数. 如果我们把有限小数的末尾加上无限多个0,它们就有了统一的 ...