自动化测试项目(慕课网帐号登录测试实战)

您所在的位置:网站首页 慕课网vip账号共享怎么用啊 自动化测试项目(慕课网帐号登录测试实战)

自动化测试项目(慕课网帐号登录测试实战)

2024-07-12 16:23| 来源: 网络整理| 查看: 265

文章目录 脑图和代码流程图分享3-1 登陆功能需求分析及用例设计3-2 如何对登陆功能进行功能测试3-3 登陆自动化用例设计3-4 maven的使用3-5 开发自动化登陆脚本3-6 登陆脚本重构by封装3-7 登陆脚本重构element封装3-8 读取配置文件3-9 读取配置文件-重构封装3-10 登陆账号参数化代码实战3-11 testng简单使用3-12 登陆失败自动截图3-13 通过监听事件实现失败自动截图3-14 登陆代码分层设计3-15 driver以及基类的封装3-16 基类封装-BasePage3-17 登陆po设计模式代码实战-01-loginPage封装3-18 登陆po设计模式代码实战-02-loginPageHandle3-19 登陆po设计模式代码实战-03-loginPagePro3-20 登陆po设计模式代码实战-04-testLogin3-21 使用log4j手机日志3-22 生成html测试报告3-23 selenium框架面试技巧

脑图和代码流程图分享

所有流程的脑图

3-1 登陆功能需求分析及用例设计

在这里插入图片描述

在这里插入图片描述

3-2 如何对登陆功能进行功能测试

首先进行,冒烟测试,主要是测试系统的主流程是否可用。冒烟测试,是版本验证测试,主要确认新的版本是否存在致命性bug,功能可以正常运行,不会影响下一轮测试的进行,如果上述都符合那么这个版本就可以进行下一轮测试。个人理解冒烟测试最大的优点在于节约测试的时间成本,减少测试轮数。

引入知识点:回归测试,是软件维护阶段对软件修改后进行的测试,指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。

冒烟测试看有没有登陆

3-3 登陆自动化用例设计

在这里插入图片描述

3-4 maven的使用

maven仓库地址

使用教程

3-5 开发自动化登陆脚本

在这里插入图片描述 selenium三种方法isEnable()、isDisplayed()和isSelected()的区别

Actions对Element的一些操作解析

/** * @Auther: ljm * @Date: 2021/04/12/19:54 * @Description: */ import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.interactions.Actions; class Login { public WebDriver driver; public void InitDriver(){ driver =new ChromeDriver(); driver.get("http://www.imooc.com"); driver.manage().window().maximize(); } public void loginScript() throws InterruptedException { driver.findElement(By.id("js-signin-btn")).click(); Thread.sleep(2000); WebElement user = driver.findElement(By.name("email")); user.isDisplayed(); WebElement password = driver.findElement(By.name("password")); //检测有没有显示出来 password.isDisplayed(); WebElement loginButton =driver.findElement(By.className("moco-btn-red")); loginButton.isDisplayed(); user.sendKeys("13081866542"); password.sendKeys("a990325."); loginButton.click(); Thread.sleep(3000); WebElement header = driver.findElement(By.id("header-avator")); Actions actions = new Actions(driver); actions.moveToElement(header).perform(); String userInfo = driver.findElement(By.className("name")).getText(); // System.out.println(userInfo); if(userInfo.equals("a1390202831")){ System.out.println("登陆成功"); }else { System.out.println("登陆失败"); } Thread.sleep(2000); driver.quit(); } public static void main(String[] args) throws InterruptedException { Login login = new Login(); login.InitDriver(); login.loginScript(); } } 3-6 登陆脚本重构by封装 /** * @Auther: ljm * @Date: 2021/04/12/19:54 * @Description: */ import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.interactions.Actions; class Login { public WebDriver driver; public void InitDriver(){ driver =new ChromeDriver(); driver.get("http://www.imooc.com"); driver.manage().window().maximize(); driver.findElement(By.id("js-signin-btn")).click(); } public void loginScript() throws InterruptedException { this.InitDriver(); String username= "13081866542"; String emailElement = "email"; String userBy = "id"; String userByname = "name"; String passBy = "name"; String buttonBy = "className"; String userpass = "a990325."; String passwordElement = "password"; String buttonElemnet = "moco-btn-red"; String headerElement = "header-avator"; String nameElement = "name"; Thread.sleep(1000); WebElement user = driver.findElement(this.byStr(userByname,emailElement)); // WebElement user = driver.findElement(By.name("email")); user.isDisplayed(); WebElement password = driver.findElement(this.byStr(passBy,passwordElement)); //检测有没有显示出来 password.isDisplayed(); Thread.sleep(1000); WebElement loginButton =driver.findElement(this.byStr(buttonBy,buttonElemnet)); loginButton.isDisplayed(); user.sendKeys(username); password.sendKeys(userpass); loginButton.click(); Thread.sleep(3000); WebElement header = driver.findElement(By.id(headerElement)); Actions actions = new Actions(driver); actions.moveToElement(header).perform(); String userInfo = driver.findElement(By.className(nameElement)).getText(); // System.out.println(userInfo); if(userInfo.equals("a1390202831")){ System.out.println("登陆成功"); }else { System.out.println("登陆失败"); } Thread.sleep(2000); driver.quit(); } /** * @Param: [args] * @return: void * @Author: ljm * @Date: 2021/4/15 * @Description: 封装By by */ public static 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); } } public static void main(String[] args) throws InterruptedException { Login login = new Login(); login.loginScript(); } } 3-7 登陆脚本重构element封装 /** * @Auther: ljm * @Date: 2021/04/12/19:54 * @Description: */ import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.interactions.Actions; class Login { public WebDriver driver; public void InitDriver(){ driver =new ChromeDriver(); driver.get("http://www.imooc.com"); driver.manage().window().maximize(); driver.findElement(By.id("js-signin-btn")).click(); } public void loginScript() throws InterruptedException { this.InitDriver(); String username= "13081866542"; String emailElement = "email"; String userBy = "id"; String userByname = "name"; String passBy = "name"; String buttonBy = "className"; String userpass = "a990325."; String passwordElement = "password"; String buttonElemnet = "moco-btn-red"; String headerElement = "header-avator"; String nameElement = "name"; String headerBy = "id"; String nameInfo = "className"; Thread.sleep(2000); WebElement user = this.element(this.byStr(userByname,emailElement)); // WebElement user = driver.findElement(By.name("email")); user.isDisplayed(); WebElement password = this.element(this.byStr(passBy,passwordElement)); //检测有没有显示出来 password.isDisplayed(); Thread.sleep(1000); WebElement loginButton =this.element(this.byStr(buttonBy,buttonElemnet)); loginButton.isDisplayed(); user.sendKeys(username); password.sendKeys(userpass); loginButton.click(); Thread.sleep(3000); WebElement header = this.element(this.byStr(headerBy,headerElement)); Actions actions = new Actions(driver); actions.moveToElement(header).perform(); String userInfo = this.element(this.byStr(nameInfo,nameElement)).getText(); // System.out.println(userInfo); if(userInfo.equals("a1390202831")){ System.out.println("登陆成功"); }else { System.out.println("登陆失败"); } Thread.sleep(2000); driver.quit(); } /** * @Param: * @return: * @Author: ljm * @Date: * @Description: 封装Element * */ public WebElement element(By by){ WebElement ele = driver.findElement(by); return ele; } /** * @Param: [args] * @return: void * @Author: ljm * @Date: 2021/4/15 * @Description: 封装By by */ public static 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); } } public static void main(String[] args) throws InterruptedException { Login login = new Login(); login.loginScript(); } } 3-8 读取配置文件

proUtil.java

import java.io.*; import java.util.Properties; /** * @Auther: ljm * @Date: 2021/04/17/10:50 * @Description: */ public class proUtil { private Properties prop; private String filePaht; //构造方法 public proUtil(String filePaht) { this.filePaht = filePaht; this.prop = readProperties(); } /** * @Param: [key] * @return: java.lang.String * @Author: ljm * @Date: 2021/4/17 * @Description: 读取配置文件 */ private Properties readProperties(){ Properties properties = new Properties(); InputStream in = null; try { in = new BufferedInputStream(new FileInputStream(filePaht)); } catch (FileNotFoundException e) { e.printStackTrace(); } try { properties.load(in); } catch (IOException e) { e.printStackTrace(); }finally { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } return properties; } public String getPro(String key){ if(prop.containsKey(key)){ String username = prop.getProperty(key); return username; } else { System.out.println("返回错误"); return ""; } } // public static void main(String[] args) throws IOException { // proUtil pro = new proUtil(); // pro.getPro(""); // } }

Login.java

/** * @Auther: ljm * @Date: 2021/04/12/19:54 * @Description: */ import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.interactions.Actions; class Login { public WebDriver driver; public void InitDriver(){ driver =new ChromeDriver(); driver.get("http://www.imooc.com"); driver.manage().window().maximize(); driver.findElement(By.id("js-signin-btn")).click(); } public void loginScript() throws InterruptedException { this.InitDriver(); String username= "13081866542"; // String emailElement = "email"; // String userBy = "id"; String userByname = "name"; String passBy = "name"; String buttonBy = "className"; String userpass = "a990325."; String passwordElement = "password"; String buttonElemnet = "moco-btn-red"; String headerElement = "header-avator"; String nameElement = "name"; String headerBy = "id"; String nameInfo = "className"; proUtil properties = new proUtil("src/main/element.properties"); String locator = properties.getPro("username"); String locatorType = locator.split(">")[0]; String locatorvalue = locator.split(">")[1]; Thread.sleep(2000); WebElement user = this.element(this.byStr(locatorType,locatorvalue)); // WebElement user = driver.findElement(By.name("email")); user.isDisplayed(); WebElement password = this.element(this.byStr(passBy,passwordElement)); //检测有没有显示出来 password.isDisplayed(); Thread.sleep(1000); WebElement loginButton =this.element(this.byStr(buttonBy,buttonElemnet)); loginButton.isDisplayed(); user.sendKeys(username); password.sendKeys(userpass); loginButton.click(); Thread.sleep(3000); WebElement header = this.element(this.byStr(headerBy,headerElement)); Actions actions = new Actions(driver); actions.moveToElement(header).perform(); String userInfo = this.element(this.byStr(nameInfo,nameElement)).getText(); // System.out.println(userInfo); if(userInfo.equals("a1390202831")){ System.out.println("登陆成功"); }else { System.out.println("登陆失败"); } Thread.sleep(2000); driver.quit(); } /** * @Param: * @return: * @Author: ljm * @Date: * @Description: 封装Element * */ public WebElement element(By by){ WebElement ele = driver.findElement(by); return ele; } /** * @Param: [args] * @return: void * @Author: ljm * @Date: 2021/4/15 * @Description: 封装By by */ public static 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); } } public static void main(String[] args) throws InterruptedException { Login login = new Login(); login.loginScript(); } }

element.properties文件

username=name>email userpass=name>a990325.

在这里插入图片描述

3-9 读取配置文件-重构封装

login.java

/** * @Auther: ljm * @Date: 2021/04/12/19:54 * @Description: */ import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.interactions.Actions; class Login { public WebDriver driver; public void InitDriver(){ driver =new ChromeDriver(); driver.get("http://www.imooc.com"); driver.manage().window().maximize(); driver.findElement(By.id("js-signin-btn")).click(); } public void loginScript(String username,String userpass) throws InterruptedException { this.InitDriver(); // String username= "13081866542"; // String userpass = "a990325."; String emailElement = "email"; String userBy = "id"; // String userByname = "name"; // String passBy = "name"; // String buttonBy = "className"; // String passwordElement = "password"; // String buttonElemnet = "moco-btn-red"; // String headerElement = "header-avator"; // String nameElement = "name"; // String headerBy = "id"; // String nameInfo = "className"; Thread.sleep(3000); WebElement user = this.element(this.byStr("username")); // WebElement user = driver.findElement(By.name("email")); user.isDisplayed(); WebElement password = this.element(this.byStr("userpass")); //检测有没有显示出来 password.isDisplayed(); Thread.sleep(1000); WebElement loginButton =this.element(this.byStr("loginbutton")); loginButton.isDisplayed(); user.sendKeys(username); password.sendKeys(userpass); loginButton.click(); Thread.sleep(3000); WebElement header = this.element(this.byStr("header")); Actions actions = new Actions(driver); actions.moveToElement(header).perform(); String userInfo = this.element(this.byStr("nameInfo")).getText(); // System.out.println(userInfo); if(userInfo.equals("a1390202831")){ System.out.println("登陆成功"); }else { System.out.println("登陆失败"); } Thread.sleep(2000); driver.quit(); } /** * @Param: * @return: * @Author: ljm * @Date: * @Description: 封装Element * */ public WebElement element(By by){ WebElement ele = driver.findElement(by); return ele; } /** * @Param: [args] * @return: void * @Author: ljm * @Date: 2021/4/15 * @Description: 封装By by */ public static By byStr(String username){ proUtil properties = new proUtil("src/main/element.properties"); String locator = properties.getPro(username); 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); } } public static void main(String[] args) throws InterruptedException { Login login = new Login(); login.loginScript("13081866542","a990325."); } } 3-10 登陆账号参数化代码实战 /** * @Auther: ljm * @Date: 2021/04/12/19:54 * @Description: */ import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.interactions.Actions; import java.util.HashMap; import java.util.Iterator; import java.util.Map; class Login { public WebDriver driver; public void InitDriver(){ driver =new ChromeDriver(); driver.get("http://www.imooc.com"); driver.manage().window().maximize(); driver.findElement(By.id("js-signin-btn")).click(); } public void loginScript(String username,String userpass) throws InterruptedException { this.InitDriver(); // String username= "13081866542"; // String userpass = "a990325."; String emailElement = "email"; String userBy = "id"; // String userByname = "name"; // String passBy = "name"; // String buttonBy = "className"; // String passwordElement = "password"; // String buttonElemnet = "moco-btn-red"; // String headerElement = "header-avator"; // String nameElement = "name"; // String headerBy = "id"; // String nameInfo = "className"; Thread.sleep(3000); WebElement user = this.element(this.byStr("username")); // WebElement user = driver.findElement(By.name("email")); user.isDisplayed(); WebElement password = this.element(this.byStr("userpass")); //检测有没有显示出来 password.isDisplayed(); Thread.sleep(1000); WebElement loginButton =this.element(this.byStr("loginbutton")); loginButton.isDisplayed(); user.sendKeys(username); password.sendKeys(userpass); loginButton.click(); Thread.sleep(3000); WebElement header = this.element(this.byStr("header")); Actions actions = new Actions(driver); actions.moveToElement(header).perform(); String userInfo = this.element(this.byStr("nameInfo")).getText(); // System.out.println(userInfo); if(userInfo.equals("a1390202831")){ System.out.println("登陆成功"); }else { System.out.println("登陆失败"); } Thread.sleep(2000); driver.close(); } /** * @Param: * @return: * @Author: ljm * @Date: * @Description: 封装Element * */ public WebElement element(By by){ WebElement ele = driver.findElement(by); return ele; } /** * @Param: [args] * @return: void * @Author: ljm * @Date: 2021/4/15 * @Description: 封装By by */ public static By byStr(String username){ proUtil properties = new proUtil("src/main/element.properties"); String locator = properties.getPro(username); 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); } } public static void main(String[] args) throws InterruptedException { Login login = new Login(); //login.loginScript("13081866542","a990325."); /** * @Param: [args] * @return: void * @Author: ljm * @Date: 2021/4/17 * @Description: key-value * username-password */ HashMap user = new HashMap(); user.put("13081866542","a990325."); user.put("[email protected]","a990325."); Iterator us= user.entrySet().iterator(); for(String key: user.keySet()){ String username = key; String password = user.get(key); System.out.println("账号是:"+username+"密码是:"+password); login.loginScript(username,password); } // Iterator us= user.entrySet().iterator(); // while(us.hasNext()){ // Map.Entry entry = (Map.Entry)us.next(); // String username = entry.getKey().toString(); // String password = entry.getValue().toString(); System.out.println(username+"密码:"+password); // login.loginScript(username,password); // } } } 3-11 testng简单使用 3-12 登陆失败自动截图 /** * @Auther: ljm * @Date: 2021/04/12/19:54 * @Description: */ import main.java.proUtil; import org.apache.commons.io.FileUtils; import org.openqa.selenium.*; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.interactions.Actions; import java.io.File; import java.io.IOException; import java.util.HashMap; class Login { public WebDriver driver; public void InitDriver(){ driver =new ChromeDriver(); driver.get("http://www.imooc.com"); driver.manage().window().maximize(); driver.findElement(By.id("js-signin-btn")).click(); } public void loginScript(String username,String userpass) throws InterruptedException { this.InitDriver(); // String username= "13081866542"; // String userpass = "a990325."; String emailElement = "email"; String userBy = "id"; // String userByname = "name"; // String passBy = "name"; // String buttonBy = "className"; // String passwordElement = "password"; // String buttonElemnet = "moco-btn-red"; // String headerElement = "header-avator"; // String nameElement = "name"; // String headerBy = "id"; // String nameInfo = "className"; Thread.sleep(5000); WebElement user = this.element(this.byStr("username")); // WebElement user = driver.findElement(By.name("email")); user.isDisplayed(); WebElement password = this.element(this.byStr("userpass")); //检测有没有显示出来 password.isDisplayed(); Thread.sleep(1000); WebElement loginButton =this.element(this.byStr("loginbutton")); loginButton.isDisplayed(); user.sendKeys(username); password.sendKeys(userpass); loginButton.click(); Thread.sleep(3000); WebElement header = this.element(this.byStr("header")); Actions actions = new Actions(driver); actions.moveToElement(header).perform(); String userInfo = this.element(this.byStr("nameInfo")).getText(); // System.out.println(userInfo); if(userInfo.equals("a1390202831")){ this.takescreenshot(); System.out.println("登陆成功"); }else { System.out.println("登陆失败"); } Thread.sleep(2000); driver.close(); } /** * @Param: * @return: * @Author: ljm * @Date: * @Description: 封装Element * */ public WebElement element(By by){ WebElement ele = driver.findElement(by); return ele; } /** * @Param: [args] * @return: void * @Author: ljm * @Date: 2021/4/15 * @Description: 封装By by */ public static By byStr(String username){ proUtil properties = new proUtil("src/main/element.properties"); String locator = properties.getPro(username); 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); } } /** * @Param: [args] * @return: void * @Author: ljm * @Date: 2021/4/17 * @Description: 截图 * */ public void takescreenshot(){ long date = System.currentTimeMillis(); //将时间转为Sting类型 String path = String.valueOf(date); //获取系统当前路径 String curpath = System.getProperty("user.dir"); path = path +".png"; String screenPaht = curpath+"/"+path; //截图 File screen = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); try { FileUtils.copyFile(screen, new File(screenPaht)); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) throws InterruptedException { Login login = new Login(); //login.loginScript("13081866542","a990325."); /** * @Param: [args] * @return: void * @Author: ljm * @Date: 2021/4/17 * @Description: key-value * username-password */ HashMap user = new HashMap(); user.put("13081866542","a990325."); //user.put("[email protected]","a990325."); for(String key: user.keySet()){ String username = key; String password = user.get(key); System.out.println("账号是:"+username+"密码是:"+password); login.loginScript(username,password); } // Iterator us= user.entrySet().iterator(); // while(us.hasNext()){ // Map.Entry entry = (Map.Entry)us.next(); // String username = entry.getKey().toString(); // String password = entry.getValue().toString(); System.out.println(username+"密码:"+password); // login.loginScript(username,password); // } } } 3-13 通过监听事件实现失败自动截图 3-14 登陆代码分层设计

根据PO模型将代码分为元素层、操作层和业务层。 首先建立基类DiverBase类,SelectDriver类,BasePage类。DiverBase类根据浏览器名进行浏览器选择,关闭浏览器等操作。SelectDriver类选择合适的浏览器,BasePage类实现一些操作的封装:封装点击、封装输入、判断元素是否显示。

元素层就是建立类loginPage继承 BasePage类实现以下操作,获取用户名输入框、获取密码输入框、获取登陆按钮,将必须的操作写入element.properties再建立getByLocator类进行分割读取。

操作层就是建立loginPageHandle类完成输入用户名、输入密码、点击登陆的操作。

业务层就是建立longinpro类判断登陆框是不是存在,如果存在我们就输入。login类调用方法传入用户名信息。使用到了testng框架。 在这里插入图片描述在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3-15 driver以及基类的封装

在这里插入图片描述 DiverBase.java

package selenium.base; import org.openqa.selenium.WebDriver; import org.testng.annotations.Test; /** * @Auther: ljm * @Date: 2021/04/19/16:29 * @Description: */ public class DiverBase { public WebDriver driver; public DiverBase(String browser){ SelectDriver selectDriver =new SelectDriver(); this.driver = selectDriver.driverName(browser); } public void stop(){ System.out.println("stop webdriver"); driver.close(); } }

SelectDriver.java

package selenium.base; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; /** * @Auther: ljm * @Date: 2021/04/19/16:18 * @Description: */ public class SelectDriver { public WebDriver driverName(String browser){ if(browser.equalsIgnoreCase("fireFox")){ System.setProperty("webdirver.firefox.marionette","E:\\seleniumdriver\\geckodriver.exe"); return new FirefoxDriver(); }else { System.setProperty("webdirver.chrome.driver","E:\\seleniumdriver\\chromedriver.exe"); return new ChromeDriver(); } } } 3-16 基类封装-BasePage

BasePage.java

package selenium.page; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import selenium.base.DiverBase; /** * @Auther: ljm * @Date: 2021/04/19/17:05 * @Description: */ public class BasePage { public DiverBase driver; public BasePage(DiverBase driver) { this.driver = driver; } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 定位element By by */ public WebElement element(By by){ WebElement element = driver.findElement(by); return element; } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 封装点击 */ public void click(WebElement element){ if(element!= null){ element.click(); }else { System.out.println("元素没定位到,点击失败"); } } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 封装输入 */ public void sendKeys(WebElement element,String value){ if(element!=null){ element.sendKeys(value); }else { System.out.println(element+"元素没有定位到,输入失败"+value); } } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 判断元素是否显示 */ public boolean assertElementIs(WebElement element){ return element.isDisplayed(); } }

DiverBase.java

package selenium.base; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.testng.annotations.Test; /** * @Auther: ljm * @Date: 2021/04/19/16:29 * @Description: */ public class DiverBase { public WebDriver driver; public DiverBase(String browser){ SelectDriver selectDriver =new SelectDriver(); this.driver = selectDriver.driverName(browser); } public void stop(){ System.out.println("stop webdriver"); driver.close(); } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 封装element方法 */ public WebElement findElement(By by){ WebElement element = driver.findElement(by); return element; } } 3-17 登陆po设计模式代码实战-01-loginPage封装 package selenium.page; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import selenium.base.DiverBase; import selenium.util.getByLocator; /** * @Auther: ljm * @Date: 2021/04/19/17:24 * @Description: */ public class loginPage extends BasePage{ public loginPage(DiverBase driver) { super(driver); } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 获取用户名输入框 */ public WebElement getUserElement() { return element(getByLocator.getLocator("username")); } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 密码输入框 */ public WebElement getPasswordElement(){ return element(getByLocator.getLocator("userpass")); } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 获取登陆按钮element */ public WebElement getLoginButtonElement() { return element(getByLocator.getLocator("loginbutton")); } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 获取自动登陆element */ public WebElement getAutoSignElement(){ return element(getByLocator.getLocator("autoSignin")); } } 3-18 登陆po设计模式代码实战-02-loginPageHandle

loginPageHandle.java

package selenium.handle; import selenium.base.DiverBase; import selenium.page.loginPage; /** * @Auther: ljm * @Date: 2021/04/19/19:41 * @Description: */ public class loginPageHandle { public DiverBase diver; public loginPage lp; public loginPageHandle(DiverBase diver) { this.diver = diver; lp = new loginPage(diver); } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 输入用户名 */ public void sendKeysUser(String username){ lp.sendKeys(lp.getUserElement(),username); } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 输入密码 * */ public void sendKeysPassword(String password){ lp.sendKeys(lp.getPasswordElement(),password); } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 点击登陆 */ public void clickLoginButton(){ lp.click(lp.getLoginButtonElement()); } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 点击自动登陆 */ public void clickAutoSign(){ lp.click(lp.getAutoSignElement()); } } 3-19 登陆po设计模式代码实战-03-loginPagePro

loginPro.java

package selenium.business; import selenium.base.DiverBase; import selenium.handle.loginPageHandle; /** * @Auther: ljm * @Date: 2021/04/19/19:56 * @Description: */ public class LoginPro { public loginPageHandle lph; public LoginPro(DiverBase diver) { lph = new loginPageHandle(diver); } public void login(String username,String password){ if(lph.assertLoginPage()){ lph.sendKeysUser(username); lph.sendKeysPassword(password); lph.clickAutoSign(); lph.clickLoginButton(); }else { System.out.println("页面不存在或者状态不正确"); } } }

loginPageHandle.java

package selenium.handle; import selenium.base.DiverBase; import selenium.page.loginPage; /** * @Auther: ljm * @Date: 2021/04/19/19:41 * @Description: */ public class loginPageHandle { public DiverBase diver; public loginPage lp; public loginPageHandle(DiverBase diver) { this.diver = diver; lp = new loginPage(diver); } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 输入用户名 */ public void sendKeysUser(String username){ lp.sendKeys(lp.getUserElement(),username); } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 输入密码 * */ public void sendKeysPassword(String password){ lp.sendKeys(lp.getPasswordElement(),password); } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 点击登陆 */ public void clickLoginButton(){ lp.click(lp.getLoginButtonElement()); } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 点击自动登陆 */ public void clickAutoSign(){ lp.click(lp.getAutoSignElement()); } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 判断是否是登陆页面 */ public boolean assertLoginPage(){ return lp.assertElementIs(lp.getUserElement()); } } 3-20 登陆po设计模式代码实战-04-testLogin

login.java

package selenium.testCase; import org.openqa.selenium.By; import org.testng.annotations.Test; import selenium.base.DiverBase; import selenium.business.LoginPro; /** * @Auther: ljm * @Date: 2021/04/19/20:15 * @Description: */ public class login extends CaseBase{ public DiverBase driver; public LoginPro loginPro; public login(){ this.driver = InitDriver("chrome"); loginPro = new LoginPro(driver); } @Test public void getLoginHome(){ driver.get("http://www.imooc.com"); driver.max(); driver.findElement(By.id("js-signin-btn")).click(); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } @Test(dependsOnMethods = {"getLoginHome"}) public void testLogin(){ loginPro.login("13081866542","a990325."); } }

DiverBase.java

package selenium.base; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.testng.annotations.Test; /** * @Auther: ljm * @Date: 2021/04/19/16:29 * @Description: */ public class DiverBase { public WebDriver driver; public DiverBase(String browser){ SelectDriver selectDriver =new SelectDriver(); this.driver = selectDriver.driverName(browser); } /** * @Param: [] * @return: void * @Author: ljm * @Date: 2021/4/19 * @Description: 获取driver */ public WebDriver getDriver(){ return driver; } public void stop(){ System.out.println("stop webdriver"); driver.close(); } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 封装element方法 */ public WebElement findElement(By by){ WebElement element = driver.findElement(by); return element; } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: get封装 */ public void get(String url){ driver.get(url); } /** * @Param: * @return: * @Author: ljm * @Date: 2021/4/19 * @Description: 窗口最大化 */ public void max(){ driver.manage().window().maximize(); } } 3-21 使用log4j手机日志 3-22 生成html测试报告 3-23 selenium框架面试技巧

1、自动化测试用例怎么来? 从功能测试里面去抽取;大部分来自手工测试的冒烟测试,部分用例;自动化为了监控或者回归 2、框架用什么开发? selenium+maven+tesng 3、如何解决你遇见的问题? 4、做自动化的目的是什么? 1、用来回归 2、监控(比如系统不稳定,我们需要过一会过一会就检查商品价格) 3、提高工作效率(遍历商品价格) 5、PO模型是怎么做的? 页面对象和其他页面没挂钩,输入用户名就是用户名, 首先把页面元素,页面操作,页面业务,集合成一条case。元素,数据,业务分离 6、如何判断case是否通过? 预期结果最后这条case的判定条件。 实际值和预期值 7、有多少case?多少通过率? 一般百分之七八十 8、报告从那里来?主要统计什么? tesng自动生成 case来,统计失败比例,执行时间,日志截图



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3