selenium + java po模式

简介:

po模式大概介绍,大家也可以自己百度看看
Page Object模式主要是将每个页面设计为一个类class,这个类包含页面中需要测试的元素(按钮、输入框、URL、标题等)和实际操作方法,这样在写测试用例时可以通过调用页面类的方法和属性来获取页面元素和操作元素,这样优点是避免当页面元素的ID或位置改变时需要更改测试用例代码的情况。当页面元组定位发生改变时只要通过更改页面类的属性即可。

框架目录结构
selenium + java po模式
loginPage.java

package com.lilysilk.page;

import org.apache.poi.util.SuppressForbidden;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
/**
 * 定位语句与测试代码封装
 * */
public class loginPage {

        //登录页面
        @FindBy(className="touXiang")
        private WebElement uloginPage;
        //用户名输入框
        @FindBy(xpath="//div[@class='userLogin']/div[1]/input[@id='email']")
        private WebElement uName;
        //密码输入框
        @FindBy(xpath="//div[@class='userLogin']/div[2]/input[@id='password']")
        private WebElement uPwd;
        //登录按钮
        @FindBy(id="loginButton")
        private WebElement loginBtn;

        //点击跳转登录页面
        public void goLoginPage() {
            uloginPage.click();
        }
        //输入用户名
        public void loginName(String username) {
            System.out.println(username);
            uName.clear();
            uName.sendKeys(username);
        }
        //输入密码
        public void loginPwd(String password) {
            System.out.println(password);
            uPwd.clear();
            uPwd.sendKeys(password);
        }
        //点击登录
        public void loginBtn() {
            loginBtn.click();
        }
}

case层即处理层
loginLilysilk_Po.java

package com.lilysilk.testcase;

import java.util.concurrent.TimeUnit;

import org.junit.*;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;

import com.lilysilk.page.loginPage;
import com.lilysilk.util.ExcelUtil;

public class loginLilysilk_Po {
    public static WebDriver driver;
    @Test
    public void loginlily() throws Exception{
        //定义测试用例路径
        String excelPath="E:\\javaDemo\\testProjectPo\\src\\com\\lilysilk\\data\\lilysilk.xlsx";
        //读取测试用例sheet页
        ExcelUtil.setExcelFile(excelPath,"login");
        //打开浏览器
        String BrowserName=ExcelUtil.getCellData(1,4);
        //修改浏览器语言
          ChromeOptions op=new ChromeOptions();
          op.addArguments("--lang=en-US");
        //equals比较时,要比较大小写是否相同,equalsIgnoreCase,忽略了大小写,ignore就是忽略的意思
        if(BrowserName.equalsIgnoreCase("chrome")){
            //初始化浏览器实例
            driver=new ChromeDriver(op);
        }else {
            driver=new FirefoxDriver(op);
        }
        //浏览器最大化
        driver.manage().window().maximize();
        //打开网址
        driver.get(ExcelUtil.getCellData(2, 4));
        //初始化page页面(注意:要放在打开浏览器之后)
        loginPage loginPage=PageFactory.initElements(driver, loginPage.class);

        loginPage.goLoginPage();
        loginPage.loginName("112233@qq.com");
        loginPage.loginPwd("112233@qq.com");
        loginPage.loginBtn();
    }
        @BeforeMethod
        public static void  beforeMethod(){
        }

         @AfterMethod
        public static void  afterMethod(){
           driver.close();
      }

}

工具类
ExcelUtil.java

package com.lilysilk.util;

import java.io.FileInputStream;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * 
 *@Comments   : 导入导出Excel工具类 
 *此类事实现操作指定的excel文件中的指定sheet页、
 *读取指定的单元格内容、获取sheet中最后一行的行号的功能
 *
 *
 **/
public class ExcelUtil {
    private static XSSFSheet ExcelWSheet;
    private static XSSFWorkbook ExcelWBook;//excel文件对象
    private static XSSFCell ExcelCell;//单元格对象

    //舍得需要操作的excel的文件路径和sheet名称
    //在读,写excel文件时,均需先调用此方法,设定要操作的excel的路径和sheet名称
    public static void setExcelFile(String Path,String SheetName) {
        FileInputStream ExcelFile;

        try {
            //实例化excel文件的FileInputStream对象
            ExcelFile=new FileInputStream(Path);
            //实例化EXCEL文件的execlWXSSFWorkbook对象
            ExcelWBook =new XSSFWorkbook(ExcelFile);
            //实例化 XSSFCell 对象,指定excel文件中的sheet名称,后续用于sheet中行、列和单元格的操作
            ExcelWSheet=ExcelWBook.getSheet(SheetName);

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    /**
     * @param rowNum行 colNum列 
     **/
    //读取excel文件中指定的单元格的函数,此函数只支持扩展名为.xlsx的excel文件
    public static String getCellData(int rowNum,int colNum)throws Exception {
        try {
        //通过函数参数知道单元格的行号与列号,获取指定的单元格对象
        ExcelCell=ExcelWSheet.getRow(rowNum).getCell(colNum);
        //如果单元格的内容为字符串类型,则使用getStringCellValue方法来获取单元格内容
        //如果单元格的内容为数字类型,   则使用getNumericCellValue方法来获取单元格内容
        String CellData =ExcelCell.getCellType()==XSSFCell.CELL_TYPE_STRING?ExcelCell.getStringCellValue()+"":String.valueOf(Math.round(ExcelCell.getNumericCellValue()));

        return CellData;
        }
        catch(Exception e){
            e.printStackTrace();
            //读取遇到异常,则返回空字符串
            return "错了";
        }
    }

    //获取excel文件的最后一行的行号
    public static int getLastRowNum() {
        //函数返回sheet的最后一行行号
        return ExcelWSheet.getLastRowNum();
    }
}

data层即数据层
selenium + java po模式

遇到的问题:
问题1:org.apache.poi.openxml4j.exceptions.OLE2NotOfficeXmlFileException: The supplied data appears to be in the OLE2 Format. You are calling the part of POI that deals with OOXML (Office Open XML) Documents. You need to call a different part of POI to process this data (eg HSSF instead of XSSF)
selenium + java po模式
像这个报错就是所用的XSSF是支持excel2007版本以上的,支持格式为xlsx,如果想要支持2003版本的xls,需要将XSSF换成HSSF的
问题2:部分jar包没有,需要导入,按照报错内容导入jar包就好


本文转自 水滴的历程 51CTO博客,原文链接:http://blog.51cto.com/12390959/2059330

相关文章
|
13小时前
|
前端开发 测试技术 Python
《手把手教你》系列技巧篇(四十一)-java+ selenium自动化测试 - 处理iframe -上篇(详解教程)
【5月更文挑战第5天】本文介绍了HTML中的`iframe`标签,它用于在网页中嵌套其他网页。`iframe`常用于加载外部内容或网站的某个部分,以实现页面美观。文章还讲述了使用Selenium自动化测试时如何处理`iframe`,通过`switchTo().frame()`方法进入`iframe`,完成相应操作,然后使用`switchTo().defaultContent()`返回主窗口。此外,文章提供了一个包含`iframe`的HTML代码示例,并给出了一个简单的自动化测试代码实战,演示了如何在`iframe`中输入文本。
10 3
|
1天前
|
JavaScript 前端开发 Java
《手把手教你》系列技巧篇(四十)-java+ selenium自动化测试-JavaScript的调用执行-下篇(详解教程)
【5月更文挑战第4天】本文介绍了如何使用JavaScriptExecutor在自动化测试中实现元素高亮显示。通过创建并执行JS代码,可以改变元素的样式,例如设置背景色和边框,以突出显示被操作的元素。文中提供了一个Java示例,展示了如何在Selenium中使用此方法,并附有代码截图和运行效果展示。该技术有助于跟踪和理解测试过程中的元素交互。
6 0
|
2天前
|
Web App开发 JavaScript 前端开发
《手把手教你》系列技巧篇(三十九)-java+ selenium自动化测试-JavaScript的调用执行-上篇(详解教程)
【5月更文挑战第3天】本文介绍了如何在Web自动化测试中使用JavaScript执行器(JavascriptExecutor)来完成Selenium API无法处理的任务。首先,需要将WebDriver转换为JavascriptExecutor对象,然后通过executeScript方法执行JavaScript代码。示例用法包括设置JS代码字符串并调用executeScript。文章提供了两个实战场景:一是当时间插件限制输入时,用JS去除元素的readonly属性;二是处理需滚动才能显示的元素,利用JS滚动页面。还给出了一个滚动到底部的代码示例,并提供了详细步骤和解释。
26 10
|
3天前
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
43 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
|
3天前
|
JavaScript 前端开发 测试技术
《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)
【5月更文挑战第2天】在自动化测试过程中,经常会遇到处理日期控件的点击问题。宏哥之前分享过一种方法,但如果输入框是`readonly`属性,这种方法就无法奏效了。不过,通过修改元素属性,依然可以实现自动化填写日期。首先,定位到日期输入框并移除`readonly`属性,然后使用`sendKeys`方法输入日期。这样,即使输入框设置了`readonly`,也能成功处理日期控件。
23 1
|
4天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(三十七)-java+ selenium自动化测试-日历时间控件-上篇(详解教程)
【5月更文挑战第1天】该文介绍了使用Selenium自动化测试网页日历控件的方法。首先,文章提到在某些Web应用中,日历控件常用于选择日期并筛选数据。接着,它提供了两个实现思路:一是将日历视为文本输入框,直接输入日期;二是模拟用户交互,逐步选择日期。文中给出了JQueryUI网站的一个示例,并展示了对应的Java代码实现,包括点击日历、选择日期等操作。
19 0
|
8天前
|
设计模式 前端开发 Java
19:Web开发模式与MVC设计模式-Java Web
19:Web开发模式与MVC设计模式-Java Web
19 4
|
10天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)
【4月更文挑战第28天】本文简要介绍了自动化测试的实战应用,通过一个在线问卷调查(<https://www.sojump.com/m/2792226.aspx/>)为例,展示了如何遍历并点击问卷中的选项。测试思路包括找到单选和多选按钮的共性以定位元素,然后使用for循环进行点击操作。代码设计方面,提供了Java+Selenium的示例代码,通过WebDriver实现自动答题。运行代码后,可以看到控制台输出和浏览器的相应动作。文章最后做了简单的小结,强调了本次实践是对之前单选多选操作的巩固。
23 0
|
11天前
|
存储 前端开发 测试技术
《手把手教你》系列技巧篇(三十五)-java+ selenium自动化测试-单选和多选按钮操作-下篇(详解教程)
【4月更文挑战第27天】本文介绍了使用Java+Selenium进行Web自动化测试时,如何遍历和操作多选按钮的方法。文章分为两个部分,首先是一个本地HTML页面的示例,展示了多选按钮的HTML代码和页面效果,并详细解释了遍历多选按钮的思路:找到所有多选按钮的共同点,通过定位这些元素并放入list容器中,然后使用for循环遍历并操作。 第二部分介绍了在JQueryUI网站上的实战,给出了被测网址,展示了代码设计,同样使用了findElements()方法获取所有多选按钮并存储到list中,然后遍历并进行点击操作。最后,文章对整个过程进行了小结,并推荐了作者的其他自动化测试教程资源。
19 0
|
13天前
|
Java 开发者 UED
Java 异步和事件驱动编程:探索响应式模式
【4月更文挑战第27天】在现代软件开发中,异步和事件驱动编程是提高应用性能和响应性的关键策略。Java 提供了多种机制来支持这些编程模式,使开发者能够构建高效、可扩展的应用程序。
27 4

热门文章

最新文章