selenium3.141+java将QQ邮箱登录功能进行分层编码

之前写的QQ邮箱登录或者发送邮件都属于线性编程,就是在一个主文件中,把对元素的定位,对元素的操作,还有测试步骤都放到了一个文件中,这样看着太乱了。所以我们可以分层编写,比如:对定位的元素放到一个文件中,对元素的各种操作放到一个文件中,下面就用QQ邮箱登录为例看一下如何分层:

1.将元素放到数据层。我新建了一个包叫data,在他下面新建了一个java文件叫login.java,这里存放所有的元素定位

package data;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

public class login {
	/*
	 * 切入到login_frame里
	 */
	public static void frame(WebDriver driver){
		driver.switchTo().frame(driver.findElement(By.id("login_frame")));
	}
	/*
	 * 账号登录
	 */
	public static WebElement usernameBtn(WebDriver driver){
		return driver.findElement(By.id("switcher_plogin"));
	}
	/*
	 * 用户名
	 */
	public static WebElement username(WebDriver driver){
		return driver.findElement(By.id("u"));
	}
	/*
	 * 密码
	 */
	public static WebElement password(WebDriver driver){
		return driver.findElement(By.id("p"));
	}
	/*
	 * 登录
	 */
	public static WebElement loginBtn(WebDriver driver){
		return driver.findElement(By.id("login_button"));
	}
}

2.将对元素的操作放在业务层。我新建了一个包service,在他下面新建了一个java文件叫function.java,然后将登录的时候对元素的操作放进去

package service;
import java.io.IOException;
import org.openqa.selenium.WebDriver;
import data.sendmail;
import data.login;

public class function {
	/*
	 * 登录
	 */
	public static void logintest(WebDriver driver,String username,String password){
	    //进入frame
		login.frame(driver);
		//点击账号密码登录按钮
		login.usernameBtn(driver).click();
		//输入用户名
		login.username(driver).sendKeys(username);
		//输入密码
		login.password(driver).sendKeys(password);
		//点击登录按钮
		login.loginBtn(driver).click();
	}
}

3.还有一个包叫com,里面有个类叫Common,这个主要放一些通用的功能,比如我把对Excel的读取放到了Common里面:

public class Common {
	/*
 	 * 用map的方式取Excel行数据
 	 */
	public static Map<Integer,ArrayList<String>> ExcelRow(String file,int sheetid) throws BiffException, IOException{
		Map<Integer,ArrayList<String>> map = new HashMap<Integer,ArrayList<String>>();
		ArrayList list = null;
		Workbook book = Workbook.getWorkbook(new File(file));
		Sheet sheet = book.getSheet(sheetid);
		int rows = sheet.getRows();
		int columns = sheet.getColumns();
		for(int i=0;i<rows;i++){
			list = new ArrayList();
			for(int j=0;j<columns;j++){
				list.add(sheet.getCell(j, i).getContents());
			}
			map.put(i, list);
		}
		return map;
		
	}
	
	/*
	 * 用map的方式取Excel列数据
	 */
	public static Map<Integer,ArrayList<String>> ExcelColumn(String file,int sheetid) throws BiffException, IOException{
		Map<Integer,ArrayList<String>> map = new HashMap<Integer,ArrayList<String>>();
		ArrayList list = null;
		Workbook book = Workbook.getWorkbook(new File(file));
		Sheet sheet = book.getSheet(sheetid);
		int rows = sheet.getRows();
		int columns = sheet.getColumns();
		for(int i=0;i<columns;i++){
			list = new ArrayList();
			for(int j=0;j<rows;j++){
				list.add(sheet.getCell(i, j).getContents());
			}
			map.put(i, list);
		}
		return map;			
	}

}

4.在主函数中执行对浏览器的操作和登录功能,并将登录的用户名密码数据放在Excel中,直接读取Excel的数据,这样做到代码里面不出现数据,类似参数化
在这里插入图片描述

public class test006 {

	public static void main(String[] args) throws InterruptedException, IOException, BiffException {
		// TODO Auto-generated method stub
		String f = "D:\\1.xls";
		Map<Integer,ArrayList<String>> loginmap = new HashMap<Integer,ArrayList<String>>();
		loginmap = Common.ExcelColumn(f,0);
		Map<Integer,ArrayList<String>> sendmap = new HashMap<Integer,ArrayList<String>>();
		sendmap = Common.ExcelColumn(f,1);
		System.setProperty("webdriver.chrome.driver","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
		WebDriver driver = new ChromeDriver();
		driver.get("https://mail.qq.com/cgi-bin/loginpage");
		Thread.sleep(3000);
		function.logintest(driver, loginmap.get(1).get(0), loginmap.get(1).get(1));
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值