Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
A
auto-test
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
黄承天
auto-test
Commits
88787a85
提交
88787a85
authored
5月 12, 2020
作者:
黄承天
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加快速模式机制 增加操作系统自判断 SeleniumExecutor增加一个手动停止测试api
上级
87aa25c9
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
71 行增加
和
34 行删除
+71
-34
Project.java
src/main/java/com/zjty/autotest/pojo/test/Project.java
+5
-0
SeleniumExecutor.java
...java/com/zjty/autotest/service/impl/SeleniumExecutor.java
+46
-27
WebDriverUtil.java
src/main/java/com/zjty/autotest/util/WebDriverUtil.java
+20
-7
没有找到文件。
src/main/java/com/zjty/autotest/pojo/test/Project.java
浏览文件 @
88787a85
...
@@ -37,6 +37,11 @@ public class Project {
...
@@ -37,6 +37,11 @@ public class Project {
*/
*/
private
String
url
;
private
String
url
;
/**
* 是否为快速模式
*/
private
Boolean
fastmode
;
/**
/**
* 输入参数
* 输入参数
*/
*/
...
...
src/main/java/com/zjty/autotest/service/impl/SeleniumExecutor.java
浏览文件 @
88787a85
...
@@ -80,6 +80,8 @@ public class SeleniumExecutor {
...
@@ -80,6 +80,8 @@ public class SeleniumExecutor {
private
Actions
actions
;
private
Actions
actions
;
private
Boolean
isRunning
=
false
;
/**
/**
* 当前进行的窗口页
* 当前进行的窗口页
*/
*/
...
@@ -91,6 +93,7 @@ public class SeleniumExecutor {
...
@@ -91,6 +93,7 @@ public class SeleniumExecutor {
private
String
currentUrl
;
private
String
currentUrl
;
public
Report
execute
(
Project
project
)
{
public
Report
execute
(
Project
project
)
{
isRunning
=
true
;
historyUrls
.
clear
();
historyUrls
.
clear
();
urlQueue
.
clear
();
urlQueue
.
clear
();
clickElementQueue
.
clear
();
clickElementQueue
.
clear
();
...
@@ -103,14 +106,18 @@ public class SeleniumExecutor {
...
@@ -103,14 +106,18 @@ public class SeleniumExecutor {
String
os
=
Strings
.
EMPTY
;
String
os
=
Strings
.
EMPTY
;
currentUrl
=
project
.
getUrl
();
currentUrl
=
project
.
getUrl
();
currentWindow
=
driver
.
getWindowHandle
();
currentWindow
=
driver
.
getWindowHandle
();
while
(
nonNull
(
currentUrl
))
{
try
{
Measure
measure
=
testUrl
(
currentUrl
);
while
(
nonNull
(
currentUrl
))
{
if
(
nonNull
(
measure
))
{
Measure
measure
=
testUrl
(
currentUrl
);
measures
.
add
(
measure
);
if
(
nonNull
(
measure
))
{
measures
.
add
(
measure
);
}
currentUrl
=
urlQueue
.
poll
();
}
}
currentUrl
=
urlQueue
.
poll
();
driver
.
quit
();
}
catch
(
Exception
e
)
{
log
.
error
(
"发生预料外的异常.测试结束:"
+
e
);
}
}
driver
.
quit
();
return
new
Report
(
return
new
Report
(
null
,
null
,
project
.
getId
(),
project
.
getId
(),
...
@@ -121,6 +128,10 @@ public class SeleniumExecutor {
...
@@ -121,6 +128,10 @@ public class SeleniumExecutor {
);
);
}
}
public
void
quit
()
{
isRunning
=
false
;
}
private
Measure
testUrl
(
String
currentUrl
)
{
private
Measure
testUrl
(
String
currentUrl
)
{
Measure
measure
=
new
Measure
();
Measure
measure
=
new
Measure
();
measure
.
setUrl
(
currentUrl
);
measure
.
setUrl
(
currentUrl
);
...
@@ -186,32 +197,41 @@ public class SeleniumExecutor {
...
@@ -186,32 +197,41 @@ public class SeleniumExecutor {
private
List
<
ElementDetail
>
traversal
()
{
private
List
<
ElementDetail
>
traversal
()
{
List
<
ElementDetail
>
elementDetails
=
Lists
.
newArrayList
();
List
<
ElementDetail
>
elementDetails
=
Lists
.
newArrayList
();
while
(!
inputElementQueue
.
isEmpty
())
{
while
(!
inputElementQueue
.
isEmpty
())
{
ElementEntry
elementEntry
=
inputElementQueue
.
poll
();
if
(
isRunning
)
{
ElementFeature
feature
=
elementEntry
.
getFeature
();
ElementEntry
elementEntry
=
inputElementQueue
.
poll
();
if
(!
currentHistoryFeatures
.
contains
(
feature
))
{
ElementFeature
feature
=
elementEntry
.
getFeature
();
ElementDetail
elementDetail
=
actInput
(
elementEntry
);
if
(!
currentHistoryFeatures
.
contains
(
feature
))
{
if
(!
isSkipped
(
elementDetail
))
{
ElementDetail
elementDetail
=
actInput
(
elementEntry
);
elementDetails
.
add
(
elementDetail
);
}
}
}
while
(!
clickElementQueue
.
isEmpty
())
{
ElementEntry
elementEntry
=
clickElementQueue
.
poll
();
ElementFeature
feature
=
elementEntry
.
getFeature
();
if
(
fastMode
)
{
if
(!
totalHistoryFeatures
.
contains
(
feature
.
getText
())){
ElementDetail
elementDetail
=
actClick
(
elementEntry
);
if
(!
isSkipped
(
elementDetail
))
{
if
(!
isSkipped
(
elementDetail
))
{
elementDetails
.
add
(
elementDetail
);
elementDetails
.
add
(
elementDetail
);
}
}
}
}
}
else
{
}
else
{
if
(!
currentHistoryFeatures
.
contains
(
feature
))
{
break
;
ElementDetail
elementDetail
=
actClick
(
elementEntry
);
}
if
(!
isSkipped
(
elementDetail
))
{
}
elementDetails
.
add
(
elementDetail
);
while
(!
clickElementQueue
.
isEmpty
())
{
if
(
isRunning
)
{
ElementEntry
elementEntry
=
clickElementQueue
.
poll
();
ElementFeature
feature
=
elementEntry
.
getFeature
();
if
(
fastMode
)
{
if
(!
totalHistoryFeatures
.
contains
(
feature
.
getText
()))
{
ElementDetail
elementDetail
=
actClick
(
elementEntry
);
if
(!
isSkipped
(
elementDetail
))
{
elementDetails
.
add
(
elementDetail
);
}
}
}
else
{
if
(!
currentHistoryFeatures
.
contains
(
feature
))
{
ElementDetail
elementDetail
=
actClick
(
elementEntry
);
if
(!
isSkipped
(
elementDetail
))
{
elementDetails
.
add
(
elementDetail
);
}
}
}
}
}
}
else
{
log
.
info
(
"测试已主动关闭..."
);
break
;
}
}
}
}
return
elementDetails
;
return
elementDetails
;
...
@@ -233,10 +253,9 @@ public class SeleniumExecutor {
...
@@ -233,10 +253,9 @@ public class SeleniumExecutor {
long
startTime
=
System
.
currentTimeMillis
();
long
startTime
=
System
.
currentTimeMillis
();
log
.
info
(
"input操作"
);
log
.
info
(
"input操作"
);
if
(!
inputs
.
isEmpty
())
{
if
(!
inputs
.
isEmpty
())
{
Input
input
=
inputs
.
get
(
0
);
Input
input
=
inputs
.
remove
(
0
);
element
.
sendKeys
(
input
.
getValue
());
element
.
sendKeys
(
input
.
getValue
());
element
.
submit
();
element
.
submit
();
inputs
.
remove
(
0
);
}
}
success
=
true
;
success
=
true
;
long
endTime
=
System
.
currentTimeMillis
();
long
endTime
=
System
.
currentTimeMillis
();
...
...
src/main/java/com/zjty/autotest/util/WebDriverUtil.java
浏览文件 @
88787a85
...
@@ -6,6 +6,9 @@ import org.openqa.selenium.chrome.ChromeDriver;
...
@@ -6,6 +6,9 @@ import org.openqa.selenium.chrome.ChromeDriver;
import
org.openqa.selenium.chrome.ChromeOptions
;
import
org.openqa.selenium.chrome.ChromeOptions
;
import
org.openqa.selenium.firefox.FirefoxDriver
;
import
org.openqa.selenium.firefox.FirefoxDriver
;
import
org.openqa.selenium.ie.InternetExplorerDriver
;
import
org.openqa.selenium.ie.InternetExplorerDriver
;
import
org.openqa.selenium.logging.LogType
;
import
org.openqa.selenium.logging.LoggingPreferences
;
import
org.openqa.selenium.remote.CapabilityType
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
...
@@ -13,31 +16,41 @@ import java.io.File;
...
@@ -13,31 +16,41 @@ import java.io.File;
import
java.text.SimpleDateFormat
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.Objects
;
import
java.util.Objects
;
import
java.util.logging.Level
;
public
class
WebDriverUtil
{
public
class
WebDriverUtil
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
WebDriverUtil
.
class
);
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
WebDriverUtil
.
class
);
/* 公共的 */
public
final
static
String
CHROME_EXE
=
System
.
getProperty
(
"user.dir"
)+
File
.
separator
+
"chromedriver"
;
public
final
static
String
FIRE_FOX_EXE
=
"/opt/hct"
+
File
.
separator
+
"geckodriver"
;
private
static
final
String
WINDOWS
=
"Windows"
;
/* 公共的 */
public
final
static
String
CHROME
=
System
.
getProperty
(
"user.dir"
)
+
File
.
separator
+
"chromedriver"
;
public
final
static
String
IE_EXE
=
System
.
getProperty
(
"user.dir"
)
+
File
.
separator
+
"IEDriverServer.exe
"
;
public
final
static
String
FIRE_FOX
=
System
.
getProperty
(
"user.dir"
)
+
File
.
separator
+
"geckodriver
"
;
public
final
static
String
IE
=
System
.
getProperty
(
"user.dir"
)
+
File
.
separator
+
"IEDriverServer"
;
public
static
WebDriver
getWebDriver
(
String
browser
)
{
public
static
WebDriver
getWebDriver
(
String
browser
)
{
String
end
=
""
;
String
os
=
System
.
getProperty
(
"os.name"
);
if
(
os
.
contains
(
WINDOWS
)){
end
=
".exe"
;
}
if
(
Objects
.
equals
(
browser
.
toLowerCase
(),
Browser
.
FIREFOX
))
{
if
(
Objects
.
equals
(
browser
.
toLowerCase
(),
Browser
.
FIREFOX
))
{
System
.
setProperty
(
"webdriver.firefox.driver"
,
WebDriverUtil
.
FIRE_FOX
_EXE
);
System
.
setProperty
(
"webdriver.firefox.driver"
,
WebDriverUtil
.
FIRE_FOX
+
end
);
return
new
FirefoxDriver
();
return
new
FirefoxDriver
();
}
else
if
(
Objects
.
equals
(
browser
.
toLowerCase
(),
Browser
.
CHROME
))
{
}
else
if
(
Objects
.
equals
(
browser
.
toLowerCase
(),
Browser
.
CHROME
))
{
System
.
setProperty
(
"webdriver.chrome.driver"
,
WebDriverUtil
.
CHROME
_EXE
);
System
.
setProperty
(
"webdriver.chrome.driver"
,
WebDriverUtil
.
CHROME
+
end
);
ChromeOptions
options
=
new
ChromeOptions
();
ChromeOptions
options
=
new
ChromeOptions
();
LoggingPreferences
logPrefs
=
new
LoggingPreferences
();
logPrefs
.
enable
(
LogType
.
BROWSER
,
Level
.
ALL
);
options
.
setCapability
(
CapabilityType
.
LOGGING_PREFS
,
logPrefs
);
options
.
addArguments
(
"–headless"
);
options
.
addArguments
(
"–headless"
);
options
.
addArguments
(
"–disable-gpu"
);
options
.
addArguments
(
"–disable-gpu"
);
options
.
addArguments
(
"–no-sandbox"
);
options
.
addArguments
(
"–no-sandbox"
);
return
new
ChromeDriver
(
options
);
return
new
ChromeDriver
(
options
);
}
else
if
(
Objects
.
equals
(
browser
.
toLowerCase
(),
Browser
.
IE
))
{
}
else
if
(
Objects
.
equals
(
browser
.
toLowerCase
(),
Browser
.
IE
))
{
System
.
setProperty
(
"webdriver.ie.driver"
,
WebDriverUtil
.
IE
_EXE
);
System
.
setProperty
(
"webdriver.ie.driver"
,
WebDriverUtil
.
IE
+
end
);
return
new
InternetExplorerDriver
();
return
new
InternetExplorerDriver
();
}
else
{
}
else
{
throw
new
RuntimeException
(
"该浏览器不存在:"
+
browser
);
throw
new
RuntimeException
(
"该浏览器不存在:"
+
browser
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论