Commit 22b60c14 authored by 齐 振鋆's avatar 齐 振鋆
Browse files

个人代码迁移

parent c6ba7a8b
Pipeline #10140 failed with stages
in 3 seconds
'''
@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()
'''
@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
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/2/22
# 描述:
# -*- 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)
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2022/8/11
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/2/20
# 描述:
# -*- 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()
# -*- 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()
# -*- 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()
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/3/12
# 描述:
# -*- 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)
# -*- 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)
# -*- 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)
# -*- 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)
# -*- 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
# -*- 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)
# -*- coding:utf-8 -*-
# 作者:齐振鋆
# 日期:2023/2/20
# 描述:
# -*- 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()
# -*- 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()
# -*- 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()
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment