selenium实现web自动化登录模块+封装

效果图就是慕课网登录的一个全过程

运行条件:

1.maven工程
2.testNg
3.properties配置文件

pom.xml截图:

这里写图片描述

properties配置文件:

这里写图片描述

userName=name>email
loginButton=id>js-signin-btn
userPass=name>password
buttonElement=className>btn-red
header=id>header-avator
nameInfo=className>name
autoSigin=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
  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 可以参考以下步骤:1. 安装Selenium库:使用命令“pip install selenium”安装Selenium库。2. 导入Selenium:使用Python代码“from selenium import webdriver”导入Selenium模块。3. 创建WebDriver:使用命令“driver = webdriver.Chrome()”创建一个WebDriver对象。4. 打开登录页面:使用命令“driver.get(url)”打开登录页面。5. 填写表单:使用命令“driver.find_element_by_name('username').send_keys('username')”填写登录表单。6. 提交表单:使用命令“driver.find_element_by_name('submit').click()”提交登录表单。7. 登录成功:登录成功后,WebDriver对象会跳转到登录后的页面。 ### 回答2: 下面是使用Python封装webUI自动化登录功能的示例代码: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class WebUILogin: def __init__(self, url, username, password): self.url = url self.username = username self.password = password self.driver = webdriver.Chrome() # 使用Chrome浏览器,需要提前安装Webdriver def login(self): self.driver.get(self.url) WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "username"))) # 等待用户名输入框出现 username_input = self.driver.find_element(By.ID, "username") password_input = self.driver.find_element(By.ID, "password") login_button = self.driver.find_element(By.ID, "login-btn") username_input.send_keys(self.username) password_input.send_keys(self.password) login_button.click() def close(self): self.driver.quit() # 使用示例 url = "http://example.com/login" # 替换为你的登录页面的URL username = "your_username" # 替换为你的用户名 password = "your_password" # 替换为你的密码 web_ui_login = WebUILogin(url, username, password) web_ui_login.login() # 执行其他需要登录后才能操作的代码 web_ui_login.close() ``` 这个示例演示了使用selenium实现webUI自动化登录的功能。首先创建一个`WebUILogin`类,类的构造函数接收登录URL、用户名和密码,创建一个Chrome浏览器的实例。`login`方法会打开登录页面,等待用户名输入框出现,然后将用户名和密码输入相应的输入框,并点击登录按钮完成登录操作。`close`方法用于关闭浏览器。 你需要将示例代码中的URL、用户名和密码替换为你的登录信息,并根据自己的需求进行修改和扩展。 ### 回答3: 下面是用Python封装Web UI自动化登录功能的代码: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys def login(username, password): # 创建浏览器驱动对象 driver = webdriver.Chrome() # 打开登录页面 driver.get("https://example.com/login") # 找到用户名和密码的输入框,并输入相应的值 username_field = driver.find_element_by_name("username") username_field.send_keys(username) password_field = driver.find_element_by_name("password") password_field.send_keys(password) # 模拟键盘的回车键,实现提交表单 password_field.send_keys(Keys.RETURN) # 自动登录后的下一步操作... # 关闭浏览器驱动 driver.quit() ``` 以上代码使用了Selenium库,通过`webdriver.Chrome()`创建了一个浏览器驱动对象。然后使用`driver.get()`打开登录页面。接着,通过`driver.find_element_by_name()`找到用户名和密码的输入框,并使用`send_keys()`方法输入相应的值。最后,使用`send_keys(Keys.RETURN)`模拟键盘的回车键,实现提交表单。 你可以调用`login()`函数,并传入用户名和密码作为参数,如`login("username", "password")`,来自动完成登录操作。登录成功后,你可以在函数中添加相应的下一步操作。最后,调用`driver.quit()`关闭浏览器驱动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值