一、测试登录功能实现
以慕课网的登录为例,分析登录的功能需求,编写测试用例,找到要定位的元素以及需要的操作,编写登录功能的测试代码。代码实现如下:
1 public static void main(String[] args) throws InterruptedException {
2 System.setProperty("webdriver.gecko.driver","c:\\Program Files\\Mozilla Firefox\\geckodriver.exe");
3 WebDriver driver=new FirefoxDriver();
4 driver.get("https://www.imooc.com");
5 driver.manage().window().setSize(new Dimension(1456,876));//设置窗口的尺寸
6 driver.findElement(By.id("js-signin-btn")).click();//点击登录按钮
7 Thread.sleep(2000);
10 driver.findElement(By.name("email")).sendKeys("*********");
12 driver.findElement(By.name("password")).sendKeys("******");
13
14 driver.findElement(By.cssSelector(".moco-btn")).click();
15 Thread.sleep(2000);
16
17 Actions a=new Actions(driver);//鼠标移动,perform()执行所有Actions中存储的行为,可以理解成对整个操作事件的提交动作。
18 a.moveToElement(driver.findElement(By.cssSelector("#header-avator>img"))).perform();
19
20 String s=driver.findElement(By.className("name")).getText();//获取标签属性
21 String t=driver.getTitle();
22 String v=driver.getCurrentUrl();
23 System.out.println(s+t+v);
24 assertEquals(s,"搁浅的青木"); //验证失败时该测试将停止。vertify:失败时,该测试将继续执行,并将错误记入日显示屏。Waitfor用于等待某些条件变为真。可用于AJAX应用程序的测试。
25 if(s.equals("搁浅的青木")) {
26 System.out.println("登陆成功,请退出");
27 driver.findElement(By.linkText("安全退出")).click();
28 }else {
29 System.out.println("登录失败");
30 }
31 driver.quit();
32 }
二、代码重构之封装findElement()方法
1.提取参数,包括:输入信息、定位属性、定位属性值
2.封装findElement()方法
1 public class moocloginOne {
2 public WebDriver driver;
3 public void initDriver() throws InterruptedException {
4 System.setProperty("webdriver.gecko.driver","c:\\Program Files\\Mozilla Firefox\\geckodriver.exe");
5 driver=new FirefoxDriver();
6 driver.get("https://www.imooc.com");
7 driver.manage().window().setSize(new Dimension(1456,876));//设置窗口的尺寸
8 Thread.sleep(3000);
9
10 driver.findElement(By.id("js-signin-btn")).click();
11 }
12
13 public void loginScript() throws InterruptedException {
14 this.initDriver();
15 Thread.sleep(3000);
16 //1.提取定位参数,提高代码可用性
17 String userBy="name";
18 String userLocal="email";
19 String passowrdBy="name";
20 String PasswordLocal="password";
21 String loginbtnBy="cssSelector";
22 String loginbtnLocal=".moco-btn";
23 String userInfo="17839196010";
24 String passwordInfo="duhui619";
25 String userImgBy="cssSelector";
26 String userImgLocal="#header-avator>img";
27 String usernameBy="className";
28 String usernameLocal="name";
29 String usernameInfo="搁浅的青木";
30 WebElement user=element(userBy,userLocal);
31 user.isDisplayed();
32 WebElement password=element(passowrdBy,PasswordLocal);
33 password.isDisplayed();
34 WebElement button=element(loginbtnBy,loginbtnLocal);
35 button.isDisplayed();
36 user.sendKeys(userInfo);
37 password.sendKeys(passwordInfo);
38 button.click();
39 Thread.sleep(2000);
40 WebElement header=element(userImgBy,userImgLocal);
41 header.isDisplayed();
42 Actions a=new Actions(driver);
43 a.moveToElement(header).perform();
44 String s=element(usernameBy,usernameLocal).getText();
45 if(s.equals(usernameInfo)) {
46 System.out.println("登陆成功,请退出");
47 }else {
48 System.out.println("登录失败");
49 }
50 driver.quit();
51 }
52
53 //2.封装driver.findElement( By.id(local))
54 public WebElement element(String by,String local) {
55 WebElement element=null;
56 if(by.equals("id")) {
57 element=driver.findElement( By.id(local));
58 }else if(by.equals("name")) {
59 element=driver.findElement( By.name(local));
60 }else if(by.equals("className")) {
61 element=driver.findElement( By.className(local));
62 }else if(by.equals("linkText")) {
63 element=driver.findElement( By.linkText(local));
64 }else if(by.equals("xpath")) {
65 element=driver.findElement( By.xpath(local));
66 }else if(by.equals("cssSelector")) {
67 element=driver.findElement( By.cssSelector(local));
68 }else if(by.equals("tageName")){
69 element=driver.findElement( By.tagName(local));
70 }else {
71 element=driver.findElement( By.partialLinkText(local));
72 }
73 return element;
74 }
75
76 public static void main(String[] args) throws InterruptedException {
77 moocloginOne login=new moocloginOne();
78 Thread.sleep(2000);
79 login.loginScript();
80 }
三、代码重构之封装读取配置文件的方法
1.拆分findElement方法为by方法和element方法
2.修改byStr函数中的代码,只返回by的方式 。
3.将变量放到配置文件中,并编写读取文件类及方法-----ProUtil类。
4.编写读取配置文件函数-----调用ProUtil类,读取配置文件。
5.在byStr函数中调用读取文件函数--getproperties(),并修改byStr传入参数。
主函数:
1 public class moocloginTwo {
2 public WebDriver driver;
3 public void initDriver() throws InterruptedException {
4 System.setProperty("webdriver.gecko.driver","c:\\Program Files\\Mozilla Firefox\\geckodriver.exe");
5 driver=new FirefoxDriver();
6 driver.get(this.getproperties("Url"));
7 driver.manage().window().setSize(new Dimension(1456,876));//设置窗口的尺寸
8 Thread.sleep(3000);
9 element(this.byStr("closeLocal")).click();
10 element(this.byStr("loginLocal")).click();
11 }
12
13 public void loginScript() throws InterruptedException {
14 this.initDriver();
15 Thread.sleep(3000);
16 //3.将变量放到配置文件中,并编写读取文件类及方法-----ProUtil类
17 WebElement user=this.element(this.byStr("userLocal"));
18 user.isDisplayed();
19
20 WebElement password=this.element(this.byStr("PasswordLocal"));
21 password.isDisplayed();
22
23 WebElement button=this.element(this.byStr("loginbtnLocal"));
24 button.isDisplayed();
25 user.sendKeys(this.getproperties("userInfo"));
26 password.sendKeys(this.getproperties("passwordInfo"));
27 button.click();
28 Thread.sleep(3000);
29
30 WebElement header=this.element(this.byStr("userImgLocal"));
31 header.isDisplayed();
32 Actions a=new Actions(driver);
33 a.moveToElement(header).perform();
34 Thread.sleep(3000);
35
36 String s=this.element(this.byStr("usernameLocal")).getText();//获取标签属性
37 System.out.println(s);
38
39 if(s.equals(this.getproperties("usernameInfo"))) {
40 System.out.println("登陆成功,请退出");
41 this.element(this.byStr("logOut")).click();
42 }else {
43 System.out.println("登录失败");
44 }
45 //driver.quit();
46 }
47
48 public By byStr(String local) {
49 //5.在byStr函数中调用读取文件函数--getproperties(),并修改byStr传入参数
50 String locator=this.getproperties(local);
51 String locatorType=locator.split(">")[0];
52 String locatorValue=locator.split(">")[1];
53 //2.修改byStr函数中的代码,只返回by的方式
54 if(locatorType.equals("id")) {
55 return By.id(locatorValue);
56 }else if(locatorType.equals("name")) {
57 return By.name(locatorValue);
58 }else if(locatorType.equals("className")) {
59 return By.className(locatorValue);
60 }else if(locatorType.equals("linkText")) {
61 return By.linkText(locatorValue);
62 }else if(locatorType.equals("xpath")) {
63 return By.xpath(locatorValue);
64 }else if(locatorType.equals("cssSelector")) {
65 return By.cssSelector(locatorValue);
66 }else if(locatorType.equals("tageName")){
67 return By.tagName(locatorValue);
68 }else {
69 return By.partialLinkText(locatorValue);
70 }
71
72 }
73 //1.封装 driver.findElenment(),编写element函数————将byStr函数中的 driver.findElenment()与by.方式()拆开
74 public WebElement element(By location) {
75 return driver.findElement(location);
76 }
77 //4.编写读取配置文件函数-----调用ProUtil类,读取配置文件
78 public String getproperties(String local) {
79 ProUtil properties=new ProUtil("E:\\eclipse\\workspace\\mypro\\src\\mooc\\day01\\element.properties");
80 String locator=properties.getPro(local);
81 return locator;
82 }
83 public static void main(String[] args) throws InterruptedException {
84
85 moocloginTwo login=new moocloginTwo();
86 login.loginScript();
87 }
88 }
读取配置文件函数:
1 public class ProUtil {
2 private Properties properties;
3 private String filePath;
4 public ProUtil(String filePath) {
5 this.filePath=filePath;
6 this.properties=readProperties();
7 }
8
9 public Properties readProperties() {
10 Properties pro=new Properties();
11 try {
12 InputStreamReader inputstream=new InputStreamReader(new FileInputStream(filePath),"UTF-8" );//考虑到编码格式
13 BufferedReader in=new BufferedReader(inputstream);
14 pro.load(in);
15 } catch (IOException e) {
16 e.printStackTrace();
17 }
18 return pro;
19
20 }
21
22 public String getPro(String key) {
23
24 if(properties.containsKey(key)) {
25 String value=properties.getProperty(key);
26 return value;
27 }else {
28 System.out.println("获取的键值不对");
29 return " ";
30 }
31
32 }
33 }
配置文件:
1 #-----------登录页面元素部分:----------
2 #登录网址
3 Url=https://www.imooc.com
4 #登录连接的位置
5 loginLinkLocal=id>js-signin-btn
6 #输入登录账号
7 userLocal=name>email
8 #输入登录密码
9 PasswordLocal=name>password
10 #点击登录按钮
11 loginbtnLocal=cssSelector>.moco-btn
12 #个人头像
13 userImgLocal=cssSelector>#header-avator
14 #个人用户名
15 usernameLocal=className>name
16 #安全退出
17 logOut=linkText>安全退出
18 #--------登录参数部分:--------
19 #登录账号
20 userInfo=*********
21 #登录密码
22 passwordInfo=*******
23 #用于比对的用户名
24 usernameInfo=搁浅的青木