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
22b60c14
Commit
22b60c14
authored
Nov 07, 2023
by
齐 振鋆
Browse files
个人代码迁移
parent
c6ba7a8b
Pipeline
#10140
failed with stages
in 3 seconds
Changes
119
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
cases/UI/GuKeYiTiHua/transfer/test_transfer_02in.py
0 → 100644
View file @
22b60c14
'''
@Project :test_guke
@File :test_transfer_02in.py
@IDE :PyCharm
@Author :何凯
@Date :2023/3/17 15:58
'''
import
os
import
logging
import
allure
import
pytest
as
pytest
from
ddt
import
ddt
,
file_data
from
component.GuKeYiTiHua.StorageManage.StorageIn.warehouse_accept
import
WarehouseVerify
from
component.GuKeYiTiHua.StorageManage.StorageIn.warehouse_take
import
WarehouseTake
from
component.GuKeYiTiHua.StorageManage.StorageIn.warehouse_up
import
WarehouseUp
from
component.GuKeYiTiHua.Transfer.transfer_in
import
TransferIn
from
page.GuKeYiTiHua.Public.common
import
CommonElement
from
unit.public.DataDic
import
DataDic
from
component.GuKeYiTiHua.StorageManage.StorageOut.storage_out_integration
import
StorageOut
from
component.GuKeYiTiHua.StorageManage.StorageOut.warehouse_check
import
WarehouseCheck
from
component.GuKeYiTiHua.StorageManage.StorageOut.warehouse_delivery
import
WarehouseDelivery
from
component.GuKeYiTiHua.StorageManage.StorageOut.warehouse_pick
import
WarehousePick
log
=
logging
.
getLogger
(
__name__
)
@
pytest
.
mark
.
incremental
@
ddt
class
TestBoundOrder
(
object
):
def
setup_class
(
self
):
self
.
dd
=
DataDic
()
self
.
dr
=
TransferIn
()
self
.
so
=
StorageOut
()
self
.
wd
=
WarehouseDelivery
()
self
.
wp
=
WarehousePick
()
self
.
wc
=
WarehouseCheck
()
self
.
common
=
CommonElement
()
self
.
wt
=
WarehouseTake
()
self
.
wa
=
WarehouseVerify
()
self
.
wu
=
WarehouseUp
()
@
allure
.
feature
(
'入库'
)
@
allure
.
story
(
'调拨入库单'
)
@
allure
.
title
(
'调拨出库单提交'
)
# @pytest.mark.skip(reason='调试通过')
@
allure
.
description
(
'打开调拨入库单->提交'
)
@
pytest
.
mark
.
transferin
@
pytest
.
mark
.
run
(
order
=
10
)
def
test_Inboundorder
(
self
):
# 调拨入库单提交
# transfer_out_code = self.dd.get_value('transfer_out_code')
self
.
dr
.
open_menu_transfer_in
()
self
.
dr
.
transfer_in_code_create
(
'ST2023031400006'
)
transfer_in_code
=
self
.
dd
.
get_value
(
'transfer_in_code'
)
self
.
dd
.
set_value
(
'test_data_info'
,
{
'goods'
:
[
'10005528'
]})
self
.
dr
.
transfer_in_code_cancel
(
'ST2023031400006'
)
self
.
common
.
close_tap
()
# # 收货
# self.wt.take_menu_open()
# self.wt.take_pool_take(transfer_in_code)
# self.wt.take_confirm(transfer_in_code)
# self.common.close_tap()
# # 验收
# self.wa.open_verify_menu()
# self.wa.verify_edit_and_confirm(transfer_in_code)
# self.common.close_tap()
# # 上架
# self.wu.open_up_menu()
# self.wu.up_confirm(transfer_in_code)
# self.common.close_tap()
cases/UI/GuKeYiTiHua/transfer/test_transfer_out_red.py
0 → 100644
View file @
22b60c14
'''
@Project :test_guke
@File :test_transfer_out_red.py
@IDE :PyCharm
@Author :何凯
@Date :2023/3/25 11:36
'''
import
os
import
logging
import
allure
import
pytest
as
pytest
from
ddt
import
ddt
,
file_data
from
component.GuKeYiTiHua.StorageManage.StorageIn.warehouse_accept
import
WarehouseVerify
from
component.GuKeYiTiHua.StorageManage.StorageIn.warehouse_take
import
WarehouseTake
from
component.GuKeYiTiHua.StorageManage.StorageIn.warehouse_up
import
WarehouseUp
from
component.GuKeYiTiHua.Transfer.transfer_in
import
TransferIn
from
component.GuKeYiTiHua.Transfer.transfer_out_red
import
TransferOutRed
from
page.GuKeYiTiHua.Public.common
import
CommonElement
from
unit.public.DataDic
import
DataDic
from
component.GuKeYiTiHua.Transfer.transfer_out
import
TransferOut
from
component.GuKeYiTiHua.StorageManage.StorageOut.storage_out_integration
import
StorageOut
from
component.GuKeYiTiHua.StorageManage.StorageOut.warehouse_check
import
WarehouseCheck
from
component.GuKeYiTiHua.StorageManage.StorageOut.warehouse_delivery
import
WarehouseDelivery
from
component.GuKeYiTiHua.StorageManage.StorageOut.warehouse_pick
import
WarehousePick
log
=
logging
.
getLogger
(
__name__
)
@
pytest
.
mark
.
incremental
@
ddt
class
TestBoundOrder
(
object
):
def
setup_class
(
self
):
self
.
dd
=
DataDic
()
self
.
sr
=
TransferOut
()
self
.
dr
=
TransferIn
()
self
.
dc
=
TransferOutRed
()
self
.
so
=
StorageOut
()
self
.
wd
=
WarehouseDelivery
()
self
.
wp
=
WarehousePick
()
self
.
wc
=
WarehouseCheck
()
self
.
common
=
CommonElement
()
self
.
wt
=
WarehouseTake
()
self
.
wa
=
WarehouseVerify
()
self
.
wu
=
WarehouseUp
()
@
allure
.
feature
(
'出库'
)
@
allure
.
story
(
'调拨出库单'
)
@
allure
.
title
(
'调拨出库单创建'
)
# @pytest.mark.skip(reason='调试通过')
@
allure
.
description
(
'选择公司->选择业务员->选择调拨出库仓->选择调拨入库仓->保存->添加商品->输入数量->提交'
)
@
pytest
.
mark
.
transferoutred
@
pytest
.
mark
.
run
(
order
=
10
)
@
file_data
(
'{}/data/transferTestData.yaml'
.
format
(
os
.
getcwd
()))
def
test_Outboundorder_Red
(
self
,
**
kwargs
):
log
.
info
(
kwargs
)
# self.dd.set_value('test_data_info', kwargs)
# goods = kwargs['goods']
# #创建调拨出库单
# self.sr.open_menu_transfer_out()
# self.sr.transfer_out_code_create()
# transfer_out_code = self.dd.get_value('transfer_out_code')
# #审核
# self.sr.transfer_out_code_transact(transfer_out_code)
# self.common.close_tap()
# #库存管理-发货-拣货-复核
# transfer_out_code = self.dd.get_value('transfer_out_code')
# self.so.storage_out_integration(transfer_out_code, goods)
# #调拨入库单提交
# transfer_out_code = self.dd.get_value('transfer_out_code')
# self.dr.open_menu_transfer_in()
# self.dr.transfer_in_code_create('transfer_out_code')
# #调拨入库单整单取消
# self.dr.transfer_in_code_cancel(transfer_out_code)
# self.common.close_tap()
#创建调拨出库红冲单
self
.
dc
.
open_menu_transfer_out_red
()
self
.
dc
.
transfer_out_red_code_create
()
\ No newline at end of file
cases/UI/__init__.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/2/22
# 描述:
cases/UI/conftest.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/2/23
# 描述:
import
logging
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
from
unit.public.YamlUtil
import
UtilYaml
log
=
logging
.
getLogger
(
__name__
)
dd
=
DataDic
()
@
pytest
.
fixture
(
scope
=
"session"
,
autouse
=
True
)
def
init_browser
(
pytestconfig
):
"""初始化测试"""
log
.
info
(
'初始化浏览器......'
)
client
=
dd
.
get_value
(
'client'
)
chrome_options
=
webdriver
.
ChromeOptions
()
# chrome_options.add_argument('--user-agent=""') # 设置请求头的User-Agent
# chrome_options.add_argument('--window-size=1280x1024') # 设置浏览器分辨率(窗口大小)
chrome_options
.
add_argument
(
'--start-maximized'
)
# 最大化运行(全屏窗口),不设置,取元素会报错
chrome_options
.
add_experimental_option
(
"excludeSwitches"
,
[
'enable-automation'
])
# 禁用浏览器正在被自动化程序控制的提示
chrome_options
.
add_argument
(
'--incognito'
)
# 隐身模式(无痕模式)
# chrome_options.add_argument('--hide-scrollbars') # 隐藏滚动条, 应对一些特殊页面
# chrome_options.add_argument('--disable-javascript') # 禁用javascript
# chrome_options.add_argument('--blink-settings=imagesEnabled=false') # 不加载图片, 提升速度
# chrome_options.add_argument('--headless') # 浏览器不提供可视化页面
chrome_options
.
add_argument
(
'--ignore-certificate-errors'
)
# 禁用扩展插件并实现窗口最大化
# 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
)
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
=
UtilYaml
(
project_conf_path
).
load_yaml
()
dd
.
set_value
(
'project_conf'
,
project_conf
)
dd
.
set_value
(
'minNum'
,
project_conf
[
'minNum'
])
log
.
info
(
'初始化数据库连接......'
)
dd
.
set_value
(
'db'
,
MysqlDataBase
(
project_conf
[
'dbinfo'
]))
url
=
dd
.
get_value
(
'url'
)
log
.
info
(
'开打网址:{}'
.
format
(
url
))
driver
.
get
(
url
)
cases/__init__.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2022/8/11
component/GuKeYiTiHua/StorageManage/StorageIn/__init__.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/2/20
# 描述:
component/GuKeYiTiHua/StorageManage/StorageIn/warehouse_accept.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/2/27
# 描述: 仓库验收
import
logging
import
os
import
allure
import
pytest
import
pyautogui
from
random
import
randint
from
time
import
sleep
,
time
from
component.GuKeYiTiHua
import
iframe
,
menu
,
list_page
,
button
,
order_detail_main
,
modal
,
dbq
,
table
from
component.GuKeYiTiHua.StorageManage
import
first_menu
from
page.GuKeYiTiHua.Public.orderDetailPage
import
OrderDetailTable
,
ScanTable
from
unit.public.YamlUtil
import
UtilYaml
log
=
logging
.
getLogger
(
__name__
)
pyautogui
.
FAILSAFE
=
False
class
WarehouseVerify
(
object
):
third_menu
=
'仓库验收'
def
__init__
(
self
):
self
.
dbq
=
dbq
self
.
iframe
=
iframe
self
.
menu
=
menu
self
.
list_page
=
list_page
self
.
button
=
button
self
.
table
=
table
self
.
order_detail_main
=
order_detail_main
self
.
order_detail_table
=
OrderDetailTable
()
self
.
scan_table
=
ScanTable
()
self
.
modal
=
modal
@
allure
.
step
(
'打开菜单:{}'
.
format
(
third_menu
))
def
open_verify_menu
(
self
):
self
.
iframe
.
out_frame
()
self
.
menu
.
open_menu
(
first_menu
,
self
.
third_menu
)
@
allure
.
step
(
'查询:{}'
.
format
(
third_menu
))
def
verify_order_search
(
self
,
tap_name
=
'待办'
,
order_code
=
None
,
count
=
1
):
self
.
list_page
.
order_search
(
self
.
third_menu
,
tap_name
,
'订单号'
,
order_code
,
count
)
@
allure
.
step
(
'扫码录入商品'
)
def
scan_input_goods
(
self
,
good_code
,
bar_code
,
order_type
=
'OP'
,
serial
=
None
):
if
order_type
==
'OP'
:
bar
=
bar_code
.
split
(
' '
)
self
.
order_detail_main
.
text_input_item
(
'第一条码 '
,
bar
[
0
],
enter
=
False
)
self
.
order_detail_main
.
text_input_item
(
'第二条码 '
,
bar
[
1
],
enter
=
True
)
if
self
.
menu
.
wait_element
(
"//h4[text()='选择商品']"
,
wait_time
=
3
)
is
True
:
self
.
modal
.
search_and_choose_items
(
title
=
'选择商品'
,
text
=
good_code
)
while
self
.
menu
.
wait_element
(
"//h4[text()='选择商品']/ancestor::div[@class='el-overlay']"
,
wait_time
=
3
)
is
True
:
sleep
(
1
)
serial_number
=
'YC{}'
.
format
(
self
.
menu
.
tu
.
get_datetime
(
'MS'
))
else
:
serial_number
=
serial
self
.
order_detail_main
.
text_input_item
(
'序列号 '
,
serial_number
,
enter
=
True
)
while
self
.
menu
.
wait_element
(
self
.
order_detail_main
.
get_element_text
(
'生产批号 '
,
get
=
True
),
3
)
is
True
:
sleep
(
1
)
@
allure
.
step
(
'{}'
.
format
(
third_menu
))
def
verify_edit_and_confirm
(
self
,
order_code
,
order_type
=
'OP'
):
log
.
info
(
"验收信息录入并提交."
)
self
.
verify_order_search
(
order_code
=
order_code
)
self
.
list_page
.
open_order
(
order_code
=
order_code
)
company
=
self
.
order_detail_main
.
get_element_text
(
'公司编码 '
)
warehouse
=
self
.
order_detail_main
.
get_element_text
(
'仓库编码 '
)
self
.
menu
.
zoom
(
'-'
,
6
)
if
order_type
==
'OP'
:
goods
=
self
.
order_detail_table
.
get_details
([
'商品编码'
,
'到货数量'
])
for
good
in
goods
:
good_code
=
good
[
0
]
good_serial_flag
=
self
.
dbq
.
get_serial_flag
(
warehouse
,
good_code
)
take_number
=
int
(
good
[
1
])
if
good_serial_flag
==
'Y'
:
good_sn_dic
=
UtilYaml
(
'{}/data/goods_sn_data.yaml'
.
format
(
os
.
getcwd
())).
load_yaml
()
try
:
bar_code
=
good_sn_dic
[
good_code
]
self
.
button
.
scan_bar
()
self
.
iframe
.
to_bar_iframe
(
name
=
'验收扫码'
)
for
i
in
range
(
take_number
):
self
.
scan_input_goods
(
good_code
,
bar_code
)
self
.
button
.
click_button
(
"//div[@class='form-item-view']"
,
'提交'
)
self
.
iframe
.
to_parent_frame
()
sleep
(
3
)
except
KeyError
:
pytest
.
fail
(
'有未维护的商品条码信息'
)
else
:
take_number
=
int
(
self
.
order_detail_table
.
get_cell_text
(
'到货数量'
,
good_code
))
self
.
order_detail_table
.
input_text
(
'验收数量'
,
good_code
,
take_number
)
stock_cargo_flag
=
self
.
dbq
.
get_stock_cargo
(
warehouse
)
if
stock_cargo_flag
==
'Y'
:
sc_ph
=
self
.
dbq
.
get_pro_num
(
warehouse
,
good_code
)
if
sc_ph
is
None
or
sc_ph
==
''
:
pytest
.
fail
(
'启用货位管理的仓库:{},未配置商品:{}的货位.'
.
format
(
warehouse
,
good_code
))
else
:
sc_ph
=
'S{}'
.
format
(
int
(
time
()
*
100
))
self
.
order_detail_table
.
input_text
(
'生产批号'
,
good_code
,
sc_ph
)
self
.
order_detail_table
.
input_text
(
'生产日期'
,
good_code
,
self
.
menu
.
tu
.
get_date_str
(
-
1
))
self
.
order_detail_table
.
input_text
(
'有效期/失效日期'
,
good_code
,
self
.
menu
.
tu
.
get_date_str
(
5
))
sto_ste
=
self
.
dbq
.
get_storage_sterilization_flag
(
company
,
good_code
)
if
sto_ste
[
0
]
==
'001'
:
self
.
order_detail_table
.
input_text
(
'启运温度 (摄氏度)'
,
good_code
,
'{}'
.
format
(
randint
(
-
5
,
5
)))
self
.
order_detail_table
.
input_text
(
'到货温度(摄氏度)'
,
good_code
,
'{}'
.
format
(
randint
(
-
5
,
5
)))
self
.
order_detail_table
.
input_text
(
'启运日期'
,
good_code
,
self
.
menu
.
tu
.
get_date_str
())
self
.
order_detail_table
.
input_text
(
'启运时间'
,
good_code
,
self
.
menu
.
tu
.
get_time_str
(
-
1
))
self
.
order_detail_table
.
input_text
(
'到货时间'
,
good_code
,
self
.
menu
.
tu
.
get_time_str
(
1
))
self
.
order_detail_table
.
choose_item
(
'运输工具说明'
,
good_code
,
'冷藏车'
)
if
sto_ste
[
1
]
==
'Y'
:
self
.
order_detail_table
.
input_text
(
'灭菌批号'
,
good_code
,
'M{}'
.
format
(
int
(
time
()
*
100
)))
self
.
order_detail_table
.
input_text
(
'灭菌日期'
,
good_code
,
self
.
menu
.
tu
.
get_date_str
())
self
.
order_detail_table
.
input_text
(
'灭菌失效日期'
,
good_code
,
self
.
menu
.
tu
.
get_date_str
(
5
))
else
:
back_info
=
self
.
menu
.
dd
.
get_value
(
'back_info'
)
for
back_item
in
back_info
:
if
back_item
[
'sf'
]
==
'Y'
:
scan_sns
=
back_item
[
'used_serial'
]
self
.
button
.
scan_bar
()
self
.
iframe
.
to_bar_iframe
(
name
=
'验收扫码'
)
for
i
in
range
(
len
(
scan_sns
)):
self
.
scan_input_goods
(
back_item
[
'good'
],
bar_code
=
None
,
order_type
=
order_type
,
serial
=
scan_sns
[
i
])
self
.
button
.
click_button
(
"//div[@class='form-item-view']"
,
'提交'
)
self
.
iframe
.
to_parent_frame
()
sleep
(
3
)
else
:
take_number
=
int
(
self
.
order_detail_table
.
get_cell_text
(
'到货数量'
,
back_item
[
'good'
]))
self
.
order_detail_table
.
input_text
(
'验收数量'
,
back_item
[
'good'
],
take_number
)
self
.
menu
.
zoom
(
'+'
,
6
)
self
.
button
.
click_button
(
"//div[@id='process-toolbar']"
,
'提交'
)
self
.
list_page
.
edit_iframe_is_show
()
component/GuKeYiTiHua/StorageManage/StorageIn/warehouse_take.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/2/27
# 描述: 仓库收货
import
logging
import
allure
from
time
import
sleep
from
selenium.common.exceptions
import
TimeoutException
from
component.GuKeYiTiHua
import
iframe
,
menu
,
list_page
,
button
,
order_detail_main
,
modal
from
component.GuKeYiTiHua.StorageManage
import
first_menu
log
=
logging
.
getLogger
(
__name__
)
class
WarehouseTake
(
object
):
third_menu
=
'仓库收货'
def
__init__
(
self
):
self
.
iframe
=
iframe
self
.
menu
=
menu
self
.
list_page
=
list_page
self
.
button
=
button
self
.
order_detail_main
=
order_detail_main
self
.
modal
=
modal
@
allure
.
step
(
'打开菜单:{}'
.
format
(
third_menu
))
def
take_menu_open
(
self
):
self
.
iframe
.
out_frame
()
self
.
menu
.
open_menu
(
first_menu
,
self
.
third_menu
)
@
allure
.
step
(
'查询:{}'
.
format
(
third_menu
))
def
take_order_search
(
self
,
tap_name
=
'待办'
,
order_code
=
None
,
count
=
1
):
self
.
list_page
.
order_search
(
self
.
third_menu
,
tap_name
,
'订单号'
,
order_code
,
count
)
@
allure
.
step
(
'订单池收货'
)
def
take_pool_take
(
self
,
order_code
):
log
.
info
(
'订单池收货'
)
self
.
take_order_search
(
'收货订单池'
,
order_code
,
count
=
len
(
self
.
menu
.
dd
.
get_value
(
'test_data_info'
)[
'goods'
]))
self
.
list_page
.
checked_order
(
0
)
self
.
button
.
click_button
(
button_name
=
'收货'
)
try
:
self
.
button
.
click_button
(
"//div[contains(@class, 'is-message-box')]"
,
'确定'
)
except
TimeoutException
:
pass
sleep
(
1
)
@
allure
.
step
(
'{}'
.
format
(
third_menu
))
def
take_confirm
(
self
,
order_code
):
log
.
info
(
'收货确认'
)
self
.
take_order_search
(
order_code
=
order_code
)
self
.
list_page
.
open_order
(
'订单号'
)
self
.
button
.
submit
()
self
.
list_page
.
edit_iframe_is_show
()
component/GuKeYiTiHua/StorageManage/StorageIn/warehouse_up.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/2/27
# 描述: 仓库上架
import
logging
import
allure
from
component.GuKeYiTiHua
import
iframe
,
menu
,
list_page
,
button
,
order_detail_main
,
modal
from
component.GuKeYiTiHua.StorageManage
import
first_menu
from
page.GuKeYiTiHua.Public.orderDetailPage
import
OrderDetailTable
log
=
logging
.
getLogger
(
__name__
)
class
WarehouseUp
(
object
):
third_menu
=
'仓库上架'
def
__init__
(
self
):
self
.
iframe
=
iframe
self
.
menu
=
menu
self
.
list_page
=
list_page
self
.
button
=
button
self
.
order_detail_main
=
order_detail_main
self
.
order_detail_table
=
OrderDetailTable
()
self
.
modal
=
modal
@
allure
.
step
(
'打开菜单:{}'
.
format
(
third_menu
))
def
open_up_menu
(
self
):
self
.
iframe
.
out_frame
()
self
.
menu
.
open_menu
(
first_menu
,
self
.
third_menu
)
@
allure
.
step
(
'查询:{}'
.
format
(
third_menu
))
def
up_order_search
(
self
,
tap_name
=
'待办'
,
order_code
=
None
,
count
=
1
):
self
.
list_page
.
order_search
(
self
.
third_menu
,
tap_name
,
'订单号'
,
order_code
,
count
)
@
allure
.
step
(
'{}'
.
format
(
third_menu
))
def
up_confirm
(
self
,
order_code
):
log
.
info
(
'上架办理'
)
self
.
up_order_search
(
order_code
=
order_code
)
self
.
list_page
.
open_order
(
'订单号'
)
self
.
button
.
transact
()
self
.
list_page
.
edit_iframe_is_show
()
component/GuKeYiTiHua/StorageManage/StorageInfo/__init__.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/3/12
# 描述:
component/GuKeYiTiHua/StorageManage/StorageInfo/available_storage.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/3/12
# 描述: 现有库存
import
logging
import
allure
from
component.GuKeYiTiHua
import
iframe
,
list_page
,
menu
,
button
,
order_detail_table
from
component.GuKeYiTiHua.StorageManage
import
first_menu
log
=
logging
.
getLogger
(
__name__
)
class
AvailableStorage
(
object
):
third_menu
=
'现有库存'
def
__init__
(
self
):
self
.
iframe
=
iframe
self
.
menu
=
menu
self
.
list_page
=
list_page
self
.
button
=
button
@
allure
.
step
(
'打开菜单:{}'
.
format
(
third_menu
))
def
open_menu_available_storage
(
self
):
self
.
iframe
.
out_frame
()
self
.
menu
.
open_menu
(
first_menu
,
self
.
third_menu
)
@
allure
.
step
(
'查询:{}-批次库存'
.
format
(
third_menu
))
def
available_storage_batch_search
(
self
,
tap_name
=
'批次库存'
,
field
=
'批次/序列'
,
text
=
None
,
count
=
1
):
self
.
list_page
.
order_search
(
self
.
third_menu
,
tap_name
,
field
,
text
,
count
)
@
allure
.
step
(
'查询:{}-商品库存'
.
format
(
third_menu
))
def
available_storage_good_search
(
self
,
tap_name
=
'商品库存'
,
field
=
None
,
text
=
None
,
count
=
1
):
field
=
[
'仓库编码'
,
'商品编码'
]
if
field
is
None
else
field
self
.
list_page
.
order_search
(
self
.
third_menu
,
tap_name
,
field
,
text
,
count
)
component/GuKeYiTiHua/StorageManage/StorageInfo/serial_access_record.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/3/12
# 描述: 序列号出入记录
import
logging
import
allure
from
component.GuKeYiTiHua
import
iframe
,
list_page
,
menu
,
button
,
order_detail_table
from
component.GuKeYiTiHua.StorageManage
import
first_menu
log
=
logging
.
getLogger
(
__name__
)
class
SerialAccessRecord
(
object
):
third_menu
=
'序列号出入记录'
def
__init__
(
self
):
self
.
iframe
=
iframe
self
.
menu
=
menu
self
.
list_page
=
list_page
self
.
button
=
button
@
allure
.
step
(
'打开菜单:{}'
.
format
(
third_menu
))
def
open_menu_serial_access_record
(
self
):
self
.
iframe
.
out_frame
()
self
.
menu
.
open_menu
(
first_menu
,
self
.
third_menu
)
@
allure
.
step
(
'查询:{}'
.
format
(
third_menu
))
def
serial_access_record_search
(
self
,
tap_name
=
None
,
field
=
'订单号'
,
text
=
None
,
count
=
1
):
self
.
list_page
.
order_search
(
self
.
third_menu
,
tap_name
,
field
,
text
,
count
)
component/GuKeYiTiHua/StorageManage/StorageInfo/serial_storage.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/3/12
# 描述: 序列号库存
import
logging
import
allure
from
component.GuKeYiTiHua
import
iframe
,
list_page
,
menu
,
button
,
order_detail_table
from
component.GuKeYiTiHua.StorageManage
import
first_menu
log
=
logging
.
getLogger
(
__name__
)
class
SerialStorage
(
object
):
third_menu
=
'序列号库存'
def
__init__
(
self
):
self
.
iframe
=
iframe
self
.
menu
=
menu
self
.
list_page
=
list_page
self
.
button
=
button
@
allure
.
step
(
'打开菜单:{}'
.
format
(
third_menu
))
def
open_menu_serial_storage
(
self
):
self
.
iframe
.
out_frame
()
self
.
menu
.
open_menu
(
first_menu
,
self
.
third_menu
)
@
allure
.
step
(
'查询:{}'
.
format
(
third_menu
))
def
serial_storage_search
(
self
,
tap_name
=
None
,
field
=
'订单号'
,
text
=
None
,
count
=
1
):
self
.
iframe
.
to_main_iframe
()
self
.
menu
.
click
(
"//a[text()='展开 ']"
)
self
.
list_page
.
order_search
(
self
.
third_menu
,
tap_name
,
field
,
text
,
count
)
component/GuKeYiTiHua/StorageManage/StorageInfo/storage_access_record.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/3/12
# 描述: 库存出入记录
import
logging
import
allure
from
component.GuKeYiTiHua
import
iframe
,
list_page
,
menu
,
button
,
order_detail_table
from
component.GuKeYiTiHua.StorageManage
import
first_menu
log
=
logging
.
getLogger
(
__name__
)
class
StorageAccessRecord
(
object
):
third_menu
=
'库存出入记录'
def
__init__
(
self
):
self
.
iframe
=
iframe
self
.
menu
=
menu
self
.
list_page
=
list_page
self
.
button
=
button
@
allure
.
step
(
'打开菜单:{}'
.
format
(
third_menu
))
def
open_menu_storage_access_record
(
self
):
self
.
iframe
.
out_frame
()
self
.
menu
.
open_menu
(
first_menu
,
self
.
third_menu
)
@
allure
.
step
(
'查询:{}'
.
format
(
third_menu
))
def
storage_access_record_search
(
self
,
tap_name
=
None
,
field
=
'订单号'
,
text
=
None
,
count
=
1
):
self
.
list_page
.
order_search
(
self
.
third_menu
,
tap_name
,
field
,
text
,
count
)
component/GuKeYiTiHua/StorageManage/StorageInfo/storage_info_integration.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/3/12
# 描述: 库存信息校验集成
from
page.GuKeYiTiHua.Public.common
import
CommonElement
from
unit.public.DataDic
import
DataDic
class
StorageInfo
(
object
):
def
__init__
(
self
):
pass
def
storage_info_check
(
self
):
pass
component/GuKeYiTiHua/StorageManage/StorageInfo/storage_occupy_record.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/3/12
# 描述: 库存占用记录
import
logging
import
allure
from
component.GuKeYiTiHua
import
iframe
,
list_page
,
menu
,
button
,
order_detail_table
from
component.GuKeYiTiHua.StorageManage
import
first_menu
log
=
logging
.
getLogger
(
__name__
)
class
StorageOccupyRecord
(
object
):
third_menu
=
'库存占用记录'
def
__init__
(
self
):
self
.
iframe
=
iframe
self
.
menu
=
menu
self
.
list_page
=
list_page
self
.
button
=
button
@
allure
.
step
(
'打开菜单:{}'
.
format
(
third_menu
))
def
open_menu_storage_occupy_record
(
self
):
self
.
iframe
.
out_frame
()
self
.
menu
.
open_menu
(
first_menu
,
self
.
third_menu
)
@
allure
.
step
(
'查询:{}'
.
format
(
third_menu
))
def
storage_occupy_record_search
(
self
,
tap_name
=
'库存占用'
,
field
=
'订单号'
,
text
=
None
,
count
=
1
):
"""
param tap_name: 库存占用、序列号占用、库存占用历史、序列号占用历史
"""
self
.
menu
.
click
(
"//a[text()='展开 ']"
)
self
.
list_page
.
order_search
(
self
.
third_menu
,
tap_name
,
field
,
text
,
count
)
component/GuKeYiTiHua/StorageManage/StorageOut/__init__.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/2/20
# 描述:
component/GuKeYiTiHua/StorageManage/StorageOut/storage_out_integration.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/2/23
# 描述: 仓库出库集成
import
allure
from
component.GuKeYiTiHua.StorageManage.StorageOut.warehouse_check
import
WarehouseCheck
from
component.GuKeYiTiHua.StorageManage.StorageOut.warehouse_delivery
import
WarehouseDelivery
from
component.GuKeYiTiHua.StorageManage.StorageOut.warehouse_pick
import
WarehousePick
from
page.GuKeYiTiHua.Public.common
import
CommonElement
from
unit.public.DataDic
import
DataDic
class
StorageOut
(
object
):
def
__init__
(
self
):
self
.
dd
=
DataDic
()
self
.
common
=
CommonElement
()
self
.
wd
=
WarehouseDelivery
()
self
.
wp
=
WarehousePick
()
self
.
wc
=
WarehouseCheck
()
def
storage_out_integration
(
self
,
order_code
,
lines
):
"""
parameter field_value: 订单号
parameter check_data: [[商品编码, 发货数量, 复核数量], ...]
"""
# 仓库发货
with
allure
.
step
(
"仓库:发货"
):
self
.
wd
.
open_menu_surgery_require
()
self
.
wd
.
all_order_delivery
(
order_code
,
lines
)
self
.
wd
.
delivery_confirm
(
order_code
=
order_code
)
self
.
wd
.
out_order_search
(
tap_name
=
'已办'
,
order_code
=
order_code
)
self
.
common
.
close_tap
()
# 仓库拣货
with
allure
.
step
(
"仓库:拣货"
):
self
.
wp
.
open_menu_warehouse_pick
()
self
.
wp
.
pick_confirm
(
order_code
)
self
.
wp
.
pick_order_search
(
tap_name
=
'已办'
,
order_code
=
order_code
)
self
.
common
.
close_tap
()
# 出库复核
with
allure
.
step
(
"仓库:复核"
):
self
.
wc
.
open_menu_warehouse_check
()
self
.
wc
.
check_confirm
(
order_code
)
self
.
wc
.
check_order_search
(
tap_name
=
'已办'
,
order_code
=
order_code
)
self
.
common
.
close_tap
()
component/GuKeYiTiHua/StorageManage/StorageOut/warehouse_check.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/2/20
# 描述: 出库复核页面
import
logging
import
allure
import
pytest
from
time
import
sleep
from
component.GuKeYiTiHua
import
iframe
,
menu
,
list_page
,
button
,
order_detail_main
,
modal
,
\
order_detail_table
,
dbq
from
component.GuKeYiTiHua.StorageManage
import
first_menu
from
page.GuKeYiTiHua.Public.orderDetailPage
import
ScanTable
log
=
logging
.
getLogger
(
__name__
)
class
WarehouseCheck
(
object
):
third_menu
=
'出库复核'
def
__init__
(
self
):
self
.
dbq
=
dbq
self
.
iframe
=
iframe
self
.
menu
=
menu
self
.
list_page
=
list_page
self
.
button
=
button
self
.
order_detail_main
=
order_detail_main
self
.
order_detail_table
=
order_detail_table
self
.
modal
=
modal
self
.
scan_table
=
ScanTable
()
@
allure
.
step
(
'打开菜单:{}'
.
format
(
third_menu
))
def
open_menu_warehouse_check
(
self
):
self
.
iframe
.
out_frame
()
self
.
menu
.
open_menu
(
first_menu
,
self
.
third_menu
)
@
allure
.
step
(
'查询:{}'
.
format
(
third_menu
))
def
check_order_search
(
self
,
tap_name
=
'待办'
,
order_code
=
None
,
count
=
1
):
self
.
list_page
.
order_search
(
self
.
third_menu
,
tap_name
,
'订单号'
,
order_code
,
count
)
@
allure
.
step
(
'{}'
.
format
(
third_menu
))
def
check_confirm
(
self
,
order_code
):
"""
param check_data: [[商品编码,复核数量], ...]
"""
log
.
info
(
'复核确认'
)
self
.
check_order_search
(
order_code
=
order_code
)
self
.
list_page
.
open_order
(
order_code
=
order_code
)
warehouse
=
self
.
order_detail_main
.
get_element_text
(
'仓库编码 '
)
goods_batch_info
=
[]
goods_list
=
self
.
order_detail_table
.
get_details
([
'商品编码'
,
'拣货数量'
,
'批次/序号'
])
for
good
in
goods_list
:
good_code
=
good
[
0
]
pick_number
=
int
(
good
[
1
])
check_number
=
pick_number
batch_no
=
good
[
2
]
serial
=
[]
good_serial_flag
=
self
.
dbq
.
get_serial_flag
(
warehouse
,
good_code
)
if
good_serial_flag
!=
'Y'
:
self
.
order_detail_table
.
input_text
(
'复核数量'
,
good_code
,
check_number
)
else
:
# 序列号商品扫码
self
.
button
.
click_button
(
button_name
=
'复核扫码'
,
end_str
=
''
)
self
.
iframe
.
to_bar_iframe
(
name
=
'出库复核扫码'
)
# 通过数据库查询可用序列号
serial_info
=
self
.
dbq
.
get_enable_serial
(
warehouse
,
good_code
,
batch_no
,
check_number
)
log
.
info
(
'序列号info:
\n
{}'
.
format
(
serial_info
))
# 商品序列号不足测试结束
pytest
.
fail
(
'商品【{}】可用序列号不足'
.
format
(
good_code
))
if
len
(
serial_info
)
<
check_number
else
0
for
serial_item
in
serial_info
:
serial
.
append
(
serial_item
[
0
])
for
i
in
range
(
check_number
):
self
.
order_detail_main
.
text_input_item
(
'序列号 '
,
serial
[
i
],
enter
=
True
)
while
self
.
scan_table
.
check_enter_result
(
serial
[
i
])
is
False
:
sleep
(
1
)
self
.
button
.
click_button
(
button_name
=
'提交'
)
while
self
.
menu
.
wait_element
(
"//span[text()='验收扫码']/ancestor::div[@class='el-overlay']"
,
wait_time
=
3
)
is
True
:
sleep
(
1
)
goods_batch_info
.
append
({
'good'
:
good_code
,
'sf'
:
good_serial_flag
,
'batch'
:
batch_no
,
'check'
:
check_number
,
'serial'
:
serial
})
self
.
iframe
.
out_frame
()
self
.
iframe
.
to_main_iframe
()
self
.
iframe
.
to_edit_iframe
()
if
pick_number
>
check_number
:
self
.
order_detail_table
.
input_text
(
'差异数量'
,
good_code
,
pick_number
-
check_number
)
self
.
order_detail_table
.
input_text
(
'差异原因'
,
good_code
,
'复核差异'
)
log
.
info
(
'商品序列号信息:{}'
.
format
(
goods_batch_info
))
self
.
menu
.
dd
.
set_value
(
'goods_batch_info'
,
goods_batch_info
)
self
.
button
.
click_button
(
button_name
=
'复核确认'
)
self
.
list_page
.
edit_iframe_is_show
()
component/GuKeYiTiHua/StorageManage/StorageOut/warehouse_delivery.py
0 → 100644
View file @
22b60c14
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/2/20
# 描述: 仓库发货页面
import
logging
import
allure
from
component.GuKeYiTiHua
import
iframe
,
menu
,
list_page
,
button
,
order_detail_main
,
modal
from
component.GuKeYiTiHua.StorageManage
import
first_menu
log
=
logging
.
getLogger
(
__name__
)
class
WarehouseDelivery
(
object
):
third_menu
=
'仓库发货'
def
__init__
(
self
):
self
.
iframe
=
iframe
self
.
menu
=
menu
self
.
list_page
=
list_page
self
.
button
=
button
self
.
order_detail_main
=
order_detail_main
self
.
modal
=
modal
@
allure
.
step
(
'打开菜单:{}'
.
format
(
third_menu
))
def
open_menu_surgery_require
(
self
):
self
.
iframe
.
out_frame
()
self
.
menu
.
open_menu
(
first_menu
,
self
.
third_menu
)
@
allure
.
step
(
'查询:{}'
.
format
(
third_menu
))
def
out_order_search
(
self
,
tap_name
=
'待办'
,
order_code
=
None
,
count
=
1
):
self
.
list_page
.
order_search
(
self
.
third_menu
,
tap_name
,
'订单号'
,
order_code
,
count
)
@
allure
.
step
(
'全选当前数据'
)
def
all_order_delivery
(
self
,
order_code
,
count
):
self
.
out_order_search
(
'出库订单池'
,
order_code
,
count
)
self
.
list_page
.
checked_order
(
0
)
self
.
button
.
all_delivery
()
self
.
button
.
click_button
(
"//*[contains(string(), '提示')]/ancestor::div[@class='el-message-box']"
,
'确定'
)
@
allure
.
step
(
'{}'
.
format
(
third_menu
))
def
delivery_confirm
(
self
,
order_code
):
self
.
out_order_search
(
order_code
=
order_code
)
self
.
list_page
.
open_order
(
'出货订单号'
)
self
.
button
.
click_button
(
button_name
=
'发货确认'
)
self
.
list_page
.
edit_iframe_is_show
()
Prev
1
2
3
4
5
6
Next
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