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
原创粉丝点击