Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
A
auto-test-case
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
黄承天
auto-test-case
Commits
2142b055
提交
2142b055
authored
1月 06, 2021
作者:
黄承天
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[feature]
耗费时间的计算机制改变 统计数据细化
上级
558c48c2
显示空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
107 行增加
和
49 行删除
+107
-49
TargetType.java
...main/java/com/zjty/autotest/common/action/TargetType.java
+2
-0
Statistics.java
src/main/java/com/zjty/autotest/pojo/vo/Statistics.java
+13
-4
ReportService.java
src/main/java/com/zjty/autotest/service/ReportService.java
+43
-6
SeleniumExecutor.java
...main/java/com/zjty/autotest/service/SeleniumExecutor.java
+49
-39
没有找到文件。
src/main/java/com/zjty/autotest/common/action/TargetType.java
浏览文件 @
2142b055
...
...
@@ -10,6 +10,8 @@ public interface TargetType {
String
LINK_TEXT
=
"linkText"
;
String
XPATH_HREF
=
"xpath:href"
;
String
XPATH_POSITION
=
"xpath:position"
;
String
XPATH_ID_RELATIVE
=
"xpath:idRelative"
;
...
...
src/main/java/com/zjty/autotest/pojo/vo/Statistics.java
浏览文件 @
2142b055
...
...
@@ -28,13 +28,22 @@ public class Statistics {
@ApiModelProperty
(
value
=
"步骤平均耗费时间"
,
example
=
"100"
,
position
=
6
)
private
Long
averageCostTime
;
@ApiModelProperty
(
value
=
"耗费时间小于2的步骤数"
,
example
=
"80"
,
position
=
7
)
private
Integer
littleThan2s
;
@ApiModelProperty
(
value
=
"耗费时间小于1的步骤数"
,
example
=
"80"
,
position
=
7
)
private
Integer
littleThan1s
;
@ApiModelProperty
(
value
=
"耗费时间在1到2之间的步骤数"
,
example
=
"10"
,
position
=
8
)
private
Integer
between1sAnd2s
;
@ApiModelProperty
(
value
=
"耗费时间在2到3之间的步骤数"
,
example
=
"10"
,
position
=
8
)
private
Integer
between2sAnd3s
;
@ApiModelProperty
(
value
=
"耗费时间大于3的步骤数"
,
example
=
"10"
,
position
=
9
)
private
Integer
greaterThan3s
;
@ApiModelProperty
(
value
=
"耗费时间在3到4之间的步骤数"
,
example
=
"10"
,
position
=
8
)
private
Integer
between3sAnd4s
;
@ApiModelProperty
(
value
=
"耗费时间在4到5之间的步骤数"
,
example
=
"10"
,
position
=
8
)
private
Integer
between4sAnd5s
;
@ApiModelProperty
(
value
=
"耗费时间大于5的步骤数"
,
example
=
"10"
,
position
=
9
)
private
Integer
greaterThan5s
;
}
src/main/java/com/zjty/autotest/service/ReportService.java
浏览文件 @
2142b055
...
...
@@ -18,6 +18,7 @@ import java.util.stream.Collectors;
import
static
java
.
lang
.
String
.
format
;
@SuppressWarnings
(
"Duplicates"
)
@Service
public
class
ReportService
{
...
...
@@ -110,12 +111,24 @@ public class ReportService {
.
map
(
this
::
getLittlerThan1s
)
.
reduce
(
Integer:
:
sum
)
.
orElse
(-
1
);
Integer
between1sAnd2s
=
reports
.
stream
()
.
map
(
this
::
getBetween1sAnd2s
)
.
reduce
(
Integer:
:
sum
)
.
orElse
(-
1
);
Integer
between2sAnd3s
=
reports
.
stream
()
.
map
(
this
::
getBetween2sAnd3s
)
.
reduce
(
Integer:
:
sum
)
.
orElse
(-
1
);
Integer
greaterThan3s
=
reports
.
stream
()
.
map
(
this
::
getGreaterThan3s
)
Integer
between3sAnd4s
=
reports
.
stream
()
.
map
(
this
::
getBetween3sAnd4s
)
.
reduce
(
Integer:
:
sum
)
.
orElse
(-
1
);
Integer
between4sAnd5s
=
reports
.
stream
()
.
map
(
this
::
getBetween4sAnd5s
)
.
reduce
(
Integer:
:
sum
)
.
orElse
(-
1
);
Integer
greaterThan5s
=
reports
.
stream
()
.
map
(
this
::
getGreaterThan5s
)
.
reduce
(
Integer:
:
sum
)
.
orElse
(-
1
);
return
new
Statistics
(
...
...
@@ -126,8 +139,11 @@ public class ReportService {
failures
,
averageCostTime
,
litterThan1s
,
between1sAnd2s
,
between2sAnd3s
,
greaterThan3s
between3sAnd4s
,
between4sAnd5s
,
greaterThan5s
);
}
...
...
@@ -138,16 +154,37 @@ public class ReportService {
return
Math
.
toIntExact
(
count
);
}
private
Integer
getBetween1sAnd2s
(
ReportVo
report
)
{
long
count
=
report
.
getSteps
().
stream
()
.
filter
(
step
->
step
.
getCostTime
()
>=
1000
&&
step
.
getCostTime
()
<
2000
)
.
count
();
return
Math
.
toIntExact
(
count
);
}
private
Integer
getBetween2sAnd3s
(
ReportVo
report
)
{
long
count
=
report
.
getSteps
().
stream
()
.
filter
(
step
->
step
.
getCostTime
()
>=
2000
&&
step
.
getCostTime
()
<=
3000
)
.
filter
(
step
->
step
.
getCostTime
()
>=
2000
&&
step
.
getCostTime
()
<
3000
)
.
count
();
return
Math
.
toIntExact
(
count
);
}
private
Integer
getBetween3sAnd4s
(
ReportVo
report
)
{
long
count
=
report
.
getSteps
().
stream
()
.
filter
(
step
->
step
.
getCostTime
()
>=
3000
&&
step
.
getCostTime
()
<
4000
)
.
count
();
return
Math
.
toIntExact
(
count
);
}
private
Integer
getBetween4sAnd5s
(
ReportVo
report
)
{
long
count
=
report
.
getSteps
().
stream
()
.
filter
(
step
->
step
.
getCostTime
()
>=
4000
&&
step
.
getCostTime
()
<
5000
)
.
count
();
return
Math
.
toIntExact
(
count
);
}
private
Integer
getGreaterThan
3
s
(
ReportVo
report
)
{
private
Integer
getGreaterThan
5
s
(
ReportVo
report
)
{
long
count
=
report
.
getSteps
().
stream
()
.
filter
(
step
->
step
.
getCostTime
()
>
3
000
)
.
filter
(
step
->
step
.
getCostTime
()
>
=
5
000
)
.
count
();
return
Math
.
toIntExact
(
count
);
}
...
...
src/main/java/com/zjty/autotest/service/SeleniumExecutor.java
浏览文件 @
2142b055
...
...
@@ -15,7 +15,9 @@ import lombok.extern.slf4j.Slf4j;
import
org.apache.logging.log4j.util.Strings
;
import
org.openqa.selenium.*
;
import
org.openqa.selenium.interactions.Actions
;
import
org.openqa.selenium.support.ui.ExpectedConditions
;
import
org.openqa.selenium.support.ui.Select
;
import
org.openqa.selenium.support.ui.WebDriverWait
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -76,6 +78,8 @@ public class SeleniumExecutor {
private
Integer
total
=
0
;
private
long
stepStartTime
=
System
.
currentTimeMillis
();
private
List
<
Step
>
steps
=
Lists
.
newArrayList
();
/**
...
...
@@ -109,6 +113,7 @@ public class SeleniumExecutor {
//默认选择 非静默模式
driver
=
WebDriverUtil
.
getWebDriver
(
browser
,
false
);
}
stepStartTime
=
System
.
currentTimeMillis
();
for
(
Command
command
:
commands
)
{
Step
step
=
actCommand
(
command
);
if
(
nonNull
(
step
))
{
...
...
@@ -141,7 +146,7 @@ public class SeleniumExecutor {
if
(
nonNull
(
params
))
{
driver
.
manage
().
deleteAllCookies
();
for
(
Param
param
:
params
)
{
if
(
Strings
.
isNotBlank
(
param
.
getName
())
&&
Strings
.
isNotBlank
(
param
.
getValue
()))
{
if
(
Strings
.
isNotBlank
(
param
.
getName
())
&&
Strings
.
isNotBlank
(
param
.
getValue
()))
{
switch
(
param
.
getType
())
{
case
COOKIES:
driver
.
manage
().
addCookie
(
new
Cookie
(
param
.
getName
(),
param
.
getValue
()));
...
...
@@ -171,8 +176,7 @@ public class SeleniumExecutor {
String
content
=
null
;
String
message
=
null
;
String
screenShot
=
null
;
long
costTime
;
long
stepStartTime
=
System
.
currentTimeMillis
();
long
costTime
=
-
1L
;
boolean
success
;
try
{
//根据操作类型模拟浏览器操作 并判断错误
...
...
@@ -220,7 +224,6 @@ public class SeleniumExecutor {
}
}
else
{
message
=
format
(
"未知句柄:[%s]"
,
handleName
);
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
success
=
false
;
}
break
;
...
...
@@ -241,23 +244,23 @@ public class SeleniumExecutor {
if
(
isNull
(
element
))
{
element
=
getElement
(
targets
);
}
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
if
(
nonNull
(
element
))
{
//如果该点击打开了新标签页 则通过对比当前与历史找出新的标签页句柄并存入Map
boolean
newWindow
=
nonNull
(
command
.
getOpensWindow
())
&&
command
.
getOpensWindow
();
if
(
newWindow
)
{
seleniumHelper
.
setHistoryHandles
(
driver
.
getWindowHandles
());
}
JavascriptExecutor
jse
=
(
JavascriptExecutor
)
driver
;
jse
.
executeScript
(
"arguments[0].scrollIntoView(true);"
,
element
);
seleniumHelper
.
waitSomeTime
();
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
movetoElement
(
element
);
new
Actions
(
driver
).
click
(
element
).
perform
();
stepStartTime
=
System
.
currentTimeMillis
();
success
=
true
;
if
(
newWindow
)
{
seleniumHelper
.
getHandleMap
().
put
(
command
.
getWindowHandleName
(),
getWindowHandle
());
}
}
else
{
message
=
"无法定位该元素"
;
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
costTime
=
-
1L
;
success
=
false
;
}
break
;
...
...
@@ -267,22 +270,21 @@ public class SeleniumExecutor {
if
(
isNull
(
element
))
{
element
=
getElement
(
targets
);
}
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
if
(
nonNull
(
element
))
{
//如果该双击打开了新标签页 则通过对比当前与历史找出新的标签页句柄并存入Map
boolean
newWindow
=
nonNull
(
command
.
getOpensWindow
())
&&
command
.
getOpensWindow
();
if
(
newWindow
)
{
seleniumHelper
.
setHistoryHandles
(
driver
.
getWindowHandles
());
}
new
Actions
(
driver
).
moveToElement
(
element
).
doubleClick
().
perform
();
seleniumHelper
.
waitSomeTime
();
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
movetoElement
(
element
);
new
Actions
(
driver
).
doubleClick
(
element
).
perform
();
success
=
true
;
if
(
newWindow
)
{
seleniumHelper
.
getHandleMap
().
put
(
command
.
getWindowHandleName
(),
getWindowHandle
());
}
}
else
{
message
=
"无法定位该元素"
;
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
success
=
false
;
}
break
;
...
...
@@ -292,13 +294,14 @@ public class SeleniumExecutor {
if
(
isNull
(
element
))
{
element
=
getElement
(
targets
);
}
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
if
(
nonNull
(
element
))
{
boolean
newWindow
=
nonNull
(
command
.
getOpensWindow
())
&&
command
.
getOpensWindow
();
if
(
newWindow
)
{
seleniumHelper
.
setHistoryHandles
(
driver
.
getWindowHandles
());
}
new
Actions
(
driver
).
moveToElement
(
element
).
clickAndHold
().
perform
(
);
seleniumHelper
.
waitSomeTime
();
movetoElement
(
element
);
new
Actions
(
driver
).
clickAndHold
(
element
).
perform
();
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
success
=
true
;
if
(
newWindow
)
{
...
...
@@ -306,7 +309,6 @@ public class SeleniumExecutor {
}
}
else
{
message
=
"无法定位该元素"
;
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
success
=
false
;
}
break
;
...
...
@@ -316,20 +318,19 @@ public class SeleniumExecutor {
if
(
isNull
(
element
))
{
element
=
getElement
(
targets
);
}
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
if
(
nonNull
(
element
))
{
boolean
newWindow
=
nonNull
(
command
.
getOpensWindow
())
&&
command
.
getOpensWindow
();
if
(
newWindow
)
{
seleniumHelper
.
setHistoryHandles
(
driver
.
getWindowHandles
());
}
new
Actions
(
driver
).
moveToElement
(
element
).
perform
();
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
movetoElement
(
element
);
success
=
true
;
if
(
newWindow
)
{
seleniumHelper
.
getHandleMap
().
put
(
command
.
getWindowHandleName
(),
getWindowHandle
());
}
}
else
{
message
=
"无法定位该元素"
;
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
success
=
false
;
}
break
;
...
...
@@ -339,21 +340,20 @@ public class SeleniumExecutor {
if
(
isNull
(
element
))
{
element
=
getElement
(
targets
);
}
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
if
(
nonNull
(
element
))
{
boolean
newWindow
=
nonNull
(
command
.
getOpensWindow
())
&&
command
.
getOpensWindow
();
if
(
newWindow
)
{
seleniumHelper
.
setHistoryHandles
(
driver
.
getWindowHandles
());
}
new
Actions
(
driver
).
moveToElement
(
element
).
release
().
perform
();
seleniumHelper
.
waitSomeTime
();
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
movetoElement
(
element
);
new
Actions
(
driver
).
release
(
element
).
perform
();
success
=
true
;
if
(
newWindow
)
{
seleniumHelper
.
getHandleMap
().
put
(
command
.
getWindowHandleName
(),
getWindowHandle
());
}
}
else
{
message
=
"无法定位该元素"
;
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
success
=
false
;
}
break
;
...
...
@@ -361,34 +361,30 @@ public class SeleniumExecutor {
String
label
=
seleniumHelper
.
getValue
(
value
);
content
=
format
(
"下拉框选择:[%s]"
,
label
);
element
=
locateElement
(
target
);
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
if
(
nonNull
(
element
))
{
// WebElement select = element.findElement(By.xpath(format("//option[. = '%s']", label)));
// select.click();
movetoElement
(
element
);
Select
select
=
new
Select
(
element
);
select
.
selectByVisibleText
(
label
);
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
success
=
true
;
seleniumHelper
.
waitSomeTime
();
}
else
{
message
=
"无法定位该元素"
;
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
success
=
false
;
}
break
;
case
MOUSE_OVER:
content
=
format
(
"鼠标悬停:[%s]"
,
target
);
element
=
locateElement
(
target
);
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
if
(
isNull
(
element
))
{
element
=
getElement
(
targets
);
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
}
if
(
nonNull
(
element
))
{
new
Actions
(
driver
).
moveToElement
(
element
).
perform
();
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
success
=
true
;
seleniumHelper
.
waitSomeTime
();
}
else
{
message
=
"无法定位该元素"
;
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
success
=
false
;
}
break
;
...
...
@@ -398,23 +394,21 @@ public class SeleniumExecutor {
if
(
isNull
(
element
))
{
element
=
getElement
(
targets
);
}
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
if
(
nonNull
(
element
))
{
String
elementType
=
element
.
getAttribute
(
"type"
);
if
(!
Objects
.
equals
(
elementType
,
"file"
))
{
element
.
clear
();
element
.
sendKeys
(
value
);
}
else
{
JavascriptExecutor
driver_js
=
((
JavascriptExecutor
)
driver
);
driver_js
.
executeScript
(
"arguments[0].style.display='block';"
,
element
);
}
else
{
JavascriptExecutor
driver_js
=
((
JavascriptExecutor
)
driver
);
driver_js
.
executeScript
(
"arguments[0].style.display='block';"
,
element
);
element
.
sendKeys
(
value
);
driver_js
.
executeScript
(
"arguments[0].style.display='none';"
,
element
);
driver_js
.
executeScript
(
"arguments[0].style.display='none';"
,
element
);
}
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
success
=
true
;
seleniumHelper
.
waitSomeTime
();
}
else
{
message
=
"无法定位该元素"
;
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
success
=
false
;
}
break
;
...
...
@@ -436,9 +430,9 @@ public class SeleniumExecutor {
log
.
error
(
e
.
getLocalizedMessage
());
Arrays
.
stream
(
e
.
getStackTrace
()).
forEach
(
System
.
out
::
println
);
message
=
e
.
getLocalizedMessage
();
costTime
=
System
.
currentTimeMillis
()
-
stepStartTime
;
success
=
false
;
}
stepStartTime
=
System
.
currentTimeMillis
();
if
(
nonNull
(
content
))
{
log
.
info
(
content
);
}
else
{
...
...
@@ -461,6 +455,11 @@ public class SeleniumExecutor {
}
}
private
void
movetoElement
(
WebElement
element
)
{
JavascriptExecutor
jse
=
(
JavascriptExecutor
)
driver
;
jse
.
executeScript
(
"arguments[0].scrollIntoView(true);"
,
element
);
}
/**
* 根据一组target数据定位元素
* 只要其中一对定位到
...
...
@@ -488,18 +487,25 @@ public class SeleniumExecutor {
String
content
=
target
.
get
(
0
);
String
value
=
getValue
(
content
);
try
{
WebDriverWait
webDriverWait
=
new
WebDriverWait
(
driver
,
3
);
switch
(
type
)
{
case
CSS:
webDriverWait
.
until
(
webDriver
->
nonNull
(
ExpectedConditions
.
visibilityOfElementLocated
(
By
.
cssSelector
(
value
)).
apply
(
webDriver
)));
return
driver
.
findElement
(
By
.
cssSelector
(
value
));
case
ID:
webDriverWait
.
until
(
webDriver
->
nonNull
(
ExpectedConditions
.
visibilityOfElementLocated
(
By
.
id
(
value
)).
apply
(
webDriver
)));
return
driver
.
findElement
(
By
.
id
(
value
));
case
NAME:
webDriverWait
.
until
(
webDriver
->
nonNull
(
ExpectedConditions
.
visibilityOfElementLocated
(
By
.
name
(
value
)).
apply
(
webDriver
)));
return
driver
.
findElement
(
By
.
name
(
value
));
case
LINK_TEXT:
webDriverWait
.
until
(
webDriver
->
nonNull
(
ExpectedConditions
.
visibilityOfElementLocated
(
By
.
linkText
(
value
)).
apply
(
webDriver
)));
return
driver
.
findElement
(
By
.
linkText
(
value
));
case
XPATH_HREF:
case
XPATH_ID_RELATIVE:
case
XPATH_POSITION:
case
XPATH_INNER_TEXT:
webDriverWait
.
until
(
webDriver
->
nonNull
(
ExpectedConditions
.
visibilityOfElementLocated
(
By
.
xpath
(
value
)).
apply
(
webDriver
)));
return
driver
.
findElement
(
By
.
xpath
(
value
));
default
:
}
...
...
@@ -514,12 +520,16 @@ public class SeleniumExecutor {
String
type
=
type_value
[
0
];
String
value
=
type_value
[
1
];
try
{
WebDriverWait
webDriverWait
=
new
WebDriverWait
(
driver
,
3
);
switch
(
type
)
{
case
"name"
:
webDriverWait
.
until
(
webDriver
->
nonNull
(
ExpectedConditions
.
visibilityOfElementLocated
(
By
.
name
(
value
)).
apply
(
webDriver
)));
return
driver
.
findElement
(
By
.
name
(
value
));
case
"css"
:
webDriverWait
.
until
(
webDriver
->
nonNull
(
ExpectedConditions
.
visibilityOfElementLocated
(
By
.
cssSelector
(
value
)).
apply
(
webDriver
)));
return
driver
.
findElement
(
By
.
cssSelector
(
value
));
case
"id"
:
webDriverWait
.
until
(
webDriver
->
nonNull
(
ExpectedConditions
.
visibilityOfElementLocated
(
By
.
id
(
value
)).
apply
(
webDriver
)));
return
driver
.
findElement
(
By
.
id
(
value
));
default
:
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论