selenium实现web自动化登录模块+封装
来源:互联网 发布:5g网络的频率 编辑:程序博客网 时间:2024/06/05 00:58
效果图就是慕课网登录的一个全过程
运行条件:
1.maven工程2.testNg3.properties配置文件
pom.xml截图:
properties配置文件:
userName=name>emailloginButton=id>js-signin-btnuserPass=name>passwordbuttonElement=className>btn-redheader=id>header-avatornameInfo=className>nameautoSigin=id>auto-signin
项目目录:
base包下的DriverBase与SelectDriver类
SelectDriver类:
package com.selenium.wushuaiTest.base;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.firefox.FirefoxDriver;//选择浏览器类型的类public class SelectDriver { public WebDriver driverName(String browser) { //equalsIgnoreCase代表不区分大小写 //判断浏览器的类型是"firefox"或者"chrome"又或者是"IE" if(browser.equalsIgnoreCase("fireFox")) { System.setProperty("webdriver.firefox.marionette", "D:\\\\java\\\\geckodriver\\\\geckodriver.exe"); return new FirefoxDriver(); }else{ System.setProperty("webdriver.chrome.driver","D:\\\\java\\\\chromedriver-32\\\\chromedriver.exe"); return new ChromeDriver(); } }}
SelectDriver作用:
判断并且选择自动化运行的浏览器类型
DriverBase类
package com.selenium.wushuaiTest.base;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import com.selenium.wushuaiTest.page.LoginPage;//浏览器的基类public class DriverBase { public WebDriver driver; //构造方法 public DriverBase(String browser) { //初始化浏览器选择类 SelectDriver selectDriver=new SelectDriver(); //把确定之后的浏览器实例赋值给当前的Webdriver this.driver=selectDriver.driverName(browser); } /* * 获取driver * */ public WebDriver getDriver() { return driver; } //关闭浏览器驱动方法 public void stopDriver() { System.out.println("Stop Driver!"); driver.close(); } /* * 封装Element方法 * * */ public WebElement findElement(By by) { WebElement element=driver.findElement(by); return element; } /* * get封装 * */ public void get(String url) { driver.get(url); }}
DriverBase类作用:
1.确定当前的浏览器类型2.封装浏览器的关闭,查找元素,跳转页面等功能3.实例化SelectDriver类,并且传入浏览器驱动类型
util包下的GetByLocator与ProUtil类
GetByLocator类:
package com.selenium.wushuaiTest.util;import org.openqa.selenium.By;public class GetByLocator { public static By getLocator(String key) { ProUtil proUtil=new ProUtil("element.properties"); String locator=proUtil.getPro(key); String locatorType=locator.split(">")[0]; String locatorValue=locator.split(">")[1]; if(locatorType.equals("id")) { return By.id(locatorValue); }else if(locatorType.equals("name")) { return By.name(locatorValue); }else if(locatorType.equals("className")) { return By.className(locatorValue); }else { return By.xpath(locatorValue); } }}
GetByLocator类作用:
1.确定properties配置文件,并且识别并读取配置文件的信息2.根据配置文件的信息返回特定的By类型,By.id或name,xpath等
ProUtil类
package com.selenium.wushuaiTest.util;import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class ProUtil { private Properties prop; private String filePath; /* * 构造方法 * */ //初始化new ProUtil是从外部传回一个properties文件的路径 public ProUtil(String filePath) { //外部文件路径赋值给当前类的文件路径 this.filePath=filePath; this.prop=readProperties(); } /* * 读取配置文件 * * */ private Properties readProperties(){ //创建一个Properties Properties properties=new Properties(); try { //使用文件读取并且使用properties文件进行加载出来 InputStream inputStream=new FileInputStream(filePath); BufferedInputStream bis=new BufferedInputStream(inputStream); properties.load(bis); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return properties; } /* * 封装配置文件中的getProperty方法 * */ public String getPro(String key){ //判断properties文件中是否包含key信息 if(prop.containsKey(key)) { String username=prop.getProperty(key); return username; }else{ System.out.println("你获取的值不存在"); return ""; } }}
ProUtil类作用:
1.确定并读取配置文件2.封装getProperty方法
page包下的BasePage与LoginPage类:
BasePage类:
package com.selenium.wushuaiTest.page;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import com.selenium.wushuaiTest.base.DriverBase;//基本页面的类public class BasePage { public DriverBase driverBase; //构造方法 public BasePage(DriverBase driverBase) { //把初始化传入的DriverBase赋值给当前BasePage类的DriverBase的变量 this.driverBase=driverBase; } /* * 定位Element * * @param By by * * */ public WebElement element(By by) { WebElement ele=driverBase.findElement(by); return ele; } /* * 封装click(点击)方法 * 需要传入一个WebElement类型的元素 * * */ public void click(WebElement element) { if(element!=null) { element.click(); }else { System.out.println("元素未定位到,定位失败"); } } /* * 封装输入方法 * * */ public void sendKeys(WebElement element,String value) { if(element!=null) { element.sendKeys(value); }else { System.out.println(element+"元素没有定位到,输入失败"+value); } } /* * 判断元素是否显示方法 * * */ public boolean assertElementIs(WebElement element) { return element.isDisplayed(); }}
BasePage类作用:
1.充当测试类的基类,比如登录,购物车等功能,参数是一个DriverBase类对象2.封装浏览器驱动的查找,点击,输入,是否显示等方法
LoginPage类:–继承BasePage类
package com.selenium.wushuaiTest.page;import org.openqa.selenium.WebElement;import com.selenium.wushuaiTest.base.DriverBase;import com.selenium.wushuaiTest.util.GetByLocator;public class LoginPage extends BasePage{ public LoginPage(DriverBase driverBase) { super(driverBase); // TODO Auto-generated constructor stub } /* * 获取用户名输入框Element * * */ public WebElement getUserElement() { //找到properties中的userName变量 return element(GetByLocator.getLocator("userName")); } /* * 获取密码输入框Element * * */ public WebElement getPasswordElement() { return element(GetByLocator.getLocator("userPass")); } /* * 获取登录按钮输入框 * * */ public WebElement getLoginButtonElement() { return element(GetByLocator.getLocator("buttonElement")); } /* * 获取自动登录Element * * */ public WebElement getAutoLoginElement() { return element(GetByLocator.getLocator("autoSigin")); }}
LoginPage类作用:
1.得到properties类中的变量,并且根据变量得到相应的值,拿到该元素,如:用户名输入框,密码输入框,自动登录,登录等按钮
handle包下的LoginPageHandle类:
LoginPageHandle类:
package com.selenium.wushuaiTest.handle;import com.selenium.wushuaiTest.base.DriverBase;import com.selenium.wushuaiTest.page.LoginPage;public class LoginPageHandle { public DriverBase driverBase; //由于是操作的登录,所以要实例化LoginPage public LoginPage loginPage; public LoginPageHandle(DriverBase driverBase) { this.driverBase=driverBase; loginPage=new LoginPage(driverBase); } /* * 输入用户名 * */ public void sendKeysUserName(String userName) { loginPage.sendKeys(loginPage.getUserElement(), userName); } /* * 输入密码 * */ public void sendKeysPassword(String password) { loginPage.sendKeys(loginPage.getPasswordElement(),password); } /* * 点击登录 * * */ public void clickLoginButton() { loginPage.click(loginPage.getLoginButtonElement()); } /* * 点击自动登录 * * */ public void clickAutoSigin() { loginPage.click(loginPage.getAutoLoginElement()); } /* * 判断是否是登录页面 * 判断标准:只要能够识别登录页面的一个输入框即可,这里使用用户名来识别 * * */ public boolean assertLoginPage() { return loginPage.assertElementIs(loginPage.getUserElement()); }}
LoginPageHandle类作用:
1.操作LoginPage中得到的元素,比如:用户名输入框,密码输入框,登录,自动登录等控件元素2.参数是DriverBase,并且构造方法实例化了LoginPage类
business包下的LoginPro类:
LoginPro类:
package com.selenium.wushuaiTest.business;import com.selenium.wushuaiTest.base.DriverBase;import com.selenium.wushuaiTest.handle.LoginPageHandle;public class LoginPro { public LoginPageHandle loginPageHandle; public LoginPro(DriverBase driverBase) { loginPageHandle=new LoginPageHandle(driverBase); } public void login(String userName,String password) { //如果能够识别用户名输入框,那么就代表登录页面存在,就可以进行输入用户名,密码等操作 if(loginPageHandle.assertLoginPage()) { //输入用户名 loginPageHandle.sendKeysUserName(userName); //输入密码 loginPageHandle.sendKeysPassword(password); //点击自动登录 loginPageHandle.clickAutoSigin(); //点击登录 loginPageHandle.clickLoginButton(); }else { System.out.println("页面不存在或者状态不正确"); } }}
LoginPro类作用:
1.进行逻辑判断,比如这里识别的是如果能够识别用户名输入框,那么就代表登录页面存在,就可以进行输入用户名,密码等操作2.构造方法参数是DriverBase,并且实例化LoginPageHandle类
testCase包下的CaseBase与Login类:
CaseBase类:
package com.selenium.wushuaiTest.testCase;//初始化浏览器import com.selenium.wushuaiTest.base.DriverBase;public class CaseBase { public DriverBase InitDriverBase(String browser) { return new DriverBase(browser); }}
CaseBase类作用:
1.初始化DriverBase类2.内部定义一个InitDriverBase方法,返回类型为DriverBase类型,参数类型是浏览器驱动名称
Login类:
package com.selenium.wushuaiTest.testCase;import org.openqa.selenium.By;import org.testng.annotations.Test;import com.selenium.wushuaiTest.base.DriverBase;import com.selenium.wushuaiTest.business.LoginPro;public class Login extends CaseBase{ public DriverBase driverBase; public LoginPro loginPro; //构造方法 public Login() { //确定运行脚本的为chrome浏览器,并且赋值给当前类的DriverBase this.driverBase=InitDriverBase("chrome"); loginPro=new LoginPro(driverBase); } @Test public void getLoginHome() { driverBase.get("http://www.imooc.com"); driverBase.getDriver().manage().window().maximize(); driverBase.findElement(By.id("js-signin-btn")).click(); try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test(dependsOnMethods={"getLoginHome"}) public void testLogin() { loginPro.login("m13031155057@163.com", "1111"); }}
Login类作用:
1.构造方法中确定DriverBase的类型为chrome,并且把它赋值给了实例化的LoginPro类2.testLogin方法依赖getLoginHome方法运行
综上已经大致分析完毕
总结:
1.我们浏览器的类型一直是呈现一个层级传递的过程:LoginPage-LoginPageHandle-LoginPro-Login-InitDriverBase就是我们的LoginPage类先向LoginPageHandle索要DriverBase的浏览器驱动,然而LoginPageHandle并没有,所以LoginPageHandle向LoginPro索要,之后LoginPro又向Login索要,而Login调用父类的InitDriverBase并且传入"浏览器名称"才最终确定浏览器驱动的类型,之后InitDriverBase又先传给Login-LoginPro-LoginPageHandle-LoginPage,最终LoginPage拿到了DriverBase的驱动类型是Chrome
阅读全文
0 0
- selenium实现web自动化登录模块+封装
- RobotFramework+Selenium实现web自动化
- selenium实现登录页面的自动化测试
- selenium自动化测试(公用模块的封装)
- PyCharm安装selenium模块实现selenium自动化测试
- selenium 自动化web测试
- selenium自动化测试web
- Selenium Web 自动化
- Selenium Web 自动化框架
- Selenium Web 自动化
- python+selenium自动化测试封装
- selenium自动化-java-封装断言
- python 自动化模块selenium + pyauotogui 模块结合实现有flash显示自动化运维
- 使用 Selenium 实现基于 Web 的自动化测试
- 使用 Selenium 实现基于 Web 的自动化测试
- 使用 Selenium 实现基于 Web 的自动化测试
- 使用 Selenium 实现基于 Web 的自动化测试
- 使用 Selenium 实现基于 Web 的自动化测试
- 大学生职业规划
- 作业 十一
- exlcs
- LeetCode72 Edit Distance
- 路在何方,路在脚下
- selenium实现web自动化登录模块+封装
- 移动架构16_模板模式
- 总结UML中的五个关系
- 华为存储企业容灾学习笔记
- Ubuntu 14.04 安装 Docker
- 现代处理器的结构和特点
- [四校联训]骑行川藏-二分
- linux(Centos6.8)下编译安装Nodejs遇到的坑和解决办法
- OSI参考模型中各个分层的作用