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
Commits
16c3516a
Commit
16c3516a
authored
Nov 22, 2023
by
17322369953
Browse files
air框架改造-登录案例改造
parent
9f105e0a
Changes
83
Hide whitespace changes
Inline
Side-by-side
test_sell/page_sell.py
0 → 100644
View file @
16c3516a
# author:qinguanglei
# ddate:2023/11/22 9:17
from
test_login.page_login
import
PageLogin
from
selenium.webdriver.remote.webdriver
import
By
class
PageSell
(
PageLogin
):
"""基础元素"""
# 销售管理
_sell_manage_locator
=
(
By
.
XPATH
,
'//div[@class="menuNavItem" and @sysname="销售管理"]'
)
# 销售业务
_sell_locator
=
(
By
.
XPATH
,
'//div[@class="sec-menu" and @navname="销售业务"]'
)
# 销退业务
_sell_return_locator
=
(
By
.
XPATH
,
'//div[@class="sec-menu" and @navname="销退业务"]'
)
# 销售订单
_sell_so_locator
=
(
By
.
XPATH
,
'//div[@class="third-menu" and @navname="销售订单"]'
)
# 销售iframe
_iframe_sell_locator
=
(
By
.
XPATH
,
'//iframe[@class="metro-main-frame" and contains(@src,"sales")]'
)
# 新建按钮
_new_locator
=
(
By
.
XPATH
,
'//span[text() = "新建"]'
)
# 对话框iframe,填写订单信息需要
_sub_iframe_dialog_locator
=
(
By
.
XPATH
,
'//iframe[contains(@name,"dialog-iframe")]'
)
"""公司信息元素"""
# 请求查询公司信息按钮元素
_company_request_locator
=
(
By
.
XPATH
,
'//input[starts-with(@id,"el-id-") and contains(@id,"-106")]/../span/span/i'
)
# 公司信息输入元素
_company_input_locator
=
(
By
.
XPATH
,
'//input[@placeholder = "模糊检索:公司名称,公司编码"]'
)
# 公司信息搜索元素
_company_search_locator
=
(
By
.
XPATH
,
'//input[@placeholder = "模糊检索:公司名称,公司编码"]/../span/span/i'
)
# 公司表dialog body
_company_dialog_locator
=
(
By
.
XPATH
,
'//div[starts-with(@id,"el-id-") and contains(@id,"-21") and @class="el-dialog__body"]'
)
_company_table_locator
=
(
By
.
CLASS_NAME
,
"el-table__body"
)
# 公司确定按钮
_company_table_ensure_locator
=
(
By
.
XPATH
,
'//span[@class="ensureBtn"]/button/span[text() = "确定"]'
)
# 主体信息
_main_info_locator
=
(
By
.
ID
,
'tab-7667cf55-c391-4f2c-a5ba-c0f6d27b6d3a'
)
'''仓库信息'''
# 仓库输入内容
_warehouse_content_locator
=
(
By
.
XPATH
,
'//input[starts-with(@id,"el-id-") and contains(@id,"-122")]'
)
# 请求查询仓库元素
_ware_request_locator
=
(
By
.
XPATH
,
'//input[starts-with(@id,"el-id-") and contains(@id,"-122")]/../span/span/i'
)
# _ware_request_locator = (By.XPATH, '//div[text() = "仓库名称"]/../div[@class="el-form-item__content"]/descendant::i[@class="awsui-iconfont" and @style="cursor: pointer;"]')
# _ware_request_locator = (By.XPATH,'//div[@id =contains(text(),"仓库名称")]')
# 仓库输入元素
_ware_input_locator
=
(
By
.
XPATH
,
'//input[@placeholder = "模糊检索:仓库名称,仓库编码"]'
)
# 仓库搜索元素
_ware_search_locator
=
(
By
.
XPATH
,
'//input[@placeholder = "模糊检索:仓库名称,仓库编码"]/../span/span/i'
)
# _ware_dialog_locator = (
# By.XPATH, '//div[starts-with(@id,"el-id-") and contains(@id,"-26") and @class="el-dialog__body"]')
# _ware_dialog_locator = (By.XPATH, '//div[@role="dialog" and @aria-label="选择仓库"]')
_ware_dialog_locator
=
(
By
.
XPATH
,
'//div[starts-with(@id,"el-id-") and contains(@id,"-32") and @class="el-dialog__body"]'
)
_ware_table_locator
=
'By.XPATH, "//table[@class = "el-table__body""'
# 仓库表确认元素---这中确定看着可以统一
_ware_table_ensure_locator
=
(
By
.
XPATH
,
'//span[@class="ensureBtn"]/button/span[text() = "确定"]'
)
"""客户信息"""
# 客户内容
#_supplier_content_locator = (By.XPATH, '//input[starts-with(@id,"el-id-") and contains(@id,"-119")]')
# 查询客户请求元素
#_custom_request_locator = (By.XPATH, '//input[starts-with(@id,"el-id-") and contains(@id,"-119")]/../span/span/i')
#_custom_request_locator = (By.XPATH, '//div[@class="el-form-item__label" and contains(text(),"客户名称")]/../div[2]/*/i')
_custom_request_locator
=
(
By
.
XPATH
,
'//div[text() = "客户名称 "]/../div[2]'
)
#_custom_request_locator = (By.XPATH, '//div[@class="el-form-item__label" and contains(@id,"-18")]')
# 供应商输入信息
_supplier_input_locator
=
(
By
.
XPATH
,
'//input[@placeholder = "模糊检索:供应商名称,供应商编码"]'
)
# 供应商搜索元素
_supplier_search_locator
=
(
By
.
XPATH
,
'//input[@placeholder = "模糊检索:供应商名称,供应商编码"]/../span/span/i'
)
# 供应商表元素-----这个只能找绝对路径了,开发太狠了
_supplier_table_locator
=
(
By
.
XPATH
,
'/html/body/div[10]/div/div/div/div[1]/div[2]/div[1]/div/div/div/div[1]/div[3]/div/div[1]/div/table'
)
# 供应商dialog
_supplier_dialog_locator
=
(
By
.
XPATH
,
'//div[starts-with(@id,"el-id-") and contains(@id,"-20") and @class="el-dialog__body"]'
)
# 供应商表确定元素---这中确定看着可以统一
_supplier_table_ensure_locator
=
(
By
.
XPATH
,
'./span[@class="ensureBtn"]/button/span[text() = "确定"]'
)
_dialog_ensure_locator
=
'./*/span[@class="ensureBtn"]/button/span[text() = "确定"]'
'''协议信息'''
# 协议输入内容元素
_protocol_content_locator
=
(
By
.
XPATH
,
'//input[starts-with(@id,"el-id-") and contains(@id,"-124")]'
)
# 协议请求元素
_protocol_request_locator
=
(
By
.
XPATH
,
'//input[starts-with(@id,"el-id-") and contains(@id,"-109")]/../span/span/i'
)
# 协议输入元素
_protocol_input_locator
=
(
By
.
XPATH
,
'//input[@placeholder = "模糊检索:合同/协议号,合同号,项目编码,项目名称,业态编码,对方编码,产品线编码"]'
)
# 协议搜索元素
_protocol_search_locator
=
(
By
.
XPATH
,
'//input[@placeholder = "模糊检索:合同/协议号,合同号,项目编码,项目名称,业态编码,对方编码,产品线编码"]/../span/span/i'
)
# 协议dialog元素
_protocol_dialog_locator
=
(
By
.
XPATH
,
'//div[starts-with(@id,"el-id-") and contains(@id,"-36") and @class="el-dialog__body"]'
)
'''业务员信息'''
# 业务员输入内容元素
_businessman_content_locator
=
(
By
.
XPATH
,
'//input[starts-with(@id,"el-id-") and contains(@id,"-127")]'
)
# 业务员请求元素
_businessman_request_locator
=
(
By
.
XPATH
,
'//input[starts-with(@id,"el-id-") and contains(@id,"-110")]/../span/span/i'
)
# 业务员输入元素
_businessman_input_locator
=
(
By
.
XPATH
,
'//input[@placeholder="模糊检索:业务员编码,业务员名称,部门编码,部门名称"]'
)
# 业务员搜索元素
_businessman_search_locator
=
(
By
.
XPATH
,
'//input[@placeholder="模糊检索:业务员编码,业务员名称,部门编码,部门名称"]/../span/span/i'
)
# 业务员dialog元素
_businessman_dialog_locator
=
(
By
.
XPATH
,
'//div[starts-with(@id,"el-id-") and contains(@id,"-41") and @class="el-dialog__body"]'
)
'''商品信息'''
# 商品最高复选框
_merchandise_all_select_locator
=
(
By
.
XPATH
,
'/html/body/div[38]/div/div/div/div[1]/div[2]/div[1]/div/div[2]/div/div[1]/div[2]/table/thead/tr/th[1]/div/label'
)
# 商品录入按钮
_merchandise_locator
=
(
By
.
XPATH
,
'//span[text()="添加商品"]'
)
# 商品dialog
_merchandise_dialog_locator
=
(
By
.
XPATH
,
'//div[starts-with(@id,"el-id-") and contains(@id,"-136") and @class="el-dialog__body"]'
)
# 商品输入元素
_merchandise_input_locator
=
(
By
.
XPATH
,
'//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码"]'
)
# 商品搜索元素
_merchandise_search_locator
=
(
By
.
XPATH
,
'//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码"]/../span/span/i'
)
# dialog中的输入元素
_dialog_input_locator
=
'./*/input[@class="el-input__inner" and @placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码"]'
# dialog中的搜索元素
_dialog_search_locator
=
'./*/span[@class="el-input__prefix-inner"]/i'
"""表格中输入元素"""
_input_in_table_locator
=
'input'
# 保存按钮
# _save_locator = (By.XPATH, '//*[@id="process-toolbar"]/button[4]/span/text()')
_save_locator
=
(
By
.
XPATH
,
'//*[@id="process-toolbar"]/*/span[text()="保存"]'
)
# _submit_locator
_submit_locator
=
(
By
.
XPATH
,
'//*[@id="process-toolbar"]/*/span[text()="提交"]'
)
# 订单号
_order_no_locator
=
(
By
.
XPATH
,
'//*[@id="0b83dfe6-67bc-46bf-b271-5e768a59e415"]/div/div[2]/span'
)
# 商品明细表
_detail_table
=
(
By
.
XPATH
,
'//*[@id="a55ef0dd-0262-4caa-b701-684a33007ac5"]/div/div[2]/div/div/div[2]/div[2]/div[1]/div[2]/table'
)
# _detail_table = (
# By.XPATH, '//*[@id="a55ef0dd-0262-4caa-b701-684a33007ac5"]/*/table[@class="vxe-table--body"]')
"""基础元素操作"""
'''获取销售管理元素'''
def
get_sell_manage
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_sell_manage_locator
)
'''获取销售业务元素'''
def
get_sell
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_sell_locator
)
'''获取销退业务元素'''
def
get_sell_return
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_sell_return_locator
)
'''获取销售订单元素'''
def
get_sell_so
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_sell_so_locator
)
'''获取销售iframe元素'''
def
get_iframe_sell
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_iframe_sell_locator
)
'''获取新建按钮元素'''
def
get_new
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_new_locator
)
'''获取对话框iframe元素'''
def
get_sub_iframe_dialog
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_sub_iframe_dialog_locator
)
"""公司元素操作"""
'''获取查询公司请求按钮'''
def
get_company_request
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_company_request_locator
)
'''获取公司输入信息元素'''
def
get_company_input
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_company_input_locator
)
'''获取公司搜索按钮元素'''
def
get_company_search
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_company_search_locator
)
'''获取公司表元素'''
def
get_company_table
(
self
):
# return self.get_element_wait_presence(self._company_table_locator)
# 首先获取公司dialog
company_dialog
=
self
.
get_company_dialog
()
'''再从公司dialog中获取公司表'''
return
self
.
get_table_from_dialog
(
company_dialog
)
'''获取公司表确定按钮'''
def
get_company_table_ensure
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_company_table_ensure_locator
)
'''获取仓库信息'''
def
get_ware_info
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_ware_info_locator
)
'''获取主体信息'''
def
get_main_info
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_main_info_locator
)
'''仓库信息hold'''
'''获取仓库内容元素'''
def
get_warehouse_content
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_warehouse_content_locator
)
'''获取请求查询仓库元素'''
def
get_ware_request
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_ware_request_locator
)
'''获取仓库输入元素'''
def
get_ware_input
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_ware_input_locator
)
'''获取仓库搜索元素'''
def
get_ware_search
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_ware_search_locator
)
'''选择某行'''
def
select_one_row
(
self
,
row
):
tds
=
row
.
find_elements
(
By
.
TAG_NAME
,
"td"
)
span
=
tds
[
1
].
find_element
(
By
.
XPATH
,
'./div/label/span[1]'
)
span
.
click
()
'''获取仓库dialog'''
def
get_ware_dialog
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_ware_dialog_locator
)
'''获取仓库表元素'''
def
get_ware_table
(
self
):
ware_dialog
=
self
.
get_ware_dialog
()
return
self
.
get_table_from_dialog
(
ware_dialog
)
'''获取仓库表确定按钮'''
def
get_ware_table_ensure
(
self
):
ware_dialog
=
self
.
get_ware_dialog
()
return
ware_dialog
.
find_element
(
By
.
XPATH
,
'//span[@class="ensureBtn"]/button/span[text() = "确定"]'
)
# return self.get_child(ware_dialog, self._ware_table_ensure_locator)
"""客户元素操作"""
'''获取供应商内容元素'''
def
get_supplier_content
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_supplier_content_locator
)
'''获取客户请求元素'''
def
get_custom_request
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_custom_request_locator
)
'''获取供应商dialog元素'''
def
get_supplier_dialog
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_supplier_dialog_locator
)
'''从dialog中获取输入元素'''
def
get_input_from_dialog
(
self
,
dialog_element
):
result
=
dialog_element
.
find_element
(
By
.
XPATH
,
self
.
_dialog_input_locator
)
self
.
wait_seconds
(
self
.
time_seconds
)
return
result
'''从dialog中获取搜索元素'''
def
get_search_from_dialog
(
self
,
dialog_element
):
search
=
dialog_element
.
find_element
(
By
.
XPATH
,
self
.
_dialog_search_locator
)
self
.
wait_seconds
(
self
.
time_seconds
)
return
search
'''从dialog中获取表信息'''
def
get_table_from_dialog
(
self
,
dialog_element
):
tables
=
dialog_element
.
find_elements
(
By
.
TAG_NAME
,
"table"
)
self
.
wait_seconds
(
self
.
time_seconds
)
return
tables
[
1
]
'''从dialog中获取确定按钮'''
def
get_ensure_from_dialog
(
self
,
dialog_element
):
ensure
=
dialog_element
.
find_element
(
By
.
XPATH
,
self
.
_dialog_ensure_locator
)
return
ensure
"""从表格中的一个栏位中获取输入元素"""
def
get_input_from_table_field
(
self
,
field
):
element
=
field
.
find_element
(
By
.
XPATH
,
self
.
_input_in_table_locator
)
return
element
'''获取供应商请求元素'''
def
get_supplier_request
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_supplier_request_locator
)
'''获取供应商输入元素'''
def
get_supplier_input
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_supplier_input_locator
)
'''获取供应商搜索元素'''
def
get_supplier_search
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_supplier_search_locator
)
'''获取供应商表元素'''
def
get_supplier_table
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_supplier_table_locator
)
'''获取供应商表确定元素'''
def
get_supplier_table_ensure
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_supplier_table_ensure_locator
)
'''获取公司dialog'''
def
get_company_dialog
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_company_dialog_locator
)
'''协议信息hold'''
'''获取协议输入内容'''
def
get_protocol_context
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_protocol_content_locator
)
'''获取协议请求元素'''
def
get_protocol_request
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_protocol_request_locator
)
'''获取协议输入元素'''
def
get_protocol_input
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_protocol_input_locator
)
'''获取协议搜索元素'''
def
get_protocol_search
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_protocol_search_locator
)
'''获取协议dialog'''
def
get_protocol_dialog
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_protocol_dialog_locator
)
'''业务员信息hold'''
'''获取业务员输入信息'''
def
get_businessman_content
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_businessman_content_locator
)
'''获取业务员请求元素'''
def
get_businessman_request
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_businessman_request_locator
)
'''获取业务员输入元素'''
def
get_businessman_input
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_businessman_input_locator
)
'''获取业务员搜索元素'''
def
get_businessman_search
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_businessman_search_locator
)
'''获取业务员dialog'''
def
get_businessman_dialog
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_businessman_dialog_locator
)
'''商品信息hold'''
'''获取商品全选复选框'''
def
get_merchandise_all_select
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_merchandise_all_select_locator
)
'''商品录入按钮'''
def
get_merchandise
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_merchandise_locator
)
'''商品dialog按钮'''
def
get_merchandise_dialog
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_merchandise_dialog_locator
)
'''商品输入元素'''
def
get_merchandise_input
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_merchandise_input_locator
)
'''商品搜索元素'''
def
get_merchandise_search
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_merchandise_search_locator
)
'''保存按钮元素'''
def
get_save
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_save_locator
)
'''订单号'''
def
get_order_no
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_order_no_locator
)
'''商品明细表'''
def
get_detail_table
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_detail_table
)
'''订单提交'''
def
get_submit_element
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_submit_locator
)
test_sell/steps_sell.py
0 → 100644
View file @
16c3516a
# author:qinguanglei
# ddate:2023/11/22 9:27
import
traceback
import
allure
from
common
import
constant
from
common.logger
import
log
from
common.read_yaml
import
get_filed_from_yaml
from
common.verifycode
import
VerifyCode
from
test_sell.page_sell
import
PageSell
module
=
'test_sell'
class
StepsSell
(
object
):
def
__init__
(
self
,
driver
):
self
.
page_sell
=
PageSell
(
driver
)
self
.
driver
=
driver
@
allure
.
step
(
"打开浏览器"
)
def
open_browser
(
self
):
try
:
log
.
info
(
'当前url: %s'
,
get_filed_from_yaml
(
module
,
"data"
,
"url"
))
self
.
page_sell
.
open_page
(
get_filed_from_yaml
(
module
,
"data"
,
"url"
))
except
Exception
as
e
:
log
.
error
(
f
'打开浏览器问题:
{
e
.
__doc__
}{
traceback
.
format_exc
()
}
'
)
assert
False
@
allure
.
step
(
"登录"
)
def
login
(
self
):
try
:
# 获取账号输入元素
account_element
=
self
.
page_sell
.
get_account
()
# 获取密码输入元素
password_element
=
self
.
page_sell
.
get_password
()
# 获取账号与密码
account
=
get_filed_from_yaml
(
module
,
"data"
,
"account"
)
password
=
get_filed_from_yaml
(
module
,
"data"
,
"password"
)
# 填充账号密码
self
.
page_sell
.
input_text
(
account_element
,
account
)
self
.
page_sell
.
input_text
(
password_element
,
password
)
# 登录特殊处理一下,验证码最多尝试5次,有一次成功,则成功。若5次都失败,案例直接失败
max_retry
=
5
i
=
5
while
i
>
0
:
# 先获取验证码图片元素
verify_code_element
=
self
.
page_sell
.
get_verify_image
()
# 获取验证码输入元素
verify_input_element
=
self
.
page_sell
.
get_verify_code
()
# 获取验证码中的文字信息
verify_code_text
=
VerifyCode
(
verify_code_element
,
self
.
driver
).
indentify_verify_image
()
# 填充验证码
self
.
page_sell
.
input_text
(
verify_input_element
,
verify_code_text
)
log
.
info
(
f
'填充的验证码内容为
{
verify_code_text
}
。'
)
# 获取登录按钮
login_button_element
=
self
.
page_sell
.
get_login_button
()
# 点击登录
self
.
page_sell
.
single_click
(
login_button_element
)
# 判断登录是否成功,登录成功会切换到另外一个页面,通过页面title来判断是否切换成功
if
self
.
page_sell
.
get_window_title
()
!=
constant
.
LOGIN_SUCCESS
:
# 表示不登录成功,此时将1减去1
i
-=
1
log
.
warn
(
'执行登录失败一次,次数多了将直接导致案例失败。'
)
else
:
# 表示登录成功,跳出循环
log
.
info
(
'登录成功,开始执行案例。'
)
break
if
i
<=
0
:
log
.
error
(
f
'验证码已经连续
{
max_retry
}
次识别失败,本案例执行时登录失败,请检查环境是否出现问题,特别是分辨率是否调整。'
)
assert
False
log
.
info
(
f
'登录成功。'
)
except
Exception
as
e
:
log
.
error
(
f
'登录过程问题:
{
e
.
__doc__
}{
traceback
.
format_exc
()
}
'
)
assert
False
@
allure
.
step
(
"进入销售订单界面"
)
def
enter_sell_so_page
(
self
):
try
:
# 定位销售管理元素
sell_manage_button
=
self
.
page_sell
.
get_sell_manage
()
# 鼠标移动到采购管理按钮
self
.
page_sell
.
move_to_element
(
sell_manage_button
)
# 定位到隐藏的销售业务按钮
sell_button
=
self
.
page_sell
.
get_sell
()
# 鼠标移动到销售业务按钮
self
.
page_sell
.
move_to_element
(
sell_button
)
# 定位到销售订单按钮
sell_so_button
=
self
.
page_sell
.
get_sell_so
()
# 鼠标移动到销售订单按钮
self
.
page_sell
.
move_to_element
(
sell_so_button
)
# 点击销售订单
self
.
page_sell
.
single_click
(
sell_so_button
)
log
.
info
(
f
'成功进去销售订单页面。'
)
except
Exception
as
e
:
log
.
error
(
f
'进入销售订单界面问题:
{
e
.
__doc__
}{
traceback
.
format_exc
()
}
'
)
assert
False
@
allure
.
step
(
"打开新建销售订单界面"
)
def
enter_new_so_frame
(
self
):
try
:
# 先进入到销售iframe
iframe_sell
=
self
.
page_sell
.
get_iframe_sell
()
# 转到这个iframe下
self
.
page_sell
.
switch_to_iframe
(
iframe_sell
)
# 获取新建按钮
new_create_button
=
self
.
page_sell
.
get_new
()
# 点击新建
self
.
page_sell
.
single_click
(
new_create_button
)
# 后续操作在一对话框形式的iframe里,切换到这个子iframe
sub_iframe_dialog
=
self
.
page_sell
.
get_sub_iframe_dialog
()
self
.
page_sell
.
switch_to_iframe
(
sub_iframe_dialog
)
log
.
info
(
f
'成功打开新建销售订单界面。'
)
except
Exception
as
e
:
log
.
error
(
f
'进入新建销售订单界面问题:
{
e
.
__doc__
}{
traceback
.
format_exc
()
}
'
)
assert
False
@
allure
.
step
(
"输入客户"
)
def
input_custom
(
self
):
try
:
# 先从yaml中获取供应商内容
custom_content
=
get_filed_from_yaml
(
module
,
"data"
,
"custom"
)
# 触发客户请求按钮
custom_request
=
self
.
page_sell
.
get_custom_request
()
self
.
page_sell
.
single_click
(
custom_request
)
# 输入供应商信息
supplier_input
=
self
.
page_sell
.
get_supplier_input
()
self
.
page_sell
.
input_text
(
supplier_input
,
custom_content
)
# 开始查询,点击搜索按钮查询
supplier_search
=
self
.
page_sell
.
get_supplier_search
()
self
.
page_sell
.
single_click
(
supplier_search
)
# 获取供应商dialog
supplier_dialog
=
self
.
page_sell
.
get_supplier_dialog
()
# 获取查询结果,先获取结果表
supplier_table
=
self
.
page_sell
.
get_table_from_dialog
(
supplier_dialog
)
# 获取供应商表中的所有行
supplier_table_rows
=
self
.
page_sell
.
get_all_rows_from_tale
(
supplier_table
)
# 遍历供应商
for
i
,
current_row
in
enumerate
(
supplier_table_rows
):
self
.
page_sell
.
single_click
(
current_row
)
# 获取当前供应商的列信息
columns
=
self
.
page_sell
.
get_all_columns_from_row
(
current_row
)
# 遍历列内容,这里只是先打印出日志,便于查看问题
for
j
,
curr_column
in
enumerate
(
columns
):
log
.
info
(
'查询出供应商表,的第 %s 行,第 %s 列的内容为 %s'
%
(
i
,
j
,
self
.
page_sell
.
get_text
(
curr_column
)))
# 挑选出一列,因为前端是模糊查询,有可能是供应商编码,有可能是供应商名称,匹配第一条即可
if
(
custom_content
in
self
.
page_sell
.
get_text
(
columns
[
1
]))
or
(
custom_content
in
self
.
page_sell
.
get_text
(
columns
[
2
])):
'''选中当前行'''
# self.page_buy.single_click(current_row)
# self.page_buy.single_click(columns[1])
current_row
.
click
()
'''点击确认'''
supplier_table_ensure
=
self
.
page_sell
.
get_ensure_from_dialog
(
supplier_dialog
)
self
.
page_sell
.
single_click
(
supplier_table_ensure
)
'''选中后退出,不再查询'''
break
log
.
info
(
f
'客户
{
custom_content
}
输入成功。'
)
except
Exception
as
e
:
log
.
error
(
f
'输入客户问题:
{
e
.
__doc__
}{
traceback
.
format_exc
()
}
'
)
assert
False
test_sell/test_sell_one_nonseq_commodity.py
0 → 100644
View file @
16c3516a
# author:qinguanglei
# ddate:2023/11/22 9:47
import
time
import
allure
import
pytest
from
test_sell.steps_sell
import
StepsSell
@
allure
.
feature
(
'销售模块'
)
class
TestSellOneNonseqCommodity
(
object
):
@
pytest
.
fixture
(
scope
=
'function'
,
autouse
=
True
)
def
housework
(
self
,
driver_fixture
):
# 驱动器从fixture传来
self
.
driver
=
driver_fixture
@
allure
.
story
(
'销售一个非序列号商品'
)
def
test_sell_one_nonseq_commodity
(
self
):
# 载入步骤集合
steps_sell
=
StepsSell
(
self
.
driver
)
# 打开浏览器
steps_sell
.
open_browser
()
# 登录
steps_sell
.
login
()
# 进入销售订单页面
steps_sell
.
enter_sell_so_page
()
# 进入新建单据界面
steps_sell
.
enter_new_so_frame
()
# 输入客户
steps_sell
.
input_custom
()
# 输入仓库
# steps_buy.input_warehouse()
# 输入合同协议
# steps_buy.input_protocol()
# 输入业务员员
# steps_buy.input_businessman()
# 添加商品
# steps_buy.add_merchandise()
# 商品明细处理
# steps_buy.detail_proc()
# 订单保存处理
# steps_buy.save_proc()
# 订单提交
# steps_buy.submit_proc()
time
.
sleep
(
15
)
Prev
1
2
3
4
5
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