Skip to content
This repository was archived by the owner on Nov 27, 2023. It is now read-only.

Commit 2fa8ccf

Browse files
committed
把文档也作为项目的一部分
1 parent c6317d8 commit 2fa8ccf

13 files changed

Lines changed: 395 additions & 1 deletion

docs/Home.md

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
# 介绍
2+
本项目PhoenixAutotest是一个基于Selenium的WebUI自动测试框架,通过该框架可以简化测试人员的学习难度,只要编写少量的Java代码即可,大多数的工作都是编写页面元素的描述文件以及对应的数据源。
3+
框架PhoenixAutotest已经集成了三大浏览器(Chrome、IE、Firefox)在Windows、Linux以及Mac操作系统下的各种WebDriver驱动版本。用户无需花费很多时间来进行开发环境的搭建。
4+
每一个做过WebUI自动化测试工作的朋友一定也体会到了,元素定位是一个比较耗时、困难的过程,针对这个痛点,框架也给出了三种元素定位的策略。
5+
而数据源、参数化更是本框架的一大亮点。您除了可以直接使用框架提供的丰富的数据源和参数化技术外,也可以很轻松地给出自己的实现。
6+
测试套件,也是无需用户编码,通过配置文件描述即可。这点,类似于TestNG的配置文件。
7+
8+
# 准备
9+
如果要使用PhoenixAutotest框架来做WebUI自动化测试的话,需要先了解一些必要的技能或者知识。
10+
* XML
11+
框架的元素定位信息、数据源等文件默认是XML格式的,所以,您应该了解XML的语法。
12+
* Java基础
13+
虽然,大多数的工作都交给XML配置了,但是还是应该了解Java的基础,例如:语法、集合、异常信息、调试技巧等。
14+
* 开发工具
15+
Eclipse或者其他IDE都是可以的,但您至少应该了解一种。
16+
* 元素定位方法
17+
WebUI测试,必然是离不开元素定位的。能够熟练地使用浏览器调试工具来获取元素定位信息是做自动化测试的基础。
18+
19+
如果您对自动化测试感兴趣,但是现在还不了解Selenium的话,这里给您提供一篇[学习建议](http://surenpi.com/2016/04/28/selenium_learning_advise/)
20+
# 入门
21+
步骤如下:
22+
1. 创建工程
23+
2. 配置Spring配置文件
24+
3. 编写元素定位XML配置
25+
4. 编写Page类
26+
5. 编写测试类
27+
28+
## 创建工程
29+
可以根据您的习惯来选择Java工程或者Maven工程。如果是Maven工程的话,请添加如下依赖:
30+
````xml
31+
<dependency>
32+
<groupId>com.surenpi.autotest</groupId>
33+
<artifactId>autotest.web.framework</artifactId>
34+
<version>1.0.2-20170422</version>
35+
</dependency>
36+
````
37+
如果只是要用简单的Java工程的话,可以从下面的QQ群里下载编译好的autotest.web.framework.dist-*.jar文件,加入到classpath中即可。
38+
39+
## Spring配置
40+
````xml
41+
<?xml version="1.0" encoding="UTF-8"?>
42+
<p:beans xmlns:p="http://www.springframework.org/schema/beans"
43+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
44+
xmlns:context="http://www.springframework.org/schema/context"
45+
xsi:schemaLocation="http://www.springframework.org/schema/beans
46+
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
47+
http://www.springframework.org/schema/context
48+
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
49+
<!-- 这里配置Page类所在的包,不然框架讲无法找到对应的类 -->
50+
<context:component-scan base-package="org.suren.autotest.test.page" />
51+
</p:beans>
52+
````
53+
以上的配置文件applicationContext.xml,要放置在src根目录中。注意:该文件名固定,不允许自定义。
54+
55+
## 元素定位
56+
```xml
57+
<?xml version="1.0" encoding="UTF-8"?>
58+
<suren:autotest xmlns:suren="http://surenpi.com"
59+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
60+
xsi:schemaLocation="http://surenpi.com
61+
http://surenpi.com/schema/autotest/autotest.web.framework.xsd ">
62+
<suren:engine />
63+
<suren:pages>
64+
<suren:page class="org.suren.autotest.test.page.BaiduHomePage"
65+
url="https://www.baidu.com/">
66+
<suren:field name="keyword" byId="kw" />
67+
<suren:field name="searchBut" byId="su" />
68+
</suren:page>
69+
</suren:pages>
70+
</suren:autotest>
71+
```
72+
以上的配置文件baidu.xml,要放置在src根目录中。
73+
## Page类
74+
```java
75+
package org.suren.autotest.test.page;
76+
77+
import org.springframework.beans.factory.annotation.Autowired;
78+
import org.springframework.stereotype.Component;
79+
import org.suren.autotest.web.framework.core.ui.Button;
80+
import org.suren.autotest.web.framework.core.ui.Text;
81+
import org.suren.autotest.web.framework.page.Page;
82+
83+
/**
84+
* 逻辑页面,包含页面中需要定位的元素信息</br>
85+
* Text是文本框、文本域</br>
86+
* Button是按钮,可以是a标签或者input标签类型为button的以及其他所有可以电机的元素</br>
87+
* Selector是下拉列表</br>
88+
* 类上必须加Component,属性上必须加Autowired注解</br>
89+
* 所有的属性必须添加对应的getter和setter方法</br>
90+
* 另外,框架提供了工具类用于根据baidu.xml来生成当前Page类的方法,具体请查看code工程
91+
* @author suren
92+
* @date 2016年12月13日 下午7:57:44
93+
*/
94+
@Component
95+
public class BaiduHomePage extends Page {
96+
@Autowired
97+
private Text keyword;
98+
@Autowired
99+
private Button searchBut;
100+
public Text getKeyword() {
101+
return keyword;
102+
}
103+
public void setKeyword(Text keyword) {
104+
this.keyword = keyword;
105+
}
106+
public Button getSearchBut() {
107+
return searchBut;
108+
}
109+
public void setSearchBut(Button searchBut) {
110+
this.searchBut = searchBut;
111+
}
112+
}
113+
````
114+
## 测试类
115+
```java
116+
package org.suren.autotest.test;
117+
118+
import java.io.IOException;
119+
120+
import org.dom4j.DocumentException;
121+
import org.suren.autotest.test.page.BaiduHomePage;
122+
import org.suren.autotest.web.framework.settings.SettingUtil;
123+
import org.xml.sax.SAXException;
124+
125+
/**
126+
* AutoTest框架的一个简单示例</br>
127+
* baidu.xml主要包含元素定位信息的描述</br>
128+
* applicationContext.xml配置了Page类所在的包(package)</br>
129+
* Page类BaiduHomePage是一个逻辑的页面对象,包括页面中需要定位的元素
130+
* @author suren
131+
* @date 2016年12月13日 下午7:52:06
132+
*/
133+
public class Test {
134+
135+
/**
136+
* 入口函数
137+
* @param args
138+
* @throws IOException
139+
* @throws DocumentException
140+
* @throws SAXException
141+
* @throws InterruptedException
142+
*/
143+
public static void main(String[] args) throws IOException, DocumentException,
144+
SAXException, InterruptedException {
145+
SettingUtil util = new SettingUtil();
146+
util.readFromClassPath("baidu.xml"); //加载元素定位配置文件
147+
148+
//获取Page类,然后获取对应的元素,再进行操作
149+
BaiduHomePage baiduHomePage = util.getPage(BaiduHomePage.class);
150+
baiduHomePage.open(); //打开baidu.xml配置文件中配置的页面地址
151+
baiduHomePage.getKeyword().setValue("selenium"); //告诉框架文本框要填充的值
152+
baiduHomePage.getKeyword().fillValue(); //向文本框中填充值
153+
baiduHomePage.getSearchBut().click(); //点击搜索按钮
154+
155+
Thread.sleep(3000);
156+
157+
util.close(); //关闭框架
158+
}
159+
}
160+
```
161+
以上示例的[源代码](https://github.com/LinuxSuRen/phoenix.autotest.demo/tree/master/simple)
162+
# 参考
163+
[更多示例](https://github.com/LinuxSuRen/phoenix.autotest.demo)

docs/Selenium原生API.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# 介绍
2+
PhoenixFramework框架在Selenium的基础上做了很多方便用户使用的API,但如果某些特定场景下必须使用Selenium的API,这也是框架所支持的。

docs/_Footer.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
QQ交流群:52492046
2+
加群后请及时修改备注为:城市-昵称
3+
欢迎关注我的个人博客:[素人派](http://surenpi.com)

docs/a.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.

docs/元素定位.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# 定位方法
2+
ID、css、Name、xpath、超链接文本(部分)、标签名称(tagName)等。
3+
更多元素定位技巧请参考
4+
# UI组件
5+
框架封装了一些UI组件,可以简化操作。包括有:文本框(文本域)、按钮、下拉列表、单选按钮组等。
6+
## 文本框
7+
框架把文本框和文本域都当做同一类来处理,都是用于输入文本的。但,这里不包括的是一些富文本框。
8+
它对应的类为Text。
9+
## 按钮
10+
这里说的按钮,也不一定就是对应HTML中的按钮,指的是所有用于点击操作的元素。
11+
它对应的类为Button。
12+
## 下拉列表
13+
这里的下拉列表特指HTML中的select元素。您可以根据文本(text)、值(value)、序号(index)来选择特定的选项,另外,框架还提供了随机选择一个选项的功能。如果,在该列表只是个必填项,所选的值不会影响后续的流程的话,就最适合使用随机选择的功能了。
14+
下拉列表中选项的文本对用户是最直接的,而值则是需要传递给后台用来存储的数据,因此我建议各位测试人员,尽可能使用文本的方式来选择列表。
15+
它对应的类为Selector。
16+
## 单选按钮组
17+
例如:性别的选择这种单选按钮,是需要根据值来选择。而它的定位是要定位到这组单选按钮的父(parent)元素上,我这里说的值指的是每个选项的value属性。
18+
它对应的类为CheckBoxGroup。
19+
## Ztree
20+
## 日历控件
21+
# 策略
22+
框架提供了三种策略来加强元素查找——优先级、区域、循环策略。默认使用的策略是优先级策略。
23+
## 优先级
24+
该策略下,框架会优先使用id来定位元素。
25+
## 区域
26+
该策略下,框架会先定位一个大的区域,然后再在该区域下定位第二级的元素,以此类推。
27+
## 循环
28+
该策略会优先使用id来定位元素,如果找到就返回元素,找不到则继续使用后面的方法来定位。
29+
30+
# 配置
31+
xml schema地址http://surenpi.com/schema/autotest/autotest.web.framework.xsd
32+
[点击这里查看如何配置Eclipse智能提示XML](http://surenpi.com/2016/07/21/eclipse_prompt_xml/)

docs/参与贡献.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# 介绍
2+
如果您看好本项目,希望能参与到项目中来的话,将会是非常受欢迎的。
3+
为了能够更好地让大家参与到开源项目PhoenixFramework中来,下面介绍几种方式:
4+
* 贡献issues,您可以在这里提出您的意见或者建议,还有bug
5+
* 贡献文档,一个优秀的项目不仅仅是代码质量要好,文档也是必不可少的
6+
* 贡献代码,如果您在使用的过程中发现有缺陷,也可以直接把修正后的代码贡献出来
7+
* 贡献博文,为了能让更多的人了解到本项目,因此受益,您可以在您的博客中介绍本项目
8+
# 贡献issues
9+
在提出问题的时候,尽可能把遇到问题的环境因素(操作系统、Java版本、浏览器版本、数据库等)都写清楚,这样才能更加容易复现问题、修正问题。
10+
如果您愿意帮忙测试PhoenixFramework的兼容性的话,希望能从以下环境中进行测试:
11+
* 操作系统,Windows(7,8,10)、Linux(Ubuntu、CentOS、Readhat)、Mac
12+
* 浏览器,Firefox、Chrome、IE
13+
# 贡献文档
14+
我们在GitHub上的文档是用Markdown的格式来编写的,所以,如果您要给PhoenixFramework贡献文档的话,首先要了解Markdown的语法。
15+
# 贡献代码
16+
## Java
17+
项目使用Maven来构建,所以,您需要对Maven有了解。对于框架部分,您需要对Spring、Selenium要有了解。
18+
编码规范:
19+
所有public修饰的方法必须要有注释,大括号采用上下对齐的方式
20+
属性注释格式
21+
```java
22+
/** 状态 */
23+
public static final int FETCH_SUCCESS = 1;
24+
```
25+
类注释格式(必须要有author标签)
26+
```java
27+
/**
28+
* 用于回调的接口
29+
* @author suren
30+
* @date 2017年1月25日 上午11:38:41
31+
*/
32+
public interface Callback<T>
33+
{
34+
void callback(T data);
35+
}
36+
```
37+
赋值符号两边必须各有一个空格,例如:
38+
````java
39+
String value = locatorMap.get(key);
40+
````
41+
除有特殊理由外,不允许有多余的换行。每个方法之间使用一个换行,每个方法内部的开头和结尾不允许有换行。
42+
如果您使用Eclipse作为开发工具的话,请把项目的风格配置文件导入:[suren_format.xml](https://github.com/LinuxSuRen/phoenix.webui.framework/blob/master/suren_format.xml)[suren_codetemplates.xml](https://github.com/LinuxSuRen/phoenix.webui.framework/blob/master/suren_codetemplates.xml)
43+
44+
## JavaScript
45+
JS的框架使用的是Bootstrap。
46+
需要遵守的代码规范:
47+
如果一个页面中需要有多份onready这种页面加载完需要执行的逻辑的话,要写在同一地方。
48+
功能相似的函数要写在一起,不能过于分散。函数名为驼峰规则。
49+
## Css
50+
# 贡献博文
51+
欢迎您在CSDN、博客园等站点上分享PhoenixFramework框架,介绍如何使用、高级特性等。

docs/参数化.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# 简介
2+
PhoenixAutotest中的参数化技术,包括了对元素定位、数据源的参数化。对于元素定位的参数化,有的场景下同一个页面中的同一个元素在不同的流程中定位方法是不一样的。这时候,为了能够尽可能地复用脚本实现动态定位元素,就需要用到元素定位的参数化。
3+
在自动化测试脚本的编写过程中,可能需要用到很多数据,而某些数据可能是动态变化的、有规律的(例如:手机、邮箱、身份证等)、不关心具体内容的。这时候,就需要用到参数化来提高脚本的可复用性。简单来说,就是把脚本中可变的部分写在其他地方,避免了要经常修改脚本的工作。
4+
# 类型
5+
PhoenixAutotest框架支持很多中类型的参数化,也能满足大多数的情况。但,除此之外用户还可以很方便地进行扩展、自定义;当然自定义部分,您可以看后面的章节。
6+
这里的类型包括:simple、freemarker、properties、page_ref、groovy、javascript、encrypt、callback、sequence等。
7+
## simple
8+
顾名思义,simple为简单实现的一种参数化。可以使用的变量包括:日期、身份证号码、电子邮件、邮编、随机数字等。
9+
`${now}`是当前日期的时间戳,为数字形式的日期
10+
`${now yyyy}`年份字符串,例如:2017
11+
`${now MM-dd}`年份字符串,例如:3-26
12+
`${now yyyy-MM-dd}`年份字符串,例如:2017-3-26
13+
`${now MM-dd HH:mm}`年份字符串,例如:3-26 12:00
14+
`${now yyyy-MM-dd HH:mm:ss}`年份字符串,例如:2017-3-26 12:00:00
15+
`${id_card}`身份证号码
16+
`${email}`电子邮件
17+
`${phone}`手机号码
18+
`${postcode}`邮编
19+
`${random-60}`随机数字,从0-60的随机数字
20+
## freemarker
21+
使用了该类型后,框架会把数据当作freemarker模板来进行解析。
22+
## properties
23+
把参数化的具体数据会保存在文件dynamic.data.properties中。
24+
## system
25+
这个是全局的参数配置。数据配置在文件system.data.properties中。
26+
## random_text
27+
通过该参数化,您可以把数据存放在data目录下的一个txt文本文件中,会随机返回一行文本字符串。
28+
## page_ref
29+
这种类型,可以让您引用其他Page类中属性的值。
30+
## groovy
31+
框架会把数据当作groovy脚本来解析。
32+
## javascript
33+
框架会把数据当作javascript脚本来解析。
34+
## encrypt
35+
如果您的项目中有比较敏感的数据,可以采用加密的方式。填入的是密文,框架会根据给定的密钥在使用的时候自动解密。采用该类型,需要配置文件encrypt.properties。这里要配置密钥,例如:`encrypt.key=123456`
36+
## callback
37+
该类型的参数化实现本身没有任何作用,但是它可以通过传递参数来使用其他任何一种参数化的实现。
38+
## sequence
39+
# 自定义
40+
可以通过实现接口`org.suren.autotest.web.framework.data.DynamicData`来添加自定义的参数化实现。

docs/外部执行器.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# 介绍
2+
PhoenixFramework框架为了方便使用一些常用的操作,提出了一个“外部执行器”的概念。下面介绍内置的外部执行器。
3+
4+
# JsInvoker
5+
支持执行js代码。
6+
7+
# KaptchaInvoker
8+
由于大部分图形验证码,都是把图片中的信息保存在session中,随后在登陆时进行匹配来实现的。
9+
我这里给出的验证码方案,是需要服务端和测试脚本配合使用的。
10+
## 服务端
11+
对外暴露一个web服务(http),专门用于获取图形验证码中信息。
12+
## 测试脚本
13+
需要在数据源文件中作如下配置:
14+
````xml
15+
<suren:field name="kaptcha"
16+
data="data,http://localhost/kaptcha!getLastCode.do" type="callback"
17+
callback="KaptchaInvoker">
18+
</suren:field>
19+
````
20+
21+
# EngineInvoker
22+
框架引擎。
23+
24+
# OSInvoker
25+
执行操作系统本地命令。
26+
27+
# TestNGInvoker
28+
调用TestNG。

docs/数据源.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# 描述
2+
# 支持的类型
3+
当前支持xml配置的数据源文件。
4+
5+
# 配置
6+
xml schema地址http://surenpi.com/schema/datasource/autotest.web.framework.datasource.xsd
7+
[点击这里查看如何配置Eclipse智能提示XML](http://surenpi.com/2016/07/21/eclipse_prompt_xml/)

docs/测试套件.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# 描述
2+
测试套件是一种描述测试动作的配置文件。
3+
# 动作
4+
这里的动作,基本上是在模拟人工进行操作。部分动作支持随机操作,例如:从下拉列表中随机选择一个选项、随机上传一个文件等。
5+
## 点击
6+
大部分情况是鼠标单击操作。
7+
## 文本填入
8+
## 下拉列表
9+
框架对于下拉列表的操作支持四种:根据文本、根据值、根据序号、随机。
10+
## 文件上传
11+
## 组合动作
12+
有些UI界面中会有比较复杂的控件,例如:日历、Tree等。可能为了选择一个值需要鼠标点击四五次,而且都是重复性的。框架对于这种情况,也是支持作进一步封装的。
13+
14+
# 配置
15+
xml schema地址http://surenpi.com/schema/suite/autotest.web.framework.suite.xsd
16+
[点击这里查看如何配置Eclipse智能提示XML](http://surenpi.com/2016/07/21/eclipse_prompt_xml/)

0 commit comments

Comments
 (0)