WebDriver初探(登录和第一个case)

时间:2022-12-13 18:52:49

今天使用WebDriver对服务端后台进行一个初步访问,实现登录、菜单跳转和数据初步判断的小功能。

服务端使用EXTJS的技术自动生成HTML,这种架构非常的不适合自动化测试,定位元素非常的困难。不过今天我们只是进行一下小尝试,不涉及深入的知识。

 

好了,废话不说了,上代码

 1 package com.xws.support.ly;
 2 
 3 import org.openqa.selenium.By;
 4 import org.openqa.selenium.WebDriver;
 5 import org.openqa.selenium.WebElement;
 6 import org.openqa.selenium.chrome.ChromeDriver;
 7 
 8 public class Login {
 9     private String userName = "";
10     private String passWord = "";
11     private String identifying = "";
12     private String url = "";
13     WebDriver driver = new ChromeDriver();
14     WebElement user = null;
15     WebElement pass=null;
16     WebElement identifyingcode = null;
17 
18     
19     Login(String userName,String PassWord,String identifying,String url){
20         this.userName= userName;
21         this.passWord = PassWord;
22         this.identifying = identifying;
23         this.url = url;
24     }
25     
26     public WebDriver SystemLogin(){
27         //通过chrome打开测试地址
28         driver.get("http://172.23.69.144:8888/management/login.jsp");
29         
30         //通过By.name方法获取登录名、密码、验证码元素
31         user = driver.findElement(By.name("userName"));
32         pass = driver.findElement(By.name("password"));
33         identifyingcode = driver.findElement(By.name("yzm"));
34         
35         //将登录名、密码、验证码文本框清空
36         user.clear();
37         pass.clear();
38         identifyingcode.clear();
39         
40         //输入登录名、密码、验证码
41         user.sendKeys(userName);
42         pass.sendKeys(passWord);
43         identifyingcode.sendKeys(identifying);
44         
45         //进行登录
46         driver.findElement(By.xpath("//a[contains(@href,'login')]")).click();
47         
48         return driver;
49     }
50 }


上述代码完成了页面登录的操作(验证码这里我更改了servlet,输入任意的字符都验证通过)

 

 1 public class OpenMenu {
 2 
 3     WebElement menuUrl=null;
 4     List<WebElement> list = null;
 5         
 6     public void getMenu(WebDriver driver,String menuText){
 7         //将所有的tree图片元素放入list中
 8         list = driver.findElements(By.cssSelector("img.x-tree-elbow-img.x-tree-elbow-plus.x-tree-expander"));
 9         
10         //循环list,将所有菜单全部展开
11         for(int i=0;i<list.size();i++){
12             
13             try {
14                 //这里讲每次展开菜单做一个等待,以避免菜单未加载完成导致异常
15                 Thread.sleep(1000);
16             } catch (InterruptedException e) {
17                 e.printStackTrace();
18             }
19             list.get(i).click();
20         }
21         try{
22             //在这里捕获一下未找到菜单的异常,如果没找到这个菜单,则提示菜单无法找到
23             driver.findElement(By.xpath("//span[text()='" + menuText + "']/parent::div")).click();
24         }catch(NoSuchElementException e){
25             System.out.println("对不起,这个菜单无法找到: " + menuText);
26             e.printStackTrace();
27         }
28     }
29 }

上述代码完成了展开所有菜单,并跳转到相应菜单的操作

 1 public class ContrastData {
 2     WebDriver driver = null;
 3     List<WebElement> list = null;
 4     JavascriptExecutor jse=(JavascriptExecutor)driver;
 5     String term = "";
 6     
 7     ContrastData(WebDriver driver,String term){
 8         this.driver=driver;
 9         this.term= term;
10     }
11     
12     public void DataContrast(){
13         //这里通过调用JS的方式,将name为term的下拉条进行点击(这里不是select)
14         jse.executeScript("window.document.getElementsByName('"+term+"')[0].click()");
15         
16         try {
17             //设置等待时间,等待隐藏元素展示完整
18             Thread.sleep(2000);
19         } catch (InterruptedException e) {
20             e.printStackTrace();
21         }
22         //用XPATH匹配已展示的lable元素,当text为对应值时,进行单击选择
23          driver.findElement(By.xpath("//*[text()='审核成功']")).click();
24         /*
25          * 通过BYID方式,找到检索图片,并进行click
26          * 这里我要说明一下,这个并非button元素,所以不是submit
27          * 这个元素是动态加载,不能直接用byid方式,我在这里只是为了做而做,实际项目中不能用动态加载的ID来定位元素
28          */
29          driver.findElement(By.id("button-1108-btnIconEl")).click();
30             try {
31                 //设置等待时间,等待检索结果展示完整
32                 Thread.sleep(2000);
33             } catch (InterruptedException e) {
34                 e.printStackTrace();
35             }
36          //将显示出来的审核状态元素,全部放入list中
37         list = driver.findElements(By.cssSelector("div.x-grid-cell-inner"));
38         boolean test = true;
39         for(int i=0;i<list.size();i++){
40             
41             //遍历判断,如果有状态为非审核成功的,则测试不通过
42             if(!(list.get(i).equals("审核成功"))){
43                 test=false;
44             }
45         }
46         if(!test){
47             System.out.println("测试不通过");
48         }else{
49             System.out.println("测试通过");
50         }
51     }
52 }

上述代码已经完成了一个简单的case,可以看到  我们检查通过‘审核成功’状态检索的数据是否都是审核成功的,如果是则打印通过,否则打印不通过。

 

好了,这只是个玩具code,真实的自动化平台,对元素定位,用例执行,结果输出全部需要进行封装,而不是像这样写,非常难以维护。