简介:seleniumweb自动化测试的工具,它支持IEfirefoxchrome等多种浏览器,支持javac#pythonruby等多种脚本语言。下面以百度为实例,利用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.将页面上读到的某些数据插入到数据库,这里我直接模拟一些统计数据插入数据库

   模拟统计数据操作:2mapvalue相加,放入一个新的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