简介:selenium是web自动化测试的工具,它支持IE,firefox,chrome等多种浏览器,支持java,c#,python,ruby等多种脚本语言。下面以百度为实例,利用selenium做一些简单的自动化操作,最后模拟一些数据,对数据库进行操作
一.前提准备
1.selenium-java-2.45.0.jar
2.selenium-server-standalone-2.45.0.jar
3.mysql-connector-java-5.1.7-bin.jar java连接mysql的驱动包
二.实现目标
1.启动火狐浏览器
2.打开百度链接
3.在输入框中输入文字
4.点击百度按钮
5.返回前一页,退回后一页
6.在新闻,网页,知道这些tab中切换
7.点击文库中的下拉框选择一项
8.点击搜索结果中的一项,打开了一个新的页面
9.打开一个新的页面之后,关闭这个页面
10.将页面上读到的某些数据插入到数据库,这里我直接模拟一些数据插入数据库
三.代码实现
1.启动火狐浏览器
WebDriver driver=new FirefoxDriver();
2.打开百度
String url = "http://www.baidu.com";
driver.get(url);
//得到title
String title= driver.getTitle();
//得到当前页面url
String currentString=driver.getCurrentUrl();
//得到当前页面句柄
String currentWindow=driver.getWindowHandle();
String preWindowString=currentWindow;//主页
3.获取输入框的id,id=kw。对于firefox有2种方式获取控件元素:①快捷键F12 ②在火狐的附加组件中安装插件firebug
WebElement input= driver.findElement(By.id("kw"));
input.sendKeys("webdriver");
4.点击百度按钮
WebElement btn= driver.findElement(By.id("su"));
btn.click();
5.返回前一页
driver.navigate().back();
退回后一页
driver.navigate().forward();
6.切换其他tab栏,如文库,文库是一个链接,所以为linktext
WebElement link= driver.findElement(By.linkText("文库"));
link.click();
7.点击文库中的下拉框选择一项,className=d-arrow不止一个,所以为一个集合,点击你需要的那个下拉框
List<WebElement> list= driver.findElements(By.className("d-arrow"));
((WebElement) list.get(1)).click();
WebElement l= driver.findElement(By.linkText("最多下载"));
l.click();
8.点击搜索结果中的一项,打开了一个新的页面
WebElement link= driver.findElement(By.linkText("网页"));
link.click();
//在新窗口打开了列表中的一项
WebElement result= driver.findElement(By.xpath("//div[@id='content_left']/div/h3/a[@target='_blank']"));
result.click();
9.打开一个新的页面之后,关闭这个页面
//得到所有页面句柄
Set<String> handles=driver.getWindowHandles();
Iterator<String> it=handles.iterator();
while(it.hasNext()){
String cruWindowString=it.next();//当前页
System.out.println("next"+cruWindowString);
if(currentWindow==cruWindowString){
continue;
}
WebDriver window=driver.switchTo().window(cruWindowString);
}
Thread.sleep(5000);
driver.close();
10.将页面上读到的某些数据插入到数据库,这里我直接模拟一些统计数据插入数据库
模拟统计数据操作:2组map,value相加,放入一个新的map中插入数据库,如果数据库存在改数据则不插入
public class mysql {
public static void main(String[] args){
// 驱动程序名
String driver = "com.mysql.jdbc.Driver";
// URL指向要访问的数据库名
String url = "xxxx";
// MySQL配置时的用户名
String user = "xxxx";
// MySQL配置时的密码
String password = "xxxx";
try {
// 加载驱动程序
Class.forName(driver);
// 连续数据库
Connection conn = DriverManager.getConnection(url, user, password);
if(!conn.isClosed())
System.out.println("Succeeded connecting to the Database!");
// statement用来执行SQL语句
Statement statement = conn.createStatement();
ArrayList<String> list1=new ArrayList<String>();
list1.add("11");
list1.add("22");
list1.add("33");
HashMap<String, ArrayList<String>> map1=new HashMap<String,ArrayList<String>>();
map1.put("2015-06-04", list1);
ArrayList<String> list2=new ArrayList<String>();
list2.add("11");
list2.add("22");
list2.add("33");
System.out.println(list2);
HashMap<String,ArrayList<String>> map2=new HashMap<String,ArrayList<String>>();
map2.put("2015-06-04", list2);
HashMap<String, ArrayList<Integer>> resultMap = write(map1,map2);
for (String keyString : resultMap.keySet()) {
int newUser = 0;
int activeUser = 0;
int statUser = 0;
ArrayList<Integer> list = resultMap.get(keyString);
newUser = Integer.valueOf(list.get(0));
System.out.println(newUser);
activeUser = Integer.valueOf(list.get(1));
statUser = Integer.valueOf(list.get(2));
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date=sdf.parse(keyString);
Date dd=new Date(date.getTime());
System.out.println(dd);
String sql = "select * from rp_ca_appdata_copy where date='"+dd+"'";
// 结果集
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs =ps.executeQuery();
int count=0;
while(rs.next()) {
count++;
}
if(count==0){
String sql1 = "insert into 表名(Date,Newusernum,Activeusernum,Startnum,Type,App) values"
+ "('"+dd+"','"+newUser+"','"+activeUser +"','"+statUser+"',0,0)";
PreparedStatement ps1 = conn.prepareStatement(sql1,Statement.RETURN_GENERATED_KEYS);
ps1.executeUpdate();
System.out.println("数据插入成功");
}else{
System.out.println(dd+"的数据已存在,无需插入");
}
rs.close();
conn.close();
}
} catch(ClassNotFoundException e) {
System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();
} catch(SQLException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
}
public static HashMap<String, ArrayList<Integer>> write(HashMap<String, ArrayList<String>> p_map1,HashMap<String, ArrayList<String>> p_map2) {
HashMap<String, ArrayList<Integer>> resultMap = new HashMap<String, ArrayList<Integer>>();
for (String keyString : p_map1.keySet()) {
int newUser = 0;
int activeUser = 0;
int statUser = 0;
for (String keyString2 : p_map2.keySet()) {
if (keyString.equals(keyString2)) {
ArrayList<String> list1 = p_map1.get(keyString);
ArrayList<String> list2 = p_map2.get(keyString2);
ArrayList<Integer> resultList = new ArrayList<Integer>();
newUser = Integer.valueOf(list1.get(0))+ Integer.valueOf(list2.get(0));
activeUser = Integer.valueOf(list1.get(1))+ Integer.valueOf(list2.get(1));
launchTime = Integer.valueOf(list1.get(2))+ Integer.valueOf(list2.get(2));
resultList.add(0, newUser);
resultList.add(1, activeUser);
resultList.add(2, statUser);
resultMap.put(keyString, resultList);
}
}
}
for (String keyString : resultMap.keySet()) {
System.out.println("key == " + keyString);
System.out.println("value == " + resultMap.get(keyString));
}
return resultMap;
}
}
四.启动 Selenium Server 服务器端
1)运行cmd,找到selenium-server-standalone-2.45.0.jar的存放的路径,输入java -jar selenium-server-standalone-2.45.0.jar ,启动服务器成功后,再运行上面的代码
2)最好用记事本写一个启动文件,文件后缀为.bat,启动时直接双击
@echo off
cd jar包存放路径,如D:\\XXXX
D:
java -jar selenium-server-standalone-2.45.0.jar