慕课网(imooc)Selenium自动化学习笔记01:封装
来源:互联网 发布:鼠标连点软件 编辑:程序博客网 时间:2024/06/06 03:39
本课程全部以慕课网为实例。
以登陆的自动化脚本为例:
1. 初始化环境变量;
2. 构建登陆脚本:
定位元素,通常为:
定位方法为By.name,name的值为“email”
WebElement user = driver.findElement(By.name("email"));
同理,登陆按钮的定位为:
定位方式为By.className,值为“btn-red btn-full xa-login”,可只取btn-red
WebElement loginButton = driver.findElement(By.className("btn-red"));
但是,每一个元素的定位都是固定的格式,但定位方法却不一样,假设某天网页代码变化了,以前是By.name能定位到,现在换成了class,那么就要改变代码了。
所以,就要用到java的封装思想:
我们把value统一定义好,定位方式统一定义为一个方法,如下:
public By byStr (String by,String local){ if(by.equals("id")){ return By.id(local); }else if(by.equals("name")){ return By.name(local); }else if(by.equals("className")){ return By.className(local); }else{ return By.xpath(local); } }
定义byStr方法,传入”定位方式“和”位置值“,那么就可以进行匹配判断。
封装后如下:
String userBy = "name";String emailElement = "email";WebElement user = driver.findElement(this.byStr(userBy, emailElement));
同样,每一个元素的定位时,均会用到driver.findElement(…..),也可以对其进行封装:
定义一个元素的方法element(),参数只有一个By(方式,如By.id),即element(By by),
public WebElement element(By by){ WebElement ele = driver.findElement(by); return ele; }
结果代买整理如下:
WebElement user = this.element(this.byStr(userBy, emailElement));
整体看起来,代码的可读性就大大提升了。完整代码如下:
package musi.selenium;import java.io.File;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.openqa.selenium.firefox.FirefoxProfile;import org.openqa.selenium.interactions.Actions;public class Login { private static String baseUrl; private static String path = "C:\\Users\\couey\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\6vo0xq9s.default"; static FirefoxProfile profile = new FirefoxProfile(new File(path)); static WebDriver driver = new FirefoxDriver(profile); public void InitDriver(){ baseUrl = "http://www.imooc.com/"; driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); driver.get(baseUrl); driver.manage().window().maximize(); driver.findElement(By.id("js-signin-btn")).click(); } public void loginScript(){ this.InitDriver(); String username = "co****in@163.com"; String userpass = "*********"; String emailElement = "email"; String passwordElement = "password"; String buttonElement = "btn-red"; String headerElement = "header-avator"; //对调用方法By进行赋值 String nameElement = "name"; String userBy = "name"; String passwordBy = "name"; String buttonBy = "className"; String userInfoBy = "className"; String headerBy = "id"; try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }// WebElement user = driver.findElement(By.name(emailElement));// WebElement password = driver.findElement(By.name(passwordElement));// WebElement loginButton = driver.findElement(By.className(buttonElement));// WebElement header = driver.findElement(By.id(headerElement));// String userInfo = driver.findElement(By.className(nameElement)).getText(); //对By的方法进行调用。 WebElement user = this.element(this.byStr(userBy, emailElement)); user.isDisplayed(); WebElement password = this.element(this.byStr(passwordBy, passwordElement)); password.isDisplayed(); WebElement loginButton = this.element(this.byStr(buttonBy, buttonElement)); loginButton.isDisplayed(); user.sendKeys(username); password.sendKeys(userpass); loginButton.click(); try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } WebElement header = this.element(this.byStr(headerBy, headerElement)); header.isDisplayed(); //鼠标事件:鼠标移动到头像(要点击的部位),然后定位到元素,然后提交(perform()) Actions actions = new Actions(driver); actions.moveToElement(header).perform(); String userInfo = this.element(this.byStr(userInfoBy,nameElement)).getText(); if(userInfo.equals("SuperBadBoy")){ System.out.println(userInfo + ":" + "Successful"); }else{ System.out.println("Failed,Please check your infomation"); } } /** * * 封装By * * @param String by,String local * * @author couey * @date 2017年8月14日 下午3:53:09 */ public By byStr (String by,String local){ if(by.equals("id")){ return By.id(local); }else if(by.equals("name")){ return By.name(local); }else if(by.equals("className")){ return By.className(local); }else{ return By.xpath(local); } } /** * * 封装Element * * @param By by * * @author couey * @date 2017年8月14日 下午4:33:39 */ public WebElement element(By by){ WebElement ele = driver.findElement(by); return ele; } public static void main( String[] args ) { Login login = new Login(); login.loginScript(); }}
以上代码,还可以再进一步封装,待续!
关于浏览器初始化相关内容,可彻底解决selenium启动firefox时总弹框的问题
阅读全文
0 0
- 慕课网(imooc)Selenium自动化学习笔记01:封装
- 慕课网(imooc)Selenium自动化学习笔记02:读取配置文件及简单参数化
- 慕课网(imooc)Selenium自动化学习笔记03:遍历打印课程列表及获取下一页报错处理
- 《C++ 封装篇(上) imooc》笔记
- 《C++ 封装篇(下) imooc》笔记
- 【IMOOC】自动化测试之selenium工具使用
- imooc学习笔记--五子棋
- JavaScript学习笔记(imooc)
- 自动化测试基础-selenium学习笔记
- Selenium自动化测试学习笔记--xpath表达式
- python+selenium自动化测试学习笔记一
- 基于《Selenium 2自动化测试实战》的学习笔记(3)—— selenium 工具介绍
- 【selenium学习笔记】selenium自动化测试环境安装
- AnjularJS-imooc学习笔记1
- python+selenium自动化测试封装
- selenium自动化-java-封装断言
- Selenium自动化测试笔记(1)
- selenium自动化测试笔记(2)
- progeCAD 正版购买 中国 官方授权 代理商 经销商 网络版 专业版 公司授权
- 卓有成效的管理者(笔记)——要事优先
- OGG配置文件——MANAGER
- 错误记录-数据库、SQL,Mybatis的XML
- PHP版本VC6与VC9、Thread Safe与None-Thread Safe等的区别
- 慕课网(imooc)Selenium自动化学习笔记01:封装
- iOS-AutoLayout还不会,你就累到死
- HTTP协议状态码详解(HTTP Status Code)
- ubuntu15 搭建LAMP开发环境图解教程
- 数据库时间的各种处理方法
- VC++实现Vista和Win7系统低权限程序向高权限程序发消息
- H5笔记(一)
- hadoop 基本搭建
- PHP 数组排序