Java+selenium之WebDriver的常用方法封装(八)
总结:WEB UI自动化测试一般采用 POP(面向页面编程),自动化测试框架分三层,有时如果页面如果太多,不好管理,可以面向控件编程,即把控件当作页面,毕竟控件是有限的,所以封装页面的代码量会少很多,两种方式各有优劣。如果页面比较少的,建议可以全部封装为页面对象;如果页面比较多,而且跳转复杂,建议使用两者结合的方式,一级页面,二级页面封装,三级以上页面,就不需要封装,使用控件对象完成页面操作。利用封装好的页面对象/控件对象,再进一步完成业务关键字封装,比如登录,注册,添加商品,支付等等操作,这样有个好处就是需求变动,业务流程调整,或者添加流程等,只需要封装新的流程,重组用例,维护工作量会减少很多。这样的三层结构非常清晰,第一层页面对象封装层只需要关注维护页面元素对象,第二层业务封装层只需要关注产品的业务流程拆分,第三层用例层只需要关注用例的流程组合以及测试数据,具体架构参考下图:

下面附上部分代码,有不对的地方请指正。
接口,定义基类页面的方法,可能不全,需要的可以继续补充
import org.openqa.selenium.WebElement;
interface BasePage {
WebElement findElement(String loc);
void sendKeys(String loc, String var1);
void click(String loc);
void submit(String loc);
void switchToFrame(String loc);
void switchToParentFrame();
void closeAlert();
void acceptAlert();
String getAlertText();
void moveToElement(String loc);
void doubleClick(String loc);
void contextClick(String loc);
void dragAndDrop(String source, String target);
void closeBrowser();
String getTitle();
String getUrl();
void maxBrowser();
}
基类实现的抽象类,其他的页面继承该类再个性化实现即可:
import com.uitest.control.by.LocationUtil;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions; import java.util.concurrent.TimeUnit; public abstract class BasePageImpl implements BasePage {
protected final WebDriver driver;
private static final long timeOutInSeconds = 10; BasePageImpl(WebDriver driver, String url) {
this.driver = driver;
this.driver.manage().timeouts().implicitlyWait(timeOutInSeconds, TimeUnit.SECONDS);
this.driver.get(url);
} BasePageImpl(WebDriver driver) {
this.driver = driver;
this.driver.manage().timeouts().implicitlyWait(timeOutInSeconds, TimeUnit.SECONDS);
} public WebElement findElement(String loc) {
return driver.findElement(LocationUtil.getLocation(loc));
} public void sendKeys(String loc, String var1) {
findElement(loc).sendKeys(var1);
} public void click(String loc) {
findElement(loc).click();
} public void submit(String loc) {
findElement(loc).submit();
} public void switchToFrame(String loc) {
driver.switchTo().frame(findElement(loc));
} public void switchToParentFrame() {
driver.switchTo().parentFrame();
} public void closeAlert() {
driver.switchTo().alert().dismiss();
} public void acceptAlert() {
driver.switchTo().alert().accept();
} public String getAlertText() {
return driver.switchTo().alert().getText();
} public void moveToElement(String loc) {
new Actions(driver).moveToElement(findElement(loc)).perform();
} public void doubleClick(String loc) {
new Actions(driver).doubleClick(findElement(loc)).perform();
} public void contextClick(String loc) {
new Actions(driver).contextClick(findElement(loc)).perform();
} public void dragAndDrop(String source, String target) {
new Actions(driver).dragAndDrop(findElement(source), findElement(target)).perform();
} public void closeBrowser() {
driver.close();
} public String getTitle() {
return driver.getTitle();
} public String getUrl() {
return driver.getCurrentUrl();
} public void maxBrowser() {
driver.manage().window().maximize();
}
}
工具类:
import org.openqa.selenium.By; import java.util.Arrays;
import java.util.List; public class LocationUtil {
/**
* 定位信息,比如id=kw
* @param var 格式xpath=//*[@id="kw"]
* @return org.openqa.selenium.By
*/
public static By getLocation (String var) {
List list = Arrays.asList(var.split("=", 2));
if (list.size() < 2 || "".equals(list.get(1))) {
return null;
}
String loc = String.valueOf(list.get(1));
switch (ByType.valueOf(list.get(0).toString().toUpperCase())) {
case ID:
return By.id(loc);
case NAME:
return By.name(loc);
case XPATH:
return By.xpath(loc);
case CSS:
return By.cssSelector(loc);
case TAG:
return By.tagName(loc);
case CLASS:
return By.className(loc);
case LINKTEXT:
return By.linkText(loc);
case PARTIALLINKTEXT:
return By.partialLinkText(loc);
default:
return null;
}
}
}
Java+selenium之WebDriver的常用方法封装(八)的更多相关文章
- 《手把手教你》系列技巧篇(二十三)-java+ selenium自动化测试-webdriver处理浏览器多窗口切换下卷(详细教程)
1.简介 上一篇讲解和分享了如何获取浏览器窗口的句柄,那么今天这一篇就是讲解获取后我们要做什么,就是利用获取的句柄进行浏览器窗口的切换来分别定位不同页面中的元素进行操作. 2.为什么要切换窗口? Se ...
- Selenium的webdriver的常用方法,鼠标事件
就来认识 WebDriver 中最常用的几个方法: get():跳转到的地址clear(): 清除文本. send_keys (value): 模拟按键输入. click(): 单击元素. 示例: f ...
- Java+selenium之WebDriver对浏览器的简单操作(一)
操作浏览器的主要方法都来自 org.openqa.selenium.WebDriver 这个接口 这些方法都是在 org.openqa.selenium.remote.RemoteWebDriver这 ...
- 基于Java+Selenium的WebUI自动化测试框架(八)-----读取元素(XML文件)
我们继续回到自动化测试框架的主线上来,在前面的文章中,我们定义一个页面元素的主要参数有:路径,找寻方式,等待时间,名称,这个四个参数.另外,我们还需要考虑一个问题,就是网站的页面. 举个例子来说,如果 ...
- Java+selenium之WebDriver模拟鼠标键盘操作(六)
org.openqa.selenium.interactions.Actions类,主要定义了一些模拟用户的鼠标mouse,键盘keyboard操作.对于这些操作,使用 perform()方法进行执行 ...
- Java+selenium之WebDriver的cookie,等待等高级操作(五)
1. 操作cookie // 增加一个 name = "name",value="value" 的 cookie Cookie cookie = new Coo ...
- Java+selenium之WebDriver常见特殊情况如iframe/弹窗处理(四)
1. iframe 的处理 查找元素必须在对应的 ifarme 中查找,否则是找不到的 // 传入参数为 frame 的序号,从0开始 driver.switchTo().frame(Int inde ...
- Java+selenium之WebDriver的抛出异常分析(七)
NoSuchElementException 1.检查元素的定位器是否正确 2.如果定位器正确,增加休眠时间 3.等待了足够的时间依然找不到的话,更换定位器的定位方式 NoSuchWindowExce ...
- Java+selenium之WebDriver页面元素的操作(三)
1. 输入框(text field or textarea) WebElement we = driver.findElement(By.id("id")); //将输入框清空 w ...
随机推荐
- 阿里云ECS centos7配置tomcat
准备:创建好developer目录和tomcat子目录 1.在 http://tomcat.apache.org/download-80.cgi 下载tomcat,通过Xftp拷贝到tomcat目录 ...
- python 各种推导式玩法
推导式套路 除了最简单的列表推导式和生成器表达式,其实还有字典推导式.集合推导式等等. 下面是一个以列表推导式为例的推导式详细格式,同样适用于其他推导式. variable = [out_exp_re ...
- http://nancyfx.org + ASPNETCORE
商务产品servicestack: https://servicestack.net/ http://nancyfx.org + ASPNETCORE http://nancyfx.org ...
- windows下django1.7 +python3.4.2搭建记录1
python+django在linux下搭建比较简单,windows下搭建比较复杂,所以列在下方一.下载安装下载django的包,到刚解压后的Django-1.7目录下执行命令 python setu ...
- centos6.8安装httpd后无法访问
1.打开 httpd.conf 将里面的 #ServerName localhost:80 注释去掉 2.修改SELinux状态: 1)/usr/sbin/sestatus -v ##如果S ...
- 用Cordova打包Vue-vux项目
技术搭建:vue + vux 首先推荐阅读这篇文章,写的已经很详细了:https://www.jianshu.com/p/25d797b983cd 此处记录下我按照这篇文章打包的时候报的一些错误,方便 ...
- Mac 系统重新安装的几种方法
转:https://blog.csdn.net/feibozhulang/article/details/43734109 苹果官网说明: https://support.apple.com/en-u ...
- 安装snap及snap常安装软件
文章链接:https://blog.csdn.net/laomd/article/details/80710451 一.snap简介 什么是snap,snap是一种全新的软件包管理方式,它类似一个容器 ...
- Webapi 跨域 解决解决错误No 'Access-Control-Allow-Origin' header is present on the requested resource 问题
首先是web端(http://localhost:53784) 请求 api(http://localhost:81/api/)时出现错误信息: 查看控制台会发现错误:XMLHttpRequest c ...
- 整理六百篇web前端知识混总
9个有用的和免费的工具来支持动态网页开发 8个基本的引导工具的网页设计师 11款CSS3动画工具的开发 2016年某前端群题目答案参考 9最好的JavaScript压缩工具 创建响应式布局的10款优秀 ...