Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
A
adaptation-master
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
912协同工作系统
项目监控管理工具
adaptation-master
Commits
5285f9bc
提交
5285f9bc
authored
1月 15, 2020
作者:
zhangshuang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
zs
上级
6486aabe
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
0 行增加
和
283 行删除
+0
-283
SeleniumController.java
...aptationmaster/adaptor/controller/SeleniumController.java
+0
-23
SeleniumService.java
...jty/adaptationmaster/adaptor/service/SeleniumService.java
+0
-157
ExcelUtil.java
src/main/java/com/zjty/adaptationmaster/utils/ExcelUtil.java
+0
-103
没有找到文件。
src/main/java/com/zjty/adaptationmaster/adaptor/controller/SeleniumController.java
deleted
100644 → 0
浏览文件 @
6486aabe
package
com
.
zjty
.
adaptationmaster
.
adaptor
.
controller
;
import
com.zjty.adaptationmaster.adaptor.service.SeleniumService
;
import
com.zjty.adaptationmaster.base.response.ServerResponse
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
@RequestMapping
(
"/selenium"
)
@RestController
@Api
(
value
=
"自动化测试管理接口"
,
description
=
"对web页面进行自动化测试"
)
public
class
SeleniumController
{
@Autowired
private
SeleniumService
seleniumService
;
@ApiOperation
(
value
=
"根据自动化测试"
)
@RequestMapping
(
value
=
"/autoTest"
,
method
=
RequestMethod
.
GET
)
public
ServerResponse
autoTest
(){
return
seleniumService
.
autoTestCase
();
}
}
src/main/java/com/zjty/adaptationmaster/adaptor/service/SeleniumService.java
deleted
100644 → 0
浏览文件 @
6486aabe
package
com
.
zjty
.
adaptationmaster
.
adaptor
.
service
;
import
com.zjty.adaptationmaster.base.response.ServerResponse
;
import
com.zjty.adaptationmaster.utils.ExcelUtil
;
import
com.zjty.adaptationmaster.utils.SeleniumUtils
;
import
com.zjty.adaptationmaster.utils.TestCase
;
import
lombok.extern.slf4j.Slf4j
;
import
org.openqa.selenium.By
;
import
org.openqa.selenium.JavascriptExecutor
;
import
org.openqa.selenium.WebDriver
;
import
org.openqa.selenium.WebElement
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
java.io.BufferedWriter
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.FileWriter
;
import
java.util.*
;
@Component
@Slf4j
public
class
SeleniumService
{
@Autowired
private
SeleniumUtils
seleniumUtils
;
@Value
(
"${testCaseExcelTable}"
)
private
String
testCaseExcelTable
;
@Value
(
"${createTxtPath}"
)
private
String
createTxtPath
;
public
ServerResponse
autoTestCase
(){
List
<
TestCase
>
testCases
=
null
;
try
{
testCases
=
ExcelUtil
.
importExcel
(
0
,
1
,
TestCase
.
class
,
new
FileInputStream
(
testCaseExcelTable
));
String
s
=
ElementAction
(
testCases
);
return
ServerResponse
.
success
(
"测试成功"
,
s
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
ServerResponse
.
error
(
"测试失败!"
+
e
.
getMessage
());
}
}
public
String
ElementAction
(
List
<
TestCase
>
steps
)
{
WebDriver
driver
=
null
;
StringBuilder
sb
=
null
;
try
{
driver
=
seleniumUtils
.
initfifox
();
Random
random
=
null
;
sb
=
new
StringBuilder
();
for
(
TestCase
step
:
steps
)
{
Thread
.
sleep
(
500
);
if
(
step
.
getAction
().
equalsIgnoreCase
(
"get"
)){
driver
.
get
(
step
.
getElement
());
sb
.
append
(
step
.
getTitle
()+
" : "
+
step
.
getElement
());
}
else
if
(
step
.
getAction
().
equalsIgnoreCase
(
"sendkeys"
)){
String
value
=
step
.
getValue
()
==
null
?
""
:
step
.
getValue
();
if
(
value
.
equalsIgnoreCase
(
"random"
)){
random
=
new
Random
();
int
i
=
random
.
nextInt
(
1000
)+
1000
;
value
=
"test"
+
i
;
}
// driver.findElement(By.xpath(step.getElement())).sendKeys(value);
WebElement
webElement
=
selectType
(
step
.
getMethod
(),
step
.
getElement
(),
driver
);
webElement
.
sendKeys
(
value
);
sb
.
append
(
step
.
getTitle
()+
": "
+
step
.
getElement
()+
" "
+
step
.
getMethod
()+
" "
+
step
.
getAction
()+
" "
+
value
+
"\n"
);
}
else
if
(
step
.
getAction
().
equalsIgnoreCase
(
"click"
)){
// driver.findElement(By.xpath(step.getElement())).click();
WebElement
webElement
=
selectType
(
step
.
getMethod
(),
step
.
getElement
(),
driver
);
webElement
.
click
();
sb
.
append
(
step
.
getTitle
()+
": "
+
step
.
getElement
()+
" "
+
step
.
getMethod
()+
" "
+
step
.
getAction
()+
"\n"
);
}
else
if
(
step
.
getAction
().
equalsIgnoreCase
(
"gettext"
)){
WebElement
webElement
=
selectType
(
step
.
getMethod
(),
step
.
getElement
(),
driver
);
if
(
"errorMsg"
.
equalsIgnoreCase
(
step
.
getElement
())){
if
(
""
.
equals
(
webElement
.
getText
())){
sb
.
append
(
"登录成功!"
+
"\n"
);
}
}
else
{
webElement
.
getText
();
sb
.
append
(
webElement
.
getText
()+
"\n"
);
}
}
else
if
(
step
.
getAction
().
equalsIgnoreCase
(
"readonly"
)){
String
value
=
step
.
getValue
()
==
null
?
""
:
step
.
getValue
();
JavascriptExecutor
removeAttribute
=
(
JavascriptExecutor
)
driver
;
//remove readonly attribute
removeAttribute
.
executeScript
(
"var setDate=document.getElementById(\""
+
step
.
getElement
()+
"\");setDate.removeAttribute('placeholder');"
);
WebElement
webElement
=
selectType
(
step
.
getMethod
(),
step
.
getElement
(),
driver
);
webElement
.
sendKeys
(
"1990-01-02"
);
sb
.
append
(
step
.
getTitle
()+
": "
+
step
.
getElement
()+
" "
+
step
.
getMethod
()+
" "
+
step
.
getAction
()+
" "
+
value
+
"\n"
);
}
else
if
(
step
.
getAction
().
equalsIgnoreCase
(
"register"
)){
String
value
=
step
.
getValue
()
==
null
?
""
:
step
.
getValue
();
if
(
value
.
equals
(
driver
.
getCurrentUrl
())){
String
text
=
driver
.
findElement
(
By
.
xpath
(
step
.
getElement
())).
getText
();
sb
.
append
(
text
+
"\n"
);
}
else
{
String
errorMsg
=
driver
.
findElement
(
By
.
id
(
"errorMsg"
)).
getText
();
sb
.
append
(
errorMsg
+
"\n"
);
}
}
}
sb
.
append
(
"测试结束"
+
"\n"
);
// writeTXT(createTxtPath,System.currentTimeMillis()+"",sb.toString());
return
sb
.
toString
();
}
catch
(
Exception
e
){
log
.
info
(
"报错了:"
+
e
.
getMessage
());
}
finally
{
if
(
driver
!=
null
){
driver
.
quit
();
driver
=
null
;
}
}
return
null
;
//目前没有用,预留返回字段
}
public
void
writeTXT
(
String
path
,
String
title
,
String
content
){
try
{
// 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw
/* 写入Txt文件 */
File
writename
=
new
File
(
path
);
// 相对路径,如果没有则要建立一个新的output。txt文件
if
(!
writename
.
exists
()){
writename
.
mkdirs
();
}
writename
=
new
File
(
path
+
"\\"
+
title
+
".txt"
);
// 相对路径,如果没有则要建立一个新的output。txt文件
writename
.
createNewFile
();
// 创建新文件
BufferedWriter
out
=
new
BufferedWriter
(
new
FileWriter
(
writename
));
out
.
write
(
content
);
// \r\n即为换行
out
.
flush
();
// 把缓存区内容压入文件
out
.
close
();
// 最后记得关闭文件
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
private
WebElement
selectType
(
String
method
,
String
element
,
WebDriver
driver
)
{
WebElement
element1
=
null
;
if
(
method
.
equalsIgnoreCase
(
"xpath"
)){
element1
=
driver
.
findElement
(
By
.
xpath
(
element
));
}
else
if
(
method
.
equalsIgnoreCase
(
"css"
)){
element1
=
driver
.
findElement
(
By
.
cssSelector
(
element
));
}
else
if
(
method
.
equalsIgnoreCase
(
"id"
)){
element1
=
driver
.
findElement
(
By
.
id
(
element
));
}
else
if
(
method
.
equalsIgnoreCase
(
"name"
)){
element1
=
driver
.
findElement
(
By
.
name
(
element
));
}
return
element1
;
}
}
src/main/java/com/zjty/adaptationmaster/utils/ExcelUtil.java
deleted
100644 → 0
浏览文件 @
6486aabe
package
com
.
zjty
.
adaptationmaster
.
utils
;
import
cn.afterturn.easypoi.excel.ExcelExportUtil
;
import
cn.afterturn.easypoi.excel.ExcelImportUtil
;
import
cn.afterturn.easypoi.excel.entity.ExportParams
;
import
cn.afterturn.easypoi.excel.entity.ImportParams
;
import
com.zjty.adaptationmaster.adaptor.entity.Reports
;
import
com.zjty.adaptationmaster.adaptor.entity.Step
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.Modifier
;
import
java.util.List
;
import
java.util.Map
;
/**
* <p>Description : selenium-test
* <p>Date : 2020/1/3 10:58
* <p>@author : C
*/
public
class
ExcelUtil
{
/**
* 解析excel文件
* @param titleRows 标题行
* @param headRows 头行
* @param pojoClass 类型
* @param inputStream 文件
* @return list
*/
public
static
<
T
>
List
<
T
>
importExcel
(
int
titleRows
,
int
headRows
,
Class
<
T
>
pojoClass
,
InputStream
inputStream
)
throws
Exception
{
ImportParams
params
=
new
ImportParams
();
params
.
setTitleRows
(
titleRows
);
params
.
setHeadRows
(
headRows
);
List
<
T
>
arrayList
;
arrayList
=
ExcelImportUtil
.
importExcel
(
inputStream
,
pojoClass
,
params
);
return
arrayList
;
}
public
static
Workbook
exportExcel
(
Reports
report
)
{
String
sheet
=
"测试报告"
;
return
ExcelExportUtil
.
exportExcel
(
new
ExportParams
(
report
.
getSystem
(),
report
.
getExplorer
(),
sheet
),
Reports
.
class
,
report
.
getSteps
());
}
public
static
void
exportExcel
(
HttpServletResponse
response
,
Reports
report
)
{
try
{
String
sheet
=
"测试报告"
;
response
.
setCharacterEncoding
(
"UTF-8"
);
response
.
setHeader
(
"content-Type"
,
"application/vnd.ms-excel"
);
response
.
setHeader
(
"Content-disposition"
,
"attachment; filename="
+
new
String
((
sheet
+
".xls"
).
getBytes
(
"gb2312"
),
"ISO-8859-1"
));
OutputStream
stream
=
response
.
getOutputStream
();
Workbook
workbook
=
ExcelExportUtil
.
exportExcel
(
new
ExportParams
(
report
.
getSystem
(),
report
.
getExplorer
(),
sheet
),
Step
.
class
,
report
.
getSteps
());
workbook
.
write
(
stream
);
stream
.
flush
();
stream
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
private
static
Object
mapToObject
(
Map
<
Object
,
Object
>
map
,
Class
<?>
beanClass
)
{
if
(
map
==
null
)
{
return
null
;
}
Object
obj
=
null
;
try
{
obj
=
beanClass
.
newInstance
();
}
catch
(
InstantiationException
|
IllegalAccessException
e
)
{
e
.
printStackTrace
();
}
Field
[]
fields
=
obj
.
getClass
().
getDeclaredFields
();
for
(
Field
field
:
fields
)
{
int
mod
=
field
.
getModifiers
();
if
(
Modifier
.
isStatic
(
mod
)
||
Modifier
.
isFinal
(
mod
))
{
continue
;
}
field
.
setAccessible
(
true
);
if
(
map
.
containsKey
(
field
.
getName
()))
{
try
{
if
(
map
.
get
(
field
.
getName
())
==
null
)
{
field
.
set
(
obj
,
""
);
}
else
{
field
.
set
(
obj
,
map
.
get
(
field
.
getName
()));
}
}
catch
(
IllegalAccessException
e
)
{
e
.
printStackTrace
();
}
}
}
return
obj
;
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论