Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
A
auto-test
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
黄承天
auto-test
Commits
f716a04c
提交
f716a04c
authored
3月 24, 2020
作者:
孙洁清
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of git.yfzx.zjtys.com.cn:hct/auto-test
上级
ed511cc3
831f5042
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
61 行增加
和
19 行删除
+61
-19
InputType.java
src/main/java/com/zjty/autotest/common/action/InputType.java
+12
-0
SeleniumExecutor.java
...java/com/zjty/autotest/service/impl/SeleniumExecutor.java
+40
-19
application.properties
src/main/resources/application.properties
+9
-0
没有找到文件。
src/main/java/com/zjty/autotest/common/action/InputType.java
0 → 100644
浏览文件 @
f716a04c
package
com
.
zjty
.
autotest
.
common
.
action
;
/**
* <p>Description : autotest
* <p>Date : 2020/3/24 15:35
* <p>@author : C
*/
public
interface
InputType
{
String
ORDER
=
"序号"
;
}
src/main/java/com/zjty/autotest/service/impl/SeleniumExecutor.java
浏览文件 @
f716a04c
...
@@ -13,6 +13,7 @@ import lombok.extern.slf4j.Slf4j;
...
@@ -13,6 +13,7 @@ import lombok.extern.slf4j.Slf4j;
import
org.openqa.selenium.*
;
import
org.openqa.selenium.*
;
import
org.openqa.selenium.support.ui.ExpectedCondition
;
import
org.openqa.selenium.support.ui.ExpectedCondition
;
import
org.openqa.selenium.support.ui.WebDriverWait
;
import
org.openqa.selenium.support.ui.WebDriverWait
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.util.*
;
import
java.util.*
;
...
@@ -29,6 +30,15 @@ import static java.util.Objects.nonNull;
...
@@ -29,6 +30,15 @@ import static java.util.Objects.nonNull;
@Service
@Service
public
class
SeleniumExecutor
{
public
class
SeleniumExecutor
{
@Value
(
"${selenium.executor.wait-after-click}"
)
private
Long
waitTime
;
@Value
(
"${selenium.executor.screenshot.url-host}"
)
private
String
screenshotPrefixHost
;
@Value
(
"${selenium.executor.screenshot.url-port}"
)
private
String
screenshotPrefixPort
;
private
WebDriver
driver
;
private
WebDriver
driver
;
private
List
<
Input
>
inputs
=
Lists
.
newArrayList
();
private
List
<
Input
>
inputs
=
Lists
.
newArrayList
();
...
@@ -110,7 +120,7 @@ public class SeleniumExecutor {
...
@@ -110,7 +120,7 @@ public class SeleniumExecutor {
if
(!
success
)
{
if
(!
success
)
{
String
screenshotName
=
alterUrlName
(
currentUrl
);
String
screenshotName
=
alterUrlName
(
currentUrl
);
screenshot
(
screenshotName
);
screenshot
(
screenshotName
);
screenshot
=
String
.
format
(
"http://
localhost:13500/screenshots/%s"
,
screenshotName
);
screenshot
=
String
.
format
(
"http://
%s:%s/screenshots/%s"
,
screenshotPrefixHost
,
screenshotPrefixPort
,
screenshotName
);
}
}
log
.
info
(
"遍历完毕..."
);
log
.
info
(
"遍历完毕..."
);
measure
=
new
Measure
(
measure
=
new
Measure
(
...
@@ -143,11 +153,13 @@ public class SeleniumExecutor {
...
@@ -143,11 +153,13 @@ public class SeleniumExecutor {
if
(
isEnabledAndDisplayed
(
element
))
{
if
(
isEnabledAndDisplayed
(
element
))
{
log
.
info
(
"操作第{}个元素 ------ text:[{}] ----- tag:[{}]"
,
elementIndex
+
1
,
element
.
getText
(),
element
.
getTagName
());
log
.
info
(
"操作第{}个元素 ------ text:[{}] ----- tag:[{}]"
,
elementIndex
+
1
,
element
.
getText
(),
element
.
getTagName
());
if
(
isEnabledInput
(
element
))
{
if
(
isEnabledInput
(
element
))
{
inputValue
(
element
,
inputs
);
Input
input
=
inputs
.
remove
(
0
);
}
else
if
(
isEnabledClick
(
element
))
{
element
.
sendKeys
(
input
.
getValue
());
element
.
click
();
}
element
.
click
();
if
(
waitTime
>
0
)
{
sleep
();
}
}
sleep
();
//一旦页面发生过跳转 通过重新打开回到原来的页面后需要重新获取元素
//一旦页面发生过跳转 通过重新打开回到原来的页面后需要重新获取元素
Boolean
pageChanged
=
checkPage
();
Boolean
pageChanged
=
checkPage
();
if
(
pageChanged
)
{
if
(
pageChanged
)
{
...
@@ -187,6 +199,8 @@ public class SeleniumExecutor {
...
@@ -187,6 +199,8 @@ public class SeleniumExecutor {
boolean
newPage
=
!
historyUrls
.
contains
(
driver
.
getCurrentUrl
());
boolean
newPage
=
!
historyUrls
.
contains
(
driver
.
getCurrentUrl
());
if
(
newPage
)
{
if
(
newPage
)
{
urlQueue
.
add
(
driver
.
getCurrentUrl
());
urlQueue
.
add
(
driver
.
getCurrentUrl
());
//去重防止重复添加
urlQueue
=
queueDuplicateRemoval
(
urlQueue
);
}
}
return
true
;
return
true
;
}
else
{
}
else
{
...
@@ -194,10 +208,18 @@ public class SeleniumExecutor {
...
@@ -194,10 +208,18 @@ public class SeleniumExecutor {
}
}
}
}
private
Queue
<
String
>
queueDuplicateRemoval
(
Queue
<
String
>
queue
)
{
HashSet
<
String
>
set
=
Sets
.
newHashSet
(
queue
);
return
Queues
.
newLinkedBlockingDeque
(
set
);
}
@SuppressWarnings
(
"unused"
)
private
String
getMainUrl
(
String
url
)
{
private
String
getMainUrl
(
String
url
)
{
return
url
.
substring
(
0
,
url
.
indexOf
(
url
));
int
end
=
url
.
indexOf
(
"?"
);
return
url
.
substring
(
0
,
end
);
}
}
@SuppressWarnings
(
"unused"
)
private
void
inputValue
(
WebElement
element
,
List
<
Input
>
inputs
)
{
private
void
inputValue
(
WebElement
element
,
List
<
Input
>
inputs
)
{
Predicate
<
Input
>
inputMatch
=
input
->
Objects
.
equals
(
element
.
getAttribute
(
input
.
getAttrName
()),
input
.
getAttrValue
());
Predicate
<
Input
>
inputMatch
=
input
->
Objects
.
equals
(
element
.
getAttribute
(
input
.
getAttrName
()),
input
.
getAttrValue
());
Optional
<
Input
>
inputOptional
=
inputs
.
stream
().
filter
(
inputMatch
).
findAny
();
Optional
<
Input
>
inputOptional
=
inputs
.
stream
().
filter
(
inputMatch
).
findAny
();
...
@@ -229,9 +251,10 @@ public class SeleniumExecutor {
...
@@ -229,9 +251,10 @@ public class SeleniumExecutor {
getAllElements
(
driver
);
getAllElements
(
driver
);
}
}
@SuppressWarnings
(
"unused"
)
private
void
sleep
()
{
private
void
sleep
()
{
try
{
try
{
Thread
.
sleep
(
2000L
);
Thread
.
sleep
(
waitTime
);
}
catch
(
InterruptedException
e
)
{
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
}
}
...
@@ -244,11 +267,14 @@ public class SeleniumExecutor {
...
@@ -244,11 +267,14 @@ public class SeleniumExecutor {
}
}
private
void
getSubElements
(
WebElement
element
)
{
private
void
getSubElements
(
WebElement
element
)
{
List
<
WebElement
>
results
=
element
.
findElements
(
By
.
xpath
(
"*"
));
try
{
if
(
results
.
isEmpty
())
{
List
<
WebElement
>
results
=
element
.
findElements
(
By
.
xpath
(
"*"
));
elements
.
add
(
element
);
if
(
results
.
isEmpty
())
{
}
else
{
elements
.
add
(
element
);
results
.
forEach
(
this
::
getSubElements
);
}
else
{
results
.
forEach
(
this
::
getSubElements
);
}
}
catch
(
StaleElementReferenceException
ignored
)
{
}
}
}
}
...
@@ -256,25 +282,20 @@ public class SeleniumExecutor {
...
@@ -256,25 +282,20 @@ public class SeleniumExecutor {
return
Objects
.
equals
(
element
.
getTagName
(),
INPUT
);
return
Objects
.
equals
(
element
.
getTagName
(),
INPUT
);
}
}
private
Boolean
isEnabledClick
(
WebElement
element
)
{
return
Objects
.
equals
(
element
.
getTagName
(),
BUTTON
)
||
Objects
.
equals
(
element
.
getTagName
(),
A
)
||
Objects
.
equals
(
element
.
getTagName
(),
SPAN
);
}
private
Boolean
isEnabledAndDisplayed
(
WebElement
element
)
{
private
Boolean
isEnabledAndDisplayed
(
WebElement
element
)
{
return
element
.
isEnabled
()
&&
element
.
isDisplayed
();
return
element
.
isEnabled
()
&&
element
.
isDisplayed
();
}
}
private
String
alterUrlName
(
String
fileName
)
{
private
String
alterUrlName
(
String
fileName
)
{
// /\?*:"<>|
// /\?*:"<>|
return
fileName
.
replace
(
"/"
,
""
)
return
fileName
.
replace
(
"/"
,
""
)
.
replace
(
"\\"
,
""
)
.
replace
(
"\\"
,
""
)
.
replace
(
"#"
,
""
)
.
replace
(
"?"
,
""
)
.
replace
(
"?"
,
""
)
.
replace
(
"*"
,
""
)
.
replace
(
"*"
,
""
)
.
replace
(
":"
,
""
)
.
replace
(
":"
,
""
)
.
replace
(
"<"
,
""
)
.
replace
(
"<"
,
""
)
.
replace
(
"."
,
""
)
.
replace
(
">"
,
""
)
.
replace
(
">"
,
""
)
.
replace
(
"|"
,
""
);
.
replace
(
"|"
,
""
);
}
}
...
...
src/main/resources/application.properties
浏览文件 @
f716a04c
...
@@ -14,3 +14,11 @@ uploadUnFile=E:/opt/auto/test/zr/
...
@@ -14,3 +14,11 @@ uploadUnFile=E:/opt/auto/test/zr/
# spring-http-\u6587\u4EF6\u4E0A\u4F20\u76F8\u5173\u914D\u7F6E
# spring-http-\u6587\u4EF6\u4E0A\u4F20\u76F8\u5173\u914D\u7F6E
spring.servlet.multipart.max-file-size
=
500MB
spring.servlet.multipart.max-file-size
=
500MB
spring.servlet.multipart.max-request-size
=
500MB
spring.servlet.multipart.max-request-size
=
500MB
# Selenium每次点击操作后的等待时间(毫秒)(0为不等待)
selenium.executor.wait-after-click
=
0
# 提供截图URL的地址前缀(ip)
selenium.executor.screenshot.url-host
=
localhost
# 提供截图URL的地址前缀(ip)
selenium.executor.screenshot.url-port
=
13500
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论