selenium java po模式_selenium + java po模式

po模式大概介绍,大家也可以自己百度看看

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

框架目录结构

e60a031e6183bbc05ba43818ea56ea4a.png

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层即数据层

9a9cdda6735582195c291cfa5af0269f.png

遇到的问题:

问题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)

a18341ecd0c347af610ac6b4fbcdf29e.png像这个报错就是所用的XSSF是支持excel2007版本以上的,支持格式为xlsx,如果想要支持2003版本的xls,需要将XSSF换成HSSF的问题2:部分jar包没有,需要导入,按照报错内容导入jar包就好

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java基础语法实例教程_Java 基础语法

一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作面向对象中的一些概念下表列出了 面向对象 编程中的一些概念名词说明对象对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有…

python3软件怎么使用_python3怎么使用pip

pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。目前如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具。Python 2.7.9 或 Python 3.4 以上版本都自带 pip 工具。pip 官网:https://pypi.o…

深度学习图像融合_基于深度学习的图像超分辨率最新进展与趋势【附PDF】

因PDF资源在微信公众号关注公众号:人工智能前沿讲习回复“超分辨”获取文章PDF1、主题简介图像超分辨率是计算机视觉和图像处理领域一个非常重要的研究问题,在医疗图像分析、生物特征识别、视频监控与安全等实际场景中有着广泛的应用。随着深度学习技术的…

高通cpu排行_安卓手机芯片排行:麒麟990 5G仅排第三,980还输给了765G?

众所周知,在移动端芯片行业,高通多年来都保持着一种舍我其谁的劲头,但随着科技的不断发展,其他厂商也开辟了自己的新天地,截至目前,全球主流的智能手机搭载的处理器主要来自于华为海思、高通骁龙、三星、联…

keil4怎么移植其他人的程序_简单和你聊聊造血干细胞移植!

造血干细胞是个什么“鸟”?造血干细胞,人体血细胞的老祖宗。它的分裂方式也十分独特,由一个细胞分裂为两个细胞时,其中一个细胞会慢慢长大,增殖分化为红细胞、白细胞和血小板等等;另一个细胞仍然保持干细胞…

怎么在电脑上任意截屏_草地上打滚、墙上任意涂鸦,幼儿园让孩子“想怎么玩就怎么玩”...

(图为孩子们开心地在“山坡”上打滚。 学校供图)长江日报-长江网10月26日讯 10月26日,汉阳区玉龙幼儿园的孩子们冲上小山坡滑草,草地上打滚,滚筒里钻来钻去,墙上任意涂鸦,在梯子搭建的木桥上自由行走……孩子们自发地三…

pyaudio usb playback_苹果安卓手机充电器USB接口PSD源文件psd素材

分类:详情页类目:数码家电格式:psd体积:尺寸:790*12168编号:13182638软件: Photoshop CS6(.psd)颜色模式 : RGB图像类型:位图版权:独家版权LOGO/ 实景图/人物/字体/产品 …

horizon client 无法识别域_iText for Mac(OCR识别图中文字工具)

itext mac中文特别版是一款从图片中识别文字的OCR(光学字符识别)工具。通过截图、拖拽图片,即可以从扫描版的PDF等任意图片中识字,并且可以很好的解决摘抄和批注需求。而且itext mac版使用腾讯、Google 双引擎,识别效果惊人地准确。iText for…

mysql 操作表的例子,mysql中库和表的简单操作总结(附示例)

本篇文章给大家带来的内容是关于mysql中库和表的简单操作总结(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。一. 库的操作1.创建数据库创建数据库:create database 库名 charset utf8; charset uft8 可选项1.2 数据…

.net 5 正式版_iOS14.1正式版和14.2 Beta 4测试版一同发布 附16张内置新壁纸下载

今天凌晨,苹果同时推送了 iOS 14.1 正式版 和 iOS 14.2 Beta 4 测试版 系统更新,对于正式版和开发者用户来说,今天均可以将手中的 iPhone 升级到最新的系统版本。iOS 14.1 正式版更新了什么?先来看下 iOS 14.1 正式版,…

自适应均衡器 matlab程序,基于lms自适应均衡器matlab仿真

基于lms自适应均衡器matlab仿真 毕 业 设 计 (2014 届) 题 目 一种基于 OpenCV 的摄像机标定方 法学 院 物理电气信息学院 专 业 电子信息工程 年 级 2010 学生学号 12010245348 学生姓名 李 鑫 指导教师 车 进 2014 年 5 月 6 日摘要摄像机标定是在机器视觉和工业测量等领域中…

bloomberg用法 固定收益_干货 | 日语高考高频考点:助词を的用法

在日语高考题中,第二大题综合知识运用板块,16-20题固定考察日语的助词的使用。很多同学反映说:高考日语最难学的部分就是助词了。因为中文的结构中是没有助词成分,同时助词的用法也挺多,所以经常容易搞混。日语是黏着语…

php+new+mysqli+utf+8,MySQL和PHP:utf-8带有西里尔字符

HUH函数你在这里混合API,mysql_*和mysqli_*不会混在一起。你应该坚持mysqli_(看起来你无论如何都是),mysql_*函数被弃用,并在PHP 7中完全删除。你的实际问题是某个地方的字符集问题。这里有几个指针,可以帮助您为您的应用程序获得…

arduinojson 转 string_安德胜工作室发来本周五嗨唱转起来第二季首秀的嘉宾剧透...

湖南卫视全民音乐综艺互动秀《嗨唱转起来2》10月2日超燃回归,在金秋十月为观众带来新一季的惊喜。近日,官方微博官宣大玩家阵容:“太阳女神”谢娜、“节奏先生”潘玮柏、“行走的造梗机”大张伟。她是热情女神,点燃全场&#xff0…

二元置信椭圆r语言_r语言二元期权barrier option实现案例

原文链接:http://tecdat.cn/?p4051​tecdat.cnDouble-no-touch(DNT)选项是二元期权,在到期时支付固定金额的现金。我们将展示两种不同的方式来定价包含两种不同定价方法的DNT。​​​首先,我们将尝试使用正常参数&…

vscode emmet默认模板_从零开始配置 vscode

我们在进行开发工作时,选择一个顺手好用的编辑器是必不可免的, 其中 vscode 就是一个很好的选择。它能让你大部分的工作都在编辑器内完成, 大大的提高开发效率~概述vscode 内置了前端相关的基础环境,如emmet扩展。另外的环境则可以通过它自己的插件商城来…

djano 字段不重复_Java 14 发布了,不使用quot;classquot;也能定义类了?还顺手要干掉Lombok!...

2020年3月17日发布,Java正式发布了JDK 14 ,目前已经可以开放下载。在JDK 14中,共有16个新特性,本文主要来介绍其中的一个特性:JEP 359: Records官方吐槽最为致命早在2019年2月份,Java 语言架构师 Brian Goe…

java队列_java集合入门和深入学习(详解),看这篇就差不多了

一、集合入门总结集合框架:Java中的集合框架大类可分为Collection和Map;两者的区别:1、Collection是单列集合;Map是双列集合2、Collection中只有Set系列要求元素唯一;Map中键需要唯一,值可以重复3、Collect…

oracle课程小结,Oracle 数据库优化实战心得总结

一般情况下,对于频繁访问但是不频繁修改的数据,内部设计应当物理不规范化;对于频繁修改但并不频繁访问的数据,内部设计应当物理规范化。3.充分利用内存,优化sga、pga等(11g已经实现了sgapga自动化,但有的时…

苹果公司的企业文化_百度、苹果、脉脉等互联网大厂的企业文化衫还能这么潮?...

转眼2020年就已经到年中啦,很多企业已经敲锣打鼓,筹备着年中的会议团建了,有趣的,好玩的,有创意的,体面的,大场面的,国际范儿的,到底怎么样的年中策划才是最NICE的呢&…