Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
test
autotest-airtest-web-sc-airtest
Commits
05cafa5e
Commit
05cafa5e
authored
Nov 15, 2023
by
齐 振鋆
Browse files
手术请领单维护
parent
fc81126b
Changes
12
Hide whitespace changes
Inline
Side-by-side
cases/UI/GuKeYiTiHua/envConfig.yaml
View file @
05cafa5e
dbinfo
:
'
DB_HOST'
:
'
10.17.65.215'
'
DB_PORT'
:
3306
'
DB_USER'
:
'
aws
'
'
DB_PASSWD'
:
'
admins
'
'
DB_NAME'
:
'
aws'
userinfo
:
# 登录用户信息
username
:
'
qizhenjun
'
'
DB_USER'
:
'
sctest
'
'
DB_PASSWD'
:
'
Cmic2022@
'
'
DB_NAME'
:
'
aws
uat
'
userinfo
:
# 登录用户信息
username
:
'
bj_01
'
password
:
'
Gyxc1234'
verificationCode
:
0
# 验证码识别:1开启|0关闭
minNum
:
2
\ No newline at end of file
cases/UI/GuKeYiTiHua/surgery/test_surgery_follow.py
View file @
05cafa5e
...
...
@@ -2,13 +2,13 @@
# 作者:齐振鋆
# 日期:2023/2/15
# 描述:
import
os
import
pytest
import
allure
import
logging
import
os
from
datetime
import
datetime
import
allure
import
pytest
from
ddt
import
ddt
,
file_data
from
datetime
import
datetime
from
cases.UI.GuKeYiTiHua
import
PROJECTNAME
from
component.GuKeYiTiHua.StorageManage.StorageIn.warehouse_accept
import
WarehouseVerify
...
...
@@ -25,7 +25,6 @@ from component.GuKeYiTiHua.SurgeryFollow.SurgeryLend.orthopedic_lend import Orth
from
component.GuKeYiTiHua.SurgeryFollow.SurgeryLend.out_ledger
import
OutLedger
from
component.GuKeYiTiHua.SurgeryFollow.SurgeryLend.surgery_distribute
import
SurgeryDistribute
from
component.GuKeYiTiHua.SurgeryFollow.SurgeryLend.surgery_require
import
SurgeryRequire
from
page.GuKeYiTiHua.DBQuery.db_query
import
DBQuery
from
page.GuKeYiTiHua.Public.common
import
CommonElement
from
unit.public.DataDic
import
DataDic
...
...
@@ -67,8 +66,8 @@ class TestSurgeryFollow(object):
@
allure
.
description
(
'测试时间:{}'
.
format
(
datetime
.
now
()))
@
pytest
.
mark
.
surgery
@
pytest
.
mark
.
run
(
order
=
10
)
#
@file_data('{}/data/{}TestData.yaml'.format(os.getcwd(), dd.get_value('module')))
@
file_data
(
dd
.
get_value
(
'test_data_file'
))
@
file_data
(
'{}/data/{}TestData.yaml'
.
format
(
os
.
getcwd
(),
dd
.
get_value
(
'module'
)))
#
@file_data(dd.get_value('test_data_file'))
def
test_surgery_normal
(
self
,
**
kwargs
):
with
allure
.
step
(
'测试数据准备...'
):
log
.
info
(
kwargs
)
...
...
@@ -91,7 +90,7 @@ class TestSurgeryFollow(object):
self
.
sd
.
surgery_distribute_search
(
tap_name
=
'已办'
,
order_code
=
ql_code
)
self
.
common
.
close_tap
()
with
allure
.
step
(
'
骨科仓
借出单'
):
with
allure
.
step
(
'
手术
借出单'
):
self
.
ol
.
orthopedic_lend_menu_open
()
if
process_type
==
1
:
self
.
ol
.
orthopedic_lend_search
(
ot
=
'QL'
,
order_code
=
ql_code
)
...
...
cases/UI/conftest.py
View file @
05cafa5e
...
...
@@ -7,7 +7,6 @@ import os
import
pytest
from
selenium
import
webdriver
from
webdriver_manager.chrome
import
ChromeDriverManager
from
unit.public.DBUnit
import
MysqlDataBase
from
unit.public.DataDic
import
DataDic
...
...
@@ -36,13 +35,19 @@ def init_browser(pytestconfig):
# chrome_options.add_argument('--disable-gpu') # 禁用GPU加速
# chrome_options.add_argument('–disable-software-rasterizer')
# chrome_options.add_argument('--disable-extensions')
# driver = webdriver.Chrome(executable_path=os.path.join(dd.get_value('root_path'), 'driver', 'chromedriver.exe')) if test_host == 'localhost' else webdriver.Remote(command_executor='http://{}:5555/wd/hub'.format(test_host), options=chrome_options)
driver
=
webdriver
.
Chrome
(
ChromeDriverManager
().
install
())
if
client
==
'localhost'
else
webdriver
.
Remote
(
command_executor
=
'http://{}:5555/wd/hub'
.
format
(
client
),
options
=
chrome_options
)
driver
=
webdriver
.
Chrome
(
executable_path
=
os
.
path
.
join
(
dd
.
get_value
(
'root_path'
),
'driver'
,
'chromedriver.exe'
))
if
client
==
'localhost'
else
webdriver
.
Remote
(
command_executor
=
'http://{}:5555/wd/hub'
.
format
(
client
),
options
=
chrome_options
)
# driver = webdriver.Chrome(
# ChromeDriverManager(path=r'.\\driver').install()) if client == 'localhost' else webdriver.Remote(
# command_executor='http://{}:5555/wd/hub'.format(client), options=chrome_options)
dd
.
set_value
(
'driver'
,
driver
)
driver
.
maximize_window
()
log
.
info
(
'读取项目配置文件......'
)
project_conf_path
=
os
.
path
.
join
(
dd
.
get_value
(
'root_path'
),
'cases'
,
'UI'
,
dd
.
get_value
(
'project'
),
'envConfig.yaml'
)
project_conf_path
=
os
.
path
.
join
(
dd
.
get_value
(
'root_path'
),
'cases'
,
'UI'
,
dd
.
get_value
(
'project'
),
'envConfig.yaml'
)
project_conf
=
UtilYaml
(
project_conf_path
).
load_yaml
()
dd
.
set_value
(
'project_conf'
,
project_conf
)
dd
.
set_value
(
'minNum'
,
project_conf
[
'minNum'
])
...
...
component/GuKeYiTiHua/SurgeryFollow/SurgeryLend/surgery_require.py
View file @
05cafa5e
...
...
@@ -45,45 +45,55 @@ class SurgeryRequire(object):
self
.
iframe
.
to_main_iframe
()
if
order_code
is
None
:
self
.
button
.
new
()
log
.
info
(
'获取请领单号&存储'
)
ql_code
=
''
while
ql_code
.
startswith
(
'QL'
)
is
False
:
sleep
(
1
)
ql_code
=
self
.
order_detail_main
.
get_element_text
(
'请领单号 '
)
log
.
info
(
'请领单号:【{}】'
.
format
(
ql_code
))
else
:
self
.
surgery_require_search
(
order_code
=
order_code
)
self
.
list_page
.
open_order
(
order_code
=
order_code
)
ql_code
=
order_code
self
.
order_detail_main
.
choose_tap
(
'主体信息'
)
self
.
menu
.
dd
.
set_value
(
'ql_code'
,
ql_code
)
UtilYaml
(
self
.
menu
.
dd
.
get_value
(
'extract_path'
)).
write_yaml
({
'ql_code'
:
ql_code
})
# self.order_detail_main.choose_tap('主体信息') 已作废
# 公司
self
.
order_detail_main
.
some_click_item
(
'公司名称 '
)
company_code
=
test_data_info
[
'company'
]
self
.
modal
.
search_and_choose_items
(
placeholder
=
'模糊检索:公司名称,公司编码'
,
text
=
company_code
)
self
.
order_detail_main
.
drop_choose_item
(
'手术类型 '
,
'翻修手术'
)
# 手术日期
date_str
=
self
.
menu
.
tu
.
get_date_str
(
1
)
self
.
order_detail_main
.
date_input_item
(
'手术日期 '
,
date_str
)
# self.order_detail_main.some_click_item('公司名称 ')
# company_code = test_data_info['company']
# self.modal.search_and_choose_items(placeholder='模糊检索:公司名称,公司编码', text=company_code)
self
.
order_detail_main
.
choose_tap
(
'客户信息'
)
self
.
order_detail_main
.
some_click_item
(
'客户名称 '
)
customer_code
=
test_data_info
[
'customer'
]
self
.
modal
.
search_and_choose_items
(
title
=
'选择客户'
,
text
=
customer_code
)
self
.
order_detail_main
.
some_click_item
(
'配销客户名称 '
)
self
.
modal
.
search_and_choose_items
(
title
=
'选择配销客户'
,
text
=
customer_code
)
# self.order_detail_main.choose_tap('其他信息')
# 手术类型
self
.
order_detail_main
.
drop_choose_item
(
'手术类型 '
,
'翻修髋'
)
# 手术日期
date_str
=
self
.
menu
.
tu
.
get_date_str
(
1
)
self
.
order_detail_main
.
date_input_item
(
'手术日期 '
,
date_str
)
# 手术医生
self
.
order_detail_main
.
text_input_item
(
'手术医生 '
,
'齐振鋆'
)
# 手术种类
self
.
order_detail_main
.
drop_choose_item
(
'手术种类 '
,
'髋关节'
)
# self.order_detail_main.choose_tap('客户信息') 已作废
# self.order_detail_main.choose_tap('其他信息') 已作废
# self.order_detail_main.some_click_item(name='是否启用开单校验 ', end_str="div[@class='awsui-component']")
# 保存获得请领单号
self
.
order_detail_main
.
choose_tap
(
'主体信息'
)
self
.
button
.
save
()
log
.
info
(
'获取请领单号&存储'
)
ql_code
=
''
while
ql_code
.
startswith
(
'QL'
)
is
False
:
sleep
(
1
)
ql_code
=
self
.
order_detail_main
.
get_element_text
(
'请领单号 '
)
log
.
info
(
'请领单号:【{}】'
.
format
(
ql_code
))
self
.
menu
.
dd
.
set_value
(
'ql_code'
,
ql_code
)
UtilYaml
(
self
.
menu
.
dd
.
get_value
(
'extract_path'
)).
write_yaml
({
'ql_code'
:
ql_code
})
# self.order_detail_main.choose_tap('主体信息') 已作废
# self.button.save()
log
.
info
(
'添加商品'
)
self
.
button
.
click_button
(
button_name
=
'
商品信息
'
)
self
.
button
.
click_button
(
button_name
=
'
添加商品(内部)
'
)
goods
=
test_data_info
[
'goods'
]
self
.
modal
.
search_and_choose_items
(
placeholder
=
'模糊检索:商品编码,商品名称,规格型号,厂家物料编码,存储条件'
,
text
=
goods
)
self
.
modal
.
search_and_choose_items
(
placeholder
=
'模糊检索:商品编码,商品名称,规格型号,厂家物料编码,存储条件'
,
text
=
goods
)
sleep
(
3
*
len
(
goods
))
self
.
order_detail_table
.
get_cell_text
(
'商品名称'
,
goods
[
0
])
min_num
=
self
.
menu
.
dd
.
get_value
(
'minNum'
)
...
...
data/surgeryTestData.yaml
View file @
05cafa5e
-
description
:
'
normal
sense'
# 场景说明
process_type
:
2
# 1:请领单开始,2:借出单开始
company
:
'
00122'
# 公司
warehouse_lend
:
'
122302'
# 借出仓
warehouse_borrow
:
'
122310'
# 借入仓
warehouse_return
:
'
122302'
# 还回仓
salesman
:
'
12345678'
# 业务员
customer
:
'
1219166'
# 客户
agreement
:
'
38618'
# 合同
follow
:
'
N'
# 是否连台
goods
:
# 借出商品
# - 非序列号商品:10174665、10154871、10153570、10155572、10156326、10156327、10156331、10157133
# - 序列号商品:10171873、10184703、10154042、10157849、10157852、10155177
# - '10157133'
# - '10045736'
# - '10184703'
# - '10157852'
-
'
10155177'
-
description
:
'
normal
sense'
# 场景说明
process_type
:
1
# 1:请领单开始,2:借出单开始
company
:
'
00103'
# 公司
warehouse_lend
:
'
103303'
# 借出仓
warehouse_borrow
:
'
103503'
# 借入仓
warehouse_return
:
'
103303'
# 还回仓
salesman
:
'
11353403'
# 业务员
customer
:
'
1000486'
# 客户
agreement
:
'
38618'
# 合同
follow
:
'
N'
# 是否连台
goods
:
# 借出商品
-
'
10154043'
-
'
10006180'
driver/chromedriver.exe
0 → 100644
View file @
05cafa5e
File added
driver/driver下载地址
View file @
05cafa5e
...
...
@@ -2,4 +2,6 @@ Edge:
https://developer.microsoft.com/zh-cn/microsoft-edge/tools/webdriver/
Chrome:
https://registry.npmmirror.com/binary.html?path=chromedriver/
\ No newline at end of file
https://registry.npmmirror.com/binary.html?path=chromedriver/
https://chromedriver.storage.googleapis.com/index.html
http://npm.taobao.org/mirrors/chromedriver/
\ No newline at end of file
page/GuKeYiTiHua/DBQuery/db_query.py
View file @
05cafa5e
...
...
@@ -19,8 +19,13 @@ def get_results(index, col):
sql
=
func
(
self
,
*
args
,
**
kwargs
)
log
.
info
(
sql
)
result
=
db
.
exec
(
sql
)
return
result
if
index
is
None
else
result
[
index
]
if
col
is
None
else
result
[
index
][
col
]
try
:
return
result
if
index
is
None
else
result
[
index
]
if
col
is
None
else
result
[
index
][
col
]
except
IndexError
:
return
"IndexError"
return
wrapper
return
query
...
...
page/GuKeYiTiHua/Public/menu.py
View file @
05cafa5e
...
...
@@ -2,6 +2,9 @@
# 作者:齐振鋆
# 日期:2022/9/23
import
logging
import
time
from
selenium.webdriver.common.by
import
By
from
unit.public.UI.BasePage
import
BasePage
...
...
@@ -11,12 +14,17 @@ log = logging.getLogger(__name__)
class
MenuElement
(
BasePage
):
def
open_menu
(
self
,
first_menu_name
,
last_menu_name
):
log
.
info
(
'打开菜单:{}'
.
format
(
last_menu_name
))
first_menu
=
"//div[contains(@class,'menuNavTop')]//div[text()='{}']"
.
format
(
first_menu_name
)
second_menu
=
"//div[contains(@class, 'third-menu') and @navname='{}']/ancestor::div[@class='sec-menu']"
.
format
(
last_menu_name
)
third_menu
=
"//div[contains(@class, 'third-menu') and @navname='{}']"
.
format
(
last_menu_name
)
# first_menu = "//div[contains(@class,'menuNavTop')]//div[text()='{}']".format(first_menu_name)
# second_menu = "//div[contains(@class, 'third-menu') and @navname='{}']/ancestor::div[@class='sec-menu']".format(
# last_menu_name)
# third_menu = "//div[contains(@class, 'third-menu') and @navname='{}']".format(last_menu_name)
menu
=
f
"//div[contains(@class, 'menu') and @navname='
{
last_menu_name
}
']/span"
# self.move_to_element(first_menu)
# self.move_to_element(second_menu)
# self.click(third_menu) if self.wait_element(third_menu) else self.click(second_menu)
self
.
js
(
"arguments[0].click();"
,
self
.
get_element
(
third_menu
))
if
self
.
wait_element
(
third_menu
)
else
self
.
js
(
"arguments[0].click();"
,
self
.
get_element
(
second_menu
))
driver
=
self
.
dd
.
get_value
(
'driver'
)
em
=
driver
.
find_element
(
By
.
XPATH
,
menu
)
time
.
sleep
(
3
)
driver
.
execute_script
(
"arguments[0].click();"
,
em
)
# self.js("arguments[0].click();", menu)
pytest.ini
View file @
05cafa5e
...
...
@@ -4,7 +4,7 @@ python_classes = Test*
python_functions
=
test
log_cli
=
1
log_cli_level
=
INFO
log_cli_level
=
DEBUG
log_cli_format
=
%(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)
log_cli_date_format
=
%Y-%m-%d %H:%M:%S
...
...
run_main.py
View file @
05cafa5e
...
...
@@ -2,38 +2,23 @@
import
argparse
import
os
import
flet
import
pytest
from
flet
import
ResponsiveRow
,
Column
,
ElevatedButton
,
Text
,
TextField
,
Dropdown
,
icons
,
FilePickerResultEvent
,
\
FilePicker
,
alignment
,
Container
,
dropdown
,
KeyboardType
from
flet
import
Ref
from
unit.public.DataDic
import
DataDic
dd
=
DataDic
()
def
py_run
():
tab_code
=
dd
.
get_value
(
'tab'
)
if
tab_code
is
None
:
pytest
.
main
([
'cases/UI/{}/{}'
.
format
(
dd
.
get_value
(
'project'
),
dd
.
get_value
(
'module'
))])
else
:
pytest
.
main
(
[
'cases/UI/{}/{}'
.
format
(
dd
.
get_value
(
'project'
),
dd
.
get_value
(
'module'
)),
'-m'
,
tab_code
])
# allure generate allure-results -o allure-report --clean
os
.
system
(
"allure generate allure-results -o allure-report --clean"
)
def
get_command_args
():
"""命令行参数解析"""
parser
=
argparse
.
ArgumentParser
(
description
=
u
'可选择参数:'
)
parser
.
add_argument
(
"--client"
,
default
=
'localhost'
,
help
=
"client:客户端IP"
)
parser
.
add_argument
(
"--project"
,
default
=
'GuKeYiTiHua'
,
help
=
"project:项目"
)
# url: 'http://
10.17.65.216:8088/portal/' 'http://10.17.65.200:8088/portal/
'
parser
.
add_argument
(
"--url"
,
default
=
'http://
10.17.65.216:8088/portal/
'
,
help
=
"url: 地址"
)
# url: 'http://
scdev.cmic.com.cn:8088/beta/r/w
'
parser
.
add_argument
(
"--url"
,
default
=
'http://
scdev.cmic.com.cn:8088/beta/r/w
'
,
help
=
"url: 地址"
)
# ;手术跟台: surgery | 采购管理:purchase | 调拨管理: Transfer | 库存管理:inventory | 调试:debug
parser
.
add_argument
(
"--module"
,
default
=
'
p
ur
chase
'
,
help
=
"module:模块"
)
parser
.
add_argument
(
"--tab"
,
default
=
'
p
ur
chase
'
,
help
=
"tab:标记"
)
parser
.
add_argument
(
"--module"
,
default
=
'
s
ur
gery
'
,
help
=
"module:模块"
)
parser
.
add_argument
(
"--tab"
,
default
=
'
s
ur
gery
'
,
help
=
"tab:标记"
)
parser
.
add_argument
(
"--order"
,
help
=
"order: 单据编码"
)
parser
.
add_argument
(
"--co"
,
help
=
"co: 公司"
)
parser
.
add_argument
(
"--wh"
,
help
=
"wh: 仓库"
)
...
...
@@ -50,110 +35,16 @@ def get_command_args():
dd
.
set_value
(
'warehouse'
,
args
.
wh
)
dd
.
set_value
(
'custGood'
,
args
.
good
)
dd
.
set_value
(
'custNum'
,
args
.
num
)
py_run
()
def
get_ui_args
(
page
):
page
.
title
=
"国药自动化测试启动器"
client_ip
=
Ref
[
TextField
]()
test_url
=
Ref
[
TextField
]()
project_name
=
Ref
[
Dropdown
]()
module_name
=
Ref
[
Dropdown
]()
tab_name
=
Ref
[
Dropdown
]()
test_file
=
Ref
[
TextField
]()
greetings
=
Ref
[
Column
]()
def
run
(
e
):
greetings
.
current
.
controls
.
append
(
Text
(
f
"【测试环境】:
{
test_url
.
current
.
value
}
"
)
)
greetings
.
current
.
controls
.
append
(
Text
(
f
"【项目】:
{
project_name
.
current
.
value
}
-【模块】:
{
module_name
.
current
.
value
}
-【标签】:
{
tab_name
.
current
.
value
}
"
)
)
page
.
update
()
dd
.
set_value
(
'client'
,
client_ip
.
current
.
value
)
p_name
=
project_name
.
current
.
value
p_code
=
'GuKeYiTiHua'
if
p_name
==
'骨科一体化'
else
'TestProject'
dd
.
set_value
(
'project'
,
p_code
)
dd
.
set_value
(
'url'
,
test_url
.
current
.
value
)
m_name
=
module_name
.
current
.
value
m_code
=
'purchase'
if
m_name
==
'采购管理'
\
else
'surgery'
if
m_name
==
'手术跟台'
\
else
'transfer'
if
m_name
==
'调拨管理'
\
else
None
dd
.
set_value
(
'module'
,
m_code
)
t_name
=
tab_name
.
current
.
value
t_code
=
'all'
if
t_name
==
'全量'
else
'smoking'
if
t_name
==
'冒烟'
else
'debug'
if
t_name
==
'调试'
else
None
dd
.
set_value
(
'tab'
,
t_code
)
py_run
()
def
stop
(
e
):
dd
.
get_value
(
'driver'
).
close
()
dd
.
get_value
(
'driver'
).
quit
()
def
module_update
(
e
):
m_options
=
[]
module_list
=
[
'采购管理'
,
'手术跟台'
,
'调拨管理'
]
if
project_name
.
current
.
value
==
'骨科一体化'
\
else
[
'模块1'
,
'模块2'
,
'模块3'
]
if
project_name
.
current
.
value
==
'测试项目'
\
else
[]
for
m_item
in
module_list
:
m_options
.
append
(
dropdown
.
Option
(
m_item
))
module
.
options
=
m_options
page
.
update
()
def
pick_files_result
(
e
:
FilePickerResultEvent
):
selected_files
.
value
=
(
e
.
files
[
0
].
path
if
e
.
files
else
"Cancelled!"
)
selected_files
.
update
()
test_data_file
=
test_file
.
current
.
value
dd
.
set_value
(
'test_data_file'
,
test_data_file
)
client
=
TextField
(
ref
=
client_ip
,
label
=
"客户端地址"
,
icon
=
icons
.
BOY
,
autofocus
=
True
,
value
=
'localhost'
,
read_only
=
True
,
)
url
=
TextField
(
ref
=
test_url
,
label
=
"测试环境"
,
icon
=
icons
.
HTTP
,
keyboard_type
=
KeyboardType
.
URL
,
value
=
'http://10.17.65.216:8088/portal/r/w'
)
project_options
=
[]
for
item
in
[
'骨科一体化'
,
'测试项目'
]:
project_options
.
append
(
dropdown
.
Option
(
item
))
project
=
Dropdown
(
ref
=
project_name
,
label
=
"项目名称"
,
icon
=
icons
.
HOUSE
,
options
=
project_options
,
on_change
=
module_update
)
module_options
=
[]
module
=
Dropdown
(
ref
=
module_name
,
label
=
"模块名称"
,
icon
=
icons
.
MOOD
,
options
=
module_options
)
tab_options
=
[]
for
item
in
[
'全量'
,
'冒烟'
,
'调试'
]:
tab_options
.
append
(
dropdown
.
Option
(
item
))
tab
=
Dropdown
(
ref
=
tab_name
,
label
=
"标签名称"
,
icon
=
icons
.
TAB
,
options
=
tab_options
)
file
=
ElevatedButton
(
"测试数据文件"
,
on_click
=
lambda
_
:
pick_files_dialog
.
pick_files
(
allow_multiple
=
False
,
allowed_extensions
=
[
"yaml"
]
),
)
pick_files_dialog
=
FilePicker
(
on_result
=
pick_files_result
)
selected_files
=
TextField
(
ref
=
test_file
,
label
=
"测试数据"
,
icon
=
icons
.
DATASET
,
read_only
=
True
,
)
page
.
overlay
.
append
(
pick_files_dialog
)
page
.
add
(
Container
(
client
,
col
=
{
"sm"
:
6
,
"md"
:
4
,
"xl"
:
2
}),
Container
(
url
,
col
=
{
"sm"
:
6
,
"md"
:
4
,
"xl"
:
2
}),
Container
(
project
,
col
=
{
"sm"
:
6
,
"md"
:
4
,
"xl"
:
2
}),
Container
(
module
,
col
=
{
"sm"
:
6
,
"md"
:
4
,
"xl"
:
2
}),
Container
(
tab
,
col
=
{
"sm"
:
6
,
"md"
:
4
,
"xl"
:
2
}),
ResponsiveRow
([
Container
(
selected_files
,
col
=
{
"sm"
:
10
}),
Container
(
file
,
col
=
{
"sm"
:
2
}),
]),
ResponsiveRow
([
Container
(
ElevatedButton
(
"运行"
,
on_click
=
run
),
col
=
{
"sm"
:
1
},
alignment
=
alignment
.
center
),
Container
(
ElevatedButton
(
"停止"
,
on_click
=
stop
),
col
=
{
"sm"
:
1
},
alignment
=
alignment
.
center
),
]),
Container
(
Column
(
ref
=
greetings
),
)
)
tab_code
=
dd
.
get_value
(
'tab'
)
if
tab_code
is
None
:
pytest
.
main
([
'cases/UI/{}/{}'
.
format
(
dd
.
get_value
(
'project'
),
dd
.
get_value
(
'module'
))])
else
:
pytest
.
main
(
[
'cases/UI/{}/{}'
.
format
(
dd
.
get_value
(
'project'
),
dd
.
get_value
(
'module'
)),
'-m'
,
tab_code
])
# allure generate allure-results -o allure-report --clean
os
.
system
(
"allure generate allure-results -o allure-report --clean"
)
if
__name__
==
'__main__'
:
UI
=
False
# 运行模式
flet
.
app
(
target
=
get_ui_args
)
if
UI
is
True
else
get_command_args
()
py_run
()
unit/public/UI/BasePage.py
View file @
05cafa5e
...
...
@@ -63,9 +63,10 @@ class BasePage(object):
:param wait_time: 等待时间
"""
element_obj
=
self
.
split_locator
(
locator
)
driver
=
self
.
dd
.
get_value
(
'driver'
)
try
:
wait
=
self
.
dd
.
get_value
(
'element_wait_time'
)
if
wait_time
is
None
else
wait_time
WebDriverWait
(
self
.
dd
.
get_value
(
'
driver
'
)
,
wait
,
1
).
until
(
ec
.
visibility_of_element_located
(
element_obj
))
WebDriverWait
(
driver
,
wait
).
until
(
ec
.
visibility_of_element_located
(
element_obj
))
log
.
debug
(
'等待元素:{}'
.
format
(
locator
))
return
True
except
TimeoutException
:
...
...
@@ -101,10 +102,11 @@ class BasePage(object):
# if self.wait_element(locator, sec) is True:
# log.debug('获取元素:{}'.format(locator))
# with allure.step('获取元素:{}'.format(locator)):
driver
=
self
.
dd
.
get_value
(
'driver'
)
wt
=
self
.
dd
.
get_value
(
'element_wait_time'
)
element_obj
=
self
.
split_locator
(
locator
)
try
:
element
=
WebDriverWait
(
self
.
dd
.
get_value
(
'driver'
),
self
.
dd
.
get_value
(
'element_wait_time'
),
1
).
until
(
ec
.
visibility_of_element_located
(
element_obj
))
element
=
WebDriverWait
(
driver
,
wt
).
until
(
ec
.
visibility_of_element_located
(
element_obj
))
self
.
try_count
=
0
return
element
except
Exception
as
e
:
...
...
@@ -124,10 +126,11 @@ class BasePage(object):
:param locator: 定位方法+定位表达式组合字符串,用逗号分隔,如'(xpath,//div[@class="username"])'
:return: elements
"""
driver
=
self
.
dd
.
get_value
(
'driver'
)
wt
=
self
.
dd
.
get_value
(
'element_wait_time'
)
element_objs
=
self
.
split_locator
(
locator
)
try
:
elements
=
WebDriverWait
(
self
.
dd
.
get_value
(
'driver'
),
self
.
dd
.
get_value
(
'element_wait_time'
),
1
).
until
(
ec
.
visibility_of_all_elements_located
(
element_objs
))
elements
=
WebDriverWait
(
driver
,
wt
).
until
(
ec
.
visibility_of_all_elements_located
(
element_objs
))
# log.debug('获取元素列表:{}'.format(locator))
return
elements
except
Exception
as
e
:
...
...
@@ -331,15 +334,15 @@ class BasePage(object):
element
.
click
()
self
.
dd
.
get_value
(
'driver'
).
switch_to
.
window
(
self
.
dd
.
get_value
(
'driver'
).
window_handles
[
-
1
])
def
js
(
self
,
script
,
xpath
=
None
):
def
js
(
self
,
script
,
locator
=
None
):
"""
执行JavaScript
:param script: js语句
:param
xpath
:
:param
locator
:
"""
log
.
debug
(
'执行JS语句:{}'
.
format
(
script
))
self
.
dd
.
get_value
(
'driver'
)
.
execute_script
(
script
)
if
xpath
is
None
else
self
.
dd
.
get_value
(
'
driver
'
)
.
execute_script
(
script
,
xpath
)
driver
=
self
.
dd
.
get_value
(
'driver'
)
driver
.
execute_script
(
script
)
if
locator
is
None
else
driver
.
execute_script
(
script
,
self
.
get_element
(
locator
)
)
@
staticmethod
def
zoom
(
z_type
,
times
):
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment