本文主要是对selenium学习的一个总结,这里我选择在phpwind中完成这两个操作。
读取文件并完成注册的主要步骤是:
1、先进行文件的读取。
2、对文件的内容进行切割,以获得用户名和密码。
3、利用selenium完成注册。
文件的读取通过IO流即可完成
File filename=new File(path);
InputStreamReader reader=new InputStreamReader(
new FileInputStream(filename));
BufferedReader br=new BufferedReader(reader);
String line;
//利用循环输出文本内容
while((line=br.readLine())!=null) {
System.out.println(line);
}
在获得文本内容后,对其进行切割(文本格式为username:***(Tab键)password:***)
try {
/* 读入TXT文件 */
File filename=new File(path);
InputStreamReader reader=new InputStreamReader(
new FileInputStream(filename));
BufferedReader br=new BufferedReader(reader);
String line;
while((line=br.readLine())!=null) {
/**
对文件中的内容进行切割
*/
//先切割Tab键
String[] s1=line.split(" ");
for(int i=0;i<s1.length;i=i+2) {
//获取用户名和密码并且放进相应的数组中
String[] un=s1[i].split("username:");
String[] ps=s1[i+1].split("password:");
String username=un[1];
String password=ps[1];
}
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
完成切割后,运用selenium完成注册即可
public static void Register(WebDriver driver,String username,String password) {
//输入用户名
SendById(driver, "J_reg_username", username);
getTip(driver);
//检测用户名是否合法
String u=driver.findElement(By.id("J_reg_tip_username")).getText();
if(u.equals("用户名已经存在,请选择其他用户名")||u.equals("用户名不能为空")
||u.equals("用户名含有非法字符,请选择其他用户名")
||u.equals("用户名长度错误,长度控制在3-15位,不能有空格")) {
System.out.println(username+u);
}else {
//输入密码
SendById(driver, "J_reg_password", password);
getTip(driver);
//检测密码是否合法
String p=driver.findElement(By.id("J_reg_tip_password")).getText();
if(p.equals("密码不能为空")||p.equals("密码长度错误,最小长度6个字,最大长度15个字")) {
System.out.println(p);
}else {
//确认密码
SendById(driver, "J_reg_repassword", password);
//输入邮箱
String email=username+"@qq.com";
SendById(driver, "J_reg_email", email);
getTip(driver);
//检测邮箱是否合法
String e=driver.findElement(By.id("J_reg_tip_email")).getText();
if(e.equals("邮箱不能为空")||e.equals("该邮箱地址已经被注册")) {
System.out.println(e);
}else {
//点击同意并注册
driver.findElement(By.xpath("/html/body/div/div[2]/div/div[1]/"
+ "div/form/div/dl[5]/dd/button")).click();
//返回首页
driver.findElement(By.id("J_head_user_a")).click();
driver.findElement(By.linkText("退出")).click();
//点击立即注册
driver.findElement(By.xpath("/html/body/div/div[2]/"
+ "div[3]/div[2]/div[1]/dd/a")).click();
}
}
}
}
以上是通过读取文件完成注册的基本流程。
接下来介绍一下通过生成随机用户名及密码完成注册并写入文件中的流程。
1、生成随机的用户名和密码
2、利用selenium完成注册
3、将生成的用户名和密码写入指定文件
生成随机用户名和密码的方法:
public static String getRandomString(int length) {
StringBuffer buffer=new StringBuffer("abcdefghijklmnopqrstuvwxyzABC"
+ "DEFGHIJKLMNOPQRSTUVWXYZ0123456789");
StringBuffer sb=new StringBuffer();
Random random=new Random();
int range=buffer.length();
for(int i=0;i<length;i++) {
sb.append(buffer.charAt(random.nextInt(range)));
}
return sb.toString();
}
接下来就是完成注册,最后再将用户名和密码写入指定文件:
public static void WriteRandomString(WebDriver driver,String path,int count) {
Auto_Register_byRandom ar=new Auto_Register_byRandom();
try {
File write=new File(path);
//判断文件是否存在,不存在创建新文件,否则利用追加的方式写进文件中
if(!write.exists())
write.createNewFile();
BufferedWriter out=new BufferedWriter(new FileWriter(write,true));
for(int i=0;i<count;i++) {
String username=ar.getRandomString(8);
String password=ar.getRandomString(6);
Register(driver, username, password);
out.write("用户名:"+username+" 密码:"+password+"\r\n");
out.flush();
continue;
}
out.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("完成注册");
driver.close();
}
最后附上完整代码:
通过读取文件完成注册:
public class Auto_Register_byRead {
public static void main(String[] args) {
//启动浏览器
String driverPath=System.getProperty("user.dir")+
"/geckodriver-v0.21.0-win64/geckodriver.exe";
System.setProperty("webdriver.gecko.driver",driverPath);
WebDriver driver=new FirefoxDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
driver.get("http://localhost/phpwind/");
//点击立即注册
driver.findElement(By.xpath("/html/body/div/div[2]/"
+ "div[3]/div[2]/div[1]/dd/a")).click();
Read_Text(driver, "C:\\Users\\gagaga\\Desktop\\users.txt");
}
/**
* 读取文件并完成注册
* @param driver
* @param path
*/
public static void Read_Text(WebDriver driver,String path) {
try {
/* 读入TXT文件 */
File filename=new File(path);
InputStreamReader reader=new InputStreamReader(
new FileInputStream(filename));
BufferedReader br=new BufferedReader(reader);
String line;
while((line=br.readLine())!=null) {
//对文件中的内容进行切割
String[] s1=line.split(" ");
for(int i=0;i<s1.length;i=i+2) {
String[] un=s1[i].split("username:");
String[] ps=s1[i+1].split("password:");
String username=un[1];
String password=ps[1];
//进行注册
Register(driver, username, password);
continue;//出现错误时,跳过此次循环
}
}
br.close();
driver.close();
System.out.println("完成注册 !");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 进行注册
* @param driver
* @param username
* @param password
*/
public static void Register(WebDriver driver,String username,String password) {
//输入用户名
SendById(driver, "J_reg_username", username);
getTip(driver);
//检测用户名是否合法
String u=driver.findElement(By.id("J_reg_tip_username")).getText();
if(u.equals("用户名已经存在,请选择其他用户名")||u.equals("用户名不能为空")
||u.equals("用户名含有非法字符,请选择其他用户名")
||u.equals("用户名长度错误,长度控制在3-15位,不能有空格")) {
System.out.println(username+u);
}else {
//输入密码
SendById(driver, "J_reg_password", password);
getTip(driver);
//检测密码是否合法
String p=driver.findElement(By.id("J_reg_tip_password")).getText();
if(p.equals("密码不能为空")||p.equals("密码长度错误,最小长度6个字,最大长度15个字")) {
System.out.println(p);
}else {
//确认密码
SendById(driver, "J_reg_repassword", password);
//输入邮箱
String email=username+"@qq.com";
SendById(driver, "J_reg_email", email);
getTip(driver);
//检测邮箱是否合法
String e=driver.findElement(By.id("J_reg_tip_email")).getText();
if(e.equals("邮箱不能为空")||e.equals("该邮箱地址已经被注册")) {
System.out.println(e);
}else {
//点击同意并注册
driver.findElement(By.xpath("/html/body/div/div[2]/div/div[1]/"
+ "div/form/div/dl[5]/dd/button")).click();
//返回首页
driver.findElement(By.id("J_head_user_a")).click();
driver.findElement(By.linkText("退出")).click();
//点击立即注册
driver.findElement(By.xpath("/html/body/div/div[2]/"
+ "div[3]/div[2]/div[1]/dd/a")).click();
}
}
}
}
/**
* 通过id添加内容
* @param driver
* @param id
* @param message
*/
public static void SendById(WebDriver driver,String id,String message) {
driver.findElement(By.id(id)).clear();
driver.findElement(By.id(id)).sendKeys(message);
}
/**
* 获取文本框提示信息
* @param driver
*/
public static void getTip(WebDriver driver) {
driver.findElement(By.xpath("/html/body/div/div[2]/div/div[1]/div/form/div")).click();
driver.findElement(By.id("J_reg_email")).click();
driver.findElement(By.xpath("/html/body/div/div[2]/div/div[1]/div/form/div")).click();
}
}
通过生成随机用户名及密码完成注册并写入文件中:
public class Auto_Register_byRandom {
public static void main(String[] args) {
//启动浏览器
String driverPath=System.getProperty("user.dir")+
"/geckodriver-v0.21.0-win64/geckodriver.exe";
System.setProperty("webdriver.gecko.driver",driverPath);
WebDriver driver=new FirefoxDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
driver.get("http://localhost/phpwind/");
//点击立即注册
driver.findElement(By.xpath("/html/body/div/div[2]/"
+ "div[3]/div[2]/div[1]/dd/a")).click();
WriteRandomString(driver, "C:\\Users\\gagaga\\Desktop\\test.txt", 6);
}
/**
* 完成注册并将用户名和密码写入到指定文件中
* @param driver
* @param path
*/
public static void WriteRandomString(WebDriver driver,String path,int count) {
Auto_Register_byRandom ar=new Auto_Register_byRandom();
try {
File write=new File(path);
if(!write.exists())
write.createNewFile();
BufferedWriter out=new BufferedWriter(new FileWriter(write,true));
for(int i=0;i<count;i++) {
String username=ar.getRandomString(8);
String password=ar.getRandomString(6);
Register(driver, username, password);
out.write("用户名:"+username+" 密码:"+password+"\r\n");
out.flush();
continue;
}
out.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("完成注册");
driver.close();
}
/**
* 进行注册
* @param driver
* @param username
* @param password
*/
public static void Register(WebDriver driver,String username,String password) {
//输入用户名
SendById(driver, "J_reg_username", username);
getTip(driver);
//检测用户名是否合法
String u=driver.findElement(By.id("J_reg_tip_username")).getText();
if(u.equals("用户名已经存在,请选择其他用户名")||u.equals("用户名不能为空")
||u.equals("用户名含有非法字符,请选择其他用户名")
||u.equals("用户名长度错误,长度控制在3-15位,不能有空格")) {
System.out.println(username+u);
}else {
//输入密码
SendById(driver, "J_reg_password", password);
getTip(driver);
//检测密码是否合法
String p=driver.findElement(By.id("J_reg_tip_password")).getText();
if(p.equals("密码不能为空")||p.equals("密码长度错误,最小长度6个字,最大长度15个字")) {
System.out.println(p);
}else {
//确认密码
SendById(driver, "J_reg_repassword", password);
//输入邮箱
String email=username+"@qq.com";
SendById(driver, "J_reg_email", email);
getTip(driver);
//检测邮箱是否合法
String e=driver.findElement(By.id("J_reg_tip_email")).getText();
if(e.equals("邮箱不能为空")||e.equals("该邮箱地址已经被注册")) {
System.out.println(e);
}else {
//点击同意并注册
driver.findElement(By.xpath("/html/body/div/div[2]/div/div[1]/"
+ "div/form/div/dl[5]/dd/button")).click();
//返回首页
driver.findElement(By.id("J_head_user_a")).click();
driver.findElement(By.linkText("退出")).click();
//点击立即注册
driver.findElement(By.xpath("/html/body/div/div[2]/"
+ "div[3]/div[2]/div[1]/dd/a")).click();
}
}
}
}
/**
* 通过id添加内容
* @param driver
* @param id
* @param message
*/
public static void SendById(WebDriver driver,String id,String message) {
driver.findElement(By.id(id)).clear();
driver.findElement(By.id(id)).sendKeys(message);
}
/**
* 获取文本框提示信息
* @param driver
*/
public static void getTip(WebDriver driver) {
driver.findElement(By.xpath("/html/body/div/div[2]/div/div[1]/div/form/div")).click();
driver.findElement(By.id("J_reg_email")).click();
driver.findElement(By.xpath("/html/body/div/div[2]/div/div[1]/div/form/div")).click();
}
/**
* 生成随机字符串
* @param length
* @return
*/
public static String getRandomString(int length) {
StringBuffer buffer=new StringBuffer("abcdefghijklmnopqrstuvwxyzABC"
+ "DEFGHIJKLMNOPQRSTUVWXYZ0123456789");
StringBuffer sb=new StringBuffer();
Random random=new Random();
int range=buffer.length();
for(int i=0;i<length;i++) {
sb.append(buffer.charAt(random.nextInt(range)));
}
return sb.toString();
}
}