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
a3601612
Commit
a3601612
authored
Dec 08, 2023
by
17322369953
Browse files
air更新
parent
6c225100
Changes
63
Expand all
Hide whitespace changes
Inline
Side-by-side
.idea/.gitignore
deleted
100644 → 0
View file @
6c225100
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
.idea/autotest-airtest-web-sc.iml
View file @
a3601612
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<module
type=
"PYTHON_MODULE"
version=
"4"
>
<module
type=
"PYTHON_MODULE"
version=
"4"
>
<component
name=
"NewModuleRootManager"
>
<component
name=
"NewModuleRootManager"
>
<content
url=
"file://$MODULE_DIR$"
/>
<content
url=
"file://$MODULE_DIR$"
>
<excludeFolder
url=
"file://$MODULE_DIR$/venv"
/>
</content>
<orderEntry
type=
"jdk"
jdkName=
"Python 3.7"
jdkType=
"Python SDK"
/>
<orderEntry
type=
"jdk"
jdkName=
"Python 3.7"
jdkType=
"Python SDK"
/>
<orderEntry
type=
"sourceFolder"
forTests=
"false"
/>
<orderEntry
type=
"sourceFolder"
forTests=
"false"
/>
</component>
</component>
<component
name=
"PyDocumentationSettings"
>
<option
name=
"format"
value=
"PLAIN"
/>
<option
name=
"myDocStringFormat"
value=
"Plain"
/>
</component>
<component
name=
"TemplatesService"
>
<option
name=
"TEMPLATE_CONFIGURATION"
value=
"Jinja2"
/>
<option
name=
"TEMPLATE_FOLDERS"
>
<list>
<option
value=
"$MODULE_DIR$/templates"
/>
</list>
</option>
</component>
<component
name=
"TestRunnerService"
>
<option
name=
"PROJECT_TEST_RUNNER"
value=
"py.test"
/>
</component>
</module>
</module>
\ No newline at end of file
.idea/encodings.xml
deleted
100644 → 0
View file @
6c225100
<?xml version="1.0" encoding="UTF-8"?>
<project
version=
"4"
>
<component
name=
"Encoding"
>
<file
url=
"file://$PROJECT_DIR$/common/data"
charset=
"GBK"
/>
</component>
</project>
\ No newline at end of file
.idea/inspectionProfiles/Project_Default.xml
View file @
a3601612
...
@@ -8,5 +8,12 @@
...
@@ -8,5 +8,12 @@
</list>
</list>
</option>
</option>
</inspection_tool>
</inspection_tool>
<inspection_tool
class=
"PyUnresolvedReferencesInspection"
enabled=
"true"
level=
"WARNING"
enabled_by_default=
"true"
>
<option
name=
"ignoredIdentifiers"
>
<list>
<option
value=
"int.screen_shot"
/>
</list>
</option>
</inspection_tool>
</profile>
</profile>
</component>
</component>
\ No newline at end of file
.idea/misc.xml
View file @
a3601612
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project
version=
"4"
>
<project
version=
"4"
>
<component
name=
"Black"
>
<option
name=
"sdkName"
value=
"Python 3.7"
/>
</component>
<component
name=
"ProjectRootManager"
version=
"2"
project-jdk-name=
"Python 3.7"
project-jdk-type=
"Python SDK"
/>
<component
name=
"ProjectRootManager"
version=
"2"
project-jdk-name=
"Python 3.7"
project-jdk-type=
"Python SDK"
/>
</project>
</project>
\ No newline at end of file
.idea/vcs.xml
View file @
a3601612
...
@@ -2,6 +2,5 @@
...
@@ -2,6 +2,5 @@
<project
version=
"4"
>
<project
version=
"4"
>
<component
name=
"VcsDirectoryMappings"
>
<component
name=
"VcsDirectoryMappings"
>
<mapping
directory=
""
vcs=
"Git"
/>
<mapping
directory=
""
vcs=
"Git"
/>
<mapping
directory=
"$PROJECT_DIR$/autotest-airtest-web"
vcs=
"Git"
/>
</component>
</component>
</project>
</project>
\ No newline at end of file
actions/actions_buy/__init__.py
0 → 100644
View file @
a3601612
#!/user/bin/env python3
# -*- coding: utf-8 -*-
# ddate:2023/12/8 8:59
__author__
:
"qinguanglei"
"""
case_tag:case
"""
actions/actions_buy/page_buy.py
0 → 100644
View file @
a3601612
from
selenium.webdriver.remote.webdriver
import
By
from
actions.actions_login.page_login
import
PageLogin
class
PageBuy
(
PageLogin
):
"""基础元素"""
# 采购管理元素
_buy_management_locator
=
(
By
.
XPATH
,
'//div[@class="menuNavItem" and @sysname="采购管理"]'
)
# 采购业务元素
_buy_locator
=
(
By
.
XPATH
,
'//div[@class="sec-menu" and @navname="采购业务"]'
)
# 采退业务元素
_return_locator
=
(
By
.
XPATH
,
'//div[@class="sec-menu" and @navname="采退业务"]'
)
# 普通采购订单元素
_buy_op_locator
=
(
By
.
XPATH
,
'//div[@class="third-menu" and @navname="普通采购订单"]'
)
# 采购iframe
_iframe_buy_locator
=
(
By
.
XPATH
,
'//iframe[@class="metro-main-frame" and contains(@src,"purchases")]'
)
# 新建按钮
_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")]'
)
# 查询供应商请求元素
_supplier_request_locator
=
(
By
.
XPATH
,
'//input[starts-with(@id,"el-id-") and contains(@id,"-119")]/../span/span/i'
)
# 供应商输入信息
_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_buy_management
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_buy_management_locator
)
'''获取采购元素'''
def
get_buy
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_buy_locator
)
'''获取采退元素'''
def
get_return
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_return_locator
)
'''获取采购订单op元素'''
def
get_buy_op
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_buy_op_locator
)
'''获取采购iframe元素'''
def
get_iframe_buy
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_iframe_buy_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)
'''供应商信息hold'''
'''获取供应商内容元素'''
def
get_supplier_content
(
self
):
return
self
.
get_element_wait_presence
(
self
.
_supplier_content_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
)
actions/actions_buy/steps_buy.py
0 → 100644
View file @
a3601612
This diff is collapsed.
Click to expand it.
actions/actions_login/__init__.py
0 → 100644
View file @
a3601612
#!/user/bin/env python3
# -*- coding: utf-8 -*-
# ddate:2023/11/24 15:21
__author__
:
"qinguanglei"
"""
case_tag:case
"""
test
_login/page_login.py
→
actions/actions
_login/page_login.py
View file @
a3601612
# author:qinguanglei
# author:qinguanglei
# ddate:2023/11/16 11:13
# ddate:2023/11/16 11:13
from
airtest_selenium.proxy
import
*
from
selenium.webdriver.common.by
import
By
from
selenium.webdriver.common.by
import
By
from
page_class.base_page
import
BasePage
from
page_class.base_page
import
BasePage
...
...
test
_login/steps_login.py
→
actions/actions
_login/steps_login.py
View file @
a3601612
# author:qinguanglei
# author:qinguanglei
# ddate:2023/11/16 16:46
# ddate:2023/11/16 16:46
import
datetime
import
random
import
time
import
traceback
import
traceback
from
actions.actions_login.page_login
import
PageLogin
from
common
import
constant
from
common
import
constant
from
common.logger
import
log
from
common.logger
import
log
ger
from
common.read_yaml
import
get_filed_from_yaml
from
common.read_yaml
import
get_filed_from_yaml
from
common.verifycode
import
VerifyCode
from
common.verifycode
import
VerifyCode
from
test_login.page_login
import
PageLogin
from
common.common_func
import
commonFuc
from
airtest.core.api
import
*
module
=
'
test_
login'
module
=
'login'
class
StepsLogin
(
object
):
class
StepsLogin
(
object
):
...
@@ -20,11 +20,12 @@ class StepsLogin(object):
...
@@ -20,11 +20,12 @@ class StepsLogin(object):
def
open_browser
(
self
):
def
open_browser
(
self
):
try
:
try
:
log
.
info
(
'当前url: %s'
,
get_filed_from_yaml
(
module
,
"data"
,
"url"
))
log
ger
.
info
(
'当前url: %s'
,
get_filed_from_yaml
(
module
,
"data"
,
"url"
))
self
.
page_login
.
open_page
(
get_filed_from_yaml
(
module
,
"data"
,
"url"
))
self
.
page_login
.
open_page
(
get_filed_from_yaml
(
module
,
"data"
,
"url"
))
commonFuc
.
step_ok_info
(
commonFuc
(),
"浏览器打开成功。"
)
except
Exception
as
e
:
except
Exception
as
e
:
log
.
error
(
f
'打开浏览器问题:
{
e
.
__doc__
}{
traceback
.
format_exc
()
}
'
)
commonFuc
.
step_fail_info
(
commonFuc
(),
self
.
driver
,
"浏览器打开失败。"
)
assert
False
logger
.
error
(
f
'打开浏览器问题:
{
e
.
__doc__
}{
traceback
.
format_exc
()
}
'
)
def
enter_account_password
(
self
,
flag
):
def
enter_account_password
(
self
,
flag
):
try
:
try
:
...
@@ -49,9 +50,10 @@ class StepsLogin(object):
...
@@ -49,9 +50,10 @@ class StepsLogin(object):
self
.
page_login
.
input_text
(
account_element
,
account
)
self
.
page_login
.
input_text
(
account_element
,
account
)
if
flag
==
0
or
flag
==
2
or
flag
==
3
or
flag
==
4
:
if
flag
==
0
or
flag
==
2
or
flag
==
3
or
flag
==
4
:
self
.
page_login
.
input_text
(
password_element
,
password
)
self
.
page_login
.
input_text
(
password_element
,
password
)
commonFuc
.
step_ok_info
(
commonFuc
(),
"成功输入账号密码。"
)
except
Exception
as
e
:
except
Exception
as
e
:
log
.
error
(
f
'账号密码输入过程出现问题:
{
e
.
__doc__
}{
traceback
.
format_exc
()
}
'
)
commonFuc
.
step_fail_info
(
commonFuc
(),
self
.
driver
,
"输入账号密码失败。"
)
assert
False
logger
.
error
(
f
'账号密码输入过程出现问题:
{
e
.
__doc__
}{
traceback
.
format_exc
()
}
'
)
def
enter_verify_code
(
self
,
flag
):
def
enter_verify_code
(
self
,
flag
):
try
:
try
:
...
@@ -68,10 +70,11 @@ class StepsLogin(object):
...
@@ -68,10 +70,11 @@ class StepsLogin(object):
verify_code_text
=
'4571'
verify_code_text
=
'4571'
if
flag
==
1
or
flag
==
0
:
if
flag
==
1
or
flag
==
0
:
self
.
page_login
.
input_text
(
verify_input_element
,
verify_code_text
)
self
.
page_login
.
input_text
(
verify_input_element
,
verify_code_text
)
log
.
info
(
f
'输入的验证码为:
{
verify_code_text
}
'
)
logger
.
info
(
f
'输入的验证码为:
{
verify_code_text
}
'
)
commonFuc
.
step_ok_info
(
commonFuc
(),
"成功输入验证码。"
)
except
Exception
as
e
:
except
Exception
as
e
:
log
.
error
(
f
'获取验证码问题:
{
e
.
__doc__
}{
traceback
.
format_exc
()
}
'
)
log
ger
.
error
(
f
'获取验证码问题:
{
e
.
__doc__
}{
traceback
.
format_exc
()
}
'
)
assert
False
commonFuc
.
step_fail_info
(
commonFuc
(),
self
.
driver
,
"输入验证码失败。"
)
def
click_login_button
(
self
):
def
click_login_button
(
self
):
try
:
try
:
...
@@ -79,24 +82,25 @@ class StepsLogin(object):
...
@@ -79,24 +82,25 @@ class StepsLogin(object):
login_button_element
=
self
.
page_login
.
get_login_button
()
login_button_element
=
self
.
page_login
.
get_login_button
()
# 点击登录
# 点击登录
self
.
page_login
.
single_click
(
login_button_element
)
self
.
page_login
.
single_click
(
login_button_element
)
commonFuc
.
step_ok_info
(
commonFuc
(),
"点击登录正常。"
)
except
Exception
as
e
:
except
Exception
as
e
:
log
.
error
(
f
'点击登录动作出现问题:
{
e
.
__doc__
}{
traceback
.
format_exc
()
}
'
)
log
ger
.
error
(
f
'点击登录动作出现问题:
{
e
.
__doc__
}{
traceback
.
format_exc
()
}
'
)
assert
False
commonFuc
.
step_fail_info
(
commonFuc
(),
self
.
driver
,
"点击登录失败。"
)
def
judge_result
(
self
):
def
judge_result
(
self
):
try
:
try
:
# 判断登录是否成功,登录成功会切换到另外一个页面,通过页面title来判断是否切换成功
# 判断登录是否成功,登录成功会切换到另外一个页面,通过页面title来判断是否切换成功
if
self
.
page_login
.
get_window_title
()
==
constant
.
LOGIN_SUCCESS
:
if
self
.
page_login
.
get_window_title
()
==
constant
.
LOGIN_SUCCESS
:
assert
True
commonFuc
.
step_ok_info
(
commonFuc
(),
"成功登录。"
)
else
:
else
:
log
.
error
(
'案例执行失败'
)
log
ger
.
error
(
'案例执行失败'
)
log
.
error
(
f
'self.page_login.get_window_title()=
{
self
.
page_login
.
get_window_title
()
}
'
)
log
ger
.
error
(
f
'self.page_login.get_window_title()=
{
self
.
page_login
.
get_window_title
()
}
'
)
log
.
error
(
f
'constant.LOGIN_SUCCESS=
{
constant
.
LOGIN_SUCCESS
}
'
)
log
ger
.
error
(
f
'constant.LOGIN_SUCCESS=
{
constant
.
LOGIN_SUCCESS
}
'
)
log
.
error
(
'self.page_login.get_window_title()与constant.LOGIN_SUCCESS不一致'
)
log
ger
.
error
(
'self.page_login.get_window_title()与constant.LOGIN_SUCCESS不一致'
)
assert
False
commonFuc
.
step_fail_info
(
commonFuc
(),
self
.
driver
,
"登录失败。"
)
except
Exception
as
e
:
except
Exception
as
e
:
log
.
error
(
f
'判断是否登录成功问题:
{
e
.
__doc__
}{
traceback
.
format_exc
()
}
'
)
log
ger
.
error
(
f
'判断是否登录成功问题:
{
e
.
__doc__
}{
traceback
.
format_exc
()
}
'
)
assert
False
commonFuc
.
step_fail_info
(
commonFuc
(),
self
.
driver
,
"登录失败。"
)
def
judge_result_error
(
self
,
flag
):
def
judge_result_error
(
self
,
flag
):
try
:
try
:
...
@@ -124,14 +128,14 @@ class StepsLogin(object):
...
@@ -124,14 +128,14 @@ class StepsLogin(object):
result_value
=
constant
.
NO_VERIFY_CODE
result_value
=
constant
.
NO_VERIFY_CODE
if
result_value
in
self
.
page_login
.
get_text
(
login_result_element
):
if
result_value
in
self
.
page_login
.
get_text
(
login_result_element
):
assert
True
commonFuc
.
step_ok_info
(
commonFuc
(),
"登录结果错误与预期错误一致。"
)
else
:
else
:
log
.
error
(
'登录错误结果校验,案例执行失败'
)
log
ger
.
error
(
'登录错误结果校验,案例执行失败'
)
log
.
error
(
log
ger
.
error
(
f
'self.page_login.get_text(login_result_element)=
{
self
.
page_login
.
get_text
(
login_result_element
)
}
'
)
f
'self.page_login.get_text(login_result_element)=
{
self
.
page_login
.
get_text
(
login_result_element
)
}
'
)
log
.
error
(
f
'result_value=
{
result_value
}
'
)
log
ger
.
error
(
f
'result_value=
{
result_value
}
'
)
log
.
error
(
'self.page_login.get_text(login_result_element)与result_value不一致'
)
log
ger
.
error
(
'self.page_login.get_text(login_result_element)与result_value不一致'
)
assert
False
commonFuc
.
step_fail_info
(
commonFuc
(),
self
.
driver
,
"登录结果错误与预期错误不一致。"
)
except
Exception
as
e
:
except
Exception
as
e
:
log
.
error
(
f
'登录错误结果校验问题:
{
e
.
__doc__
}{
traceback
.
format_exc
()
}
'
)
log
ger
.
error
(
f
'登录错误结果校验问题:
{
e
.
__doc__
}{
traceback
.
format_exc
()
}
'
)
assert
False
commonFuc
.
step_fail_info
(
commonFuc
(),
self
.
driver
,
"登录结果错误与预期错误不一致。"
)
air_case/case_buy/case_buy_one_nonseq_commodity.air/case_buy_one_nonseq_commodity.py
0 → 100644
View file @
a3601612
#!/user/bin/env python3
# -*- coding: utf-8 -*-
# ddate:2023/12/8 9:06
__author__
=
"qinguanglei"
import
time
# 购买一个非序列号商品
"""
case_tag:case,buy,case_buy_one_nonseq_commodity
"""
from
actions.actions_buy.steps_buy
import
StepsBuy
from
airtest_selenium.proxy
import
WebChrome
"""家庭作业"""
# 获取驱动器
driver
=
WebChrome
()
driver
.
implicitly_wait
(
20
)
# 最大化页面
driver
.
maximize_window
()
"""开始执行案例"""
# 载入步骤集合
steps_buy
=
StepsBuy
(
driver
)
# 打开浏览器
steps_buy
.
open_browser
()
# 登录
steps_buy
.
login
()
# 进入普通采购单页面
steps_buy
.
enter_buy_op_page
()
# 进入新建单据界面
steps_buy
.
enter_new_op_frame
()
# 输入供应商
steps_buy
.
input_supplier
()
# 输入仓库
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
)
air_case/case_login/case_login_no_input_userid.air/case_login_no_input_userid.py
View file @
a3601612
# author:qinguanglei
# author:qinguanglei
# ddate:2023/11/17 15:54
# ddate:2023/11/17 15:54
__author__
=
"qinguanglei"
"""
"""
case_tag:case,
case_
login,case_login_no_input_userid
case_tag:case,login,case_login_no_input_userid
"""
"""
from
selenium
import
webdriver
from
actions.actions_login.steps_login
import
StepsLogin
from
test_
login.steps_login
import
StepsLogin
from
air
test_
selenium.proxy
import
WebChrome
"""家庭作业"""
option
=
webdriver
.
ChromeOptions
()
# option.add_experimental_option("detach", True) # 设置不要自动关闭浏览器
# 获取驱动器
# 获取驱动器
driver
=
webdriver
.
Chrome
(
options
=
option
)
driver
=
WebChrome
()
driver
.
implicitly_wait
(
20
)
# 最大化页面
# 最大化页面
driver
.
maximize_window
()
driver
.
maximize_window
()
"""开始执行案例"""
# 载入步骤集合
# 载入步骤集合
steps_login
=
StepsLogin
(
driver
)
steps_login
=
StepsLogin
(
driver
)
# 打开浏览器
# 打开浏览器
...
@@ -29,6 +29,3 @@ steps_login.enter_verify_code(0)
...
@@ -29,6 +29,3 @@ steps_login.enter_verify_code(0)
steps_login
.
click_login_button
()
steps_login
.
click_login_button
()
# 判断结果
# 判断结果
steps_login
.
judge_result_error
(
2
)
steps_login
.
judge_result_error
(
2
)
air_case/case_login/case_login_no_input_verifycode.air/case_login_no_input_verifycode.py
View file @
a3601612
# author:qinguanglei
# author:qinguanglei
# ddate:2023/11/20 9:56
# ddate:2023/11/20 9:56
__author__
=
"qinguanglei"
"""
"""
case_tag:case,
case_
login,case_login_no_input_verifycode
case_tag:case,login,case_login_no_input_verifycode
"""
"""
from
selenium
import
webdriver
from
airtest_
selenium
.proxy
import
*
from
test
_login.steps_login
import
StepsLogin
from
actions.actions
_login.steps_login
import
StepsLogin
"""家庭作业"""
"""家庭作业"""
option
=
webdriver
.
ChromeOptions
()
# option.add_experimental_option("detach", True) # 设置不要自动关闭浏览器
# 获取驱动器
# 获取驱动器
driver
=
w
eb
driver
.
Chrome
(
options
=
option
)
driver
=
W
eb
Chrome
(
)
# 最大化页面
# 最大化页面
driver
.
maximize_window
()
driver
.
maximize_window
()
# 加载
driver
.
implicitly_wait
(
20
)
"""开始执行案例"""
"""开始执行案例"""
# 载入步骤集合
# 载入步骤集合
...
...
air_case/case_login/case_login_password_error.air/case_login_password_error.py
View file @
a3601612
# author:qinguanglei
# author:qinguanglei
# ddate:2023/11/20 9:43
# ddate:2023/11/20 9:43
__author__
=
"qinguanglei"
"""
"""
case_tag:case,
case_
login,case_login_password_error
case_tag:case,login,case_login_password_error
"""
"""
from
selenium
import
webdriver
from
airtest_
selenium
.proxy
import
*
from
test
_login.steps_login
import
StepsLogin
from
actions.actions
_login.steps_login
import
StepsLogin
"""家庭作业"""
"""家庭作业"""
option
=
webdriver
.
ChromeOptions
()
# option.add_experimental_option("detach", True) # 设置不要自动关闭浏览器
# 获取驱动器
# 获取驱动器
driver
=
w
eb
driver
.
Chrome
(
options
=
option
)
driver
=
W
eb
Chrome
(
)
# 最大化页面
# 最大化页面
driver
.
maximize_window
()
driver
.
maximize_window
()
# 加载
driver
.
implicitly_wait
(
20
)
"""开始执行案例"""
"""开始执行案例"""
# 载入步骤集合
# 载入步骤集合
...
@@ -28,7 +29,3 @@ steps_login.enter_verify_code(0)
...
@@ -28,7 +29,3 @@ steps_login.enter_verify_code(0)
steps_login
.
click_login_button
()
steps_login
.
click_login_button
()
# 判断结果
# 判断结果
steps_login
.
judge_result_error
(
1
)
steps_login
.
judge_result_error
(
1
)
air_case/case_login/case_login_success.air/case_login_success.py
View file @
a3601612
# author:qinguanglei
# author:qinguanglei
# ddate:2023/11/16 11:18
# ddate:2023/11/16 11:18
__author__
=
"qinguanglei"
"""
"""
case_tag:case,
case_
login,case_login_success
case_tag:case,login,case_login_success
"""
"""
from
selenium
import
webdriver
from
airtest_
selenium
.proxy
import
*
from
test
_login.steps_login
import
StepsLogin
from
actions.actions
_login.steps_login
import
StepsLogin
"""家庭作业"""
"""家庭作业"""
option
=
webdriver
.
ChromeOptions
()
# option.add_experimental_option("detach", True) # 设置不要自动关闭浏览器
# 获取驱动器
# 获取驱动器
driver
=
w
eb
driver
.
Chrome
(
options
=
option
)
driver
=
W
eb
Chrome
(
)
# 最大化页面
# 最大化页面
driver
.
maximize_window
()
driver
.
maximize_window
()
# 加载
driver
.
implicitly_wait
(
20
)
"""开始执行案例"""
"""开始执行案例"""
# 载入步骤集合
# 载入步骤集合
...
...
air_case/case_login/case_login_userid_error.air/case_login_userid_error.py
View file @
a3601612
# author:qinguanglei
# author:qinguanglei
# ddate:2023/11/20 9:23
# ddate:2023/11/20 9:23
__author__
=
"qinguanglei"
"""
"""
case_tag:case,
case_
login,case_login_userid_error
case_tag:case,login,case_login_userid_error
"""
"""
from
selenium
import
webdriver
from
test_login.steps_login
import
StepsLogin
from
airtest_selenium.proxy
import
*
from
actions.actions_login.steps_login
import
StepsLogin
"""家庭作业"""
"""家庭作业"""
option
=
webdriver
.
ChromeOptions
()
# option.add_experimental_option("detach", True) # 设置不要自动关闭浏览器
# 获取驱动器
# 获取驱动器
driver
=
w
eb
driver
.
Chrome
(
options
=
option
)
driver
=
W
eb
Chrome
(
)
# 最大化页面
# 最大化页面
driver
.
maximize_window
()
driver
.
maximize_window
()
# 加载
driver
.
implicitly_wait
(
20
)
"""开始执行案例"""
"""开始执行案例"""
# 载入步骤集合
# 载入步骤集合
...
...
air_case/case_login/case_login_verify_code_error.air/case_login_verify_code_error.py
View file @
a3601612
# author:qinguanglei
# author:qinguanglei
# ddate:2023/11/16 16:40
# ddate:2023/11/16 16:40
__author__
=
"qinguanglei"
"""
"""
case_tag:case,
case_
login,case_login_verify_code_error
case_tag:case,login,case_login_verify_code_error
"""
"""
from
selenium
import
webdriver
from
test_login.steps_login
import
StepsLogin
from
airtest_selenium.proxy
import
*
from
actions.actions_login.steps_login
import
StepsLogin
"""家庭作业"""
"""家庭作业"""
option
=
webdriver
.
ChromeOptions
()
# option.add_experimental_option("detach", True) # 设置不要自动关闭浏览器
# 获取驱动器
# 获取驱动器
driver
=
w
eb
driver
.
Chrome
(
options
=
option
)
driver
=
W
eb
Chrome
(
)
# 最大化页面
# 最大化页面
driver
.
maximize_window
()
driver
.
maximize_window
()
# 加载
driver
.
implicitly_wait
(
20
)
"""开始执行案例"""
"""开始执行案例"""
# 载入步骤集合
# 载入步骤集合
...
...
air_case/demo/baidu.air/baidu.py
View file @
a3601612
...
@@ -16,7 +16,9 @@ sleep(4)
...
@@ -16,7 +16,9 @@ sleep(4)
driver
.
find_element_by_id
(
"kw"
).
send_keys
(
"airtest"
)
driver
.
find_element_by_id
(
"kw"
).
send_keys
(
"airtest"
)
sleep
(
4
)
sleep
(
4
)
driver
.
airtest_touch
(
Template
(
r
"tpl1691374901526.png"
,
record_pos
=
(
12.3
,
2.8
),
resolution
=
(
100
,
100
)))
driver
.
snapshot
()
#driver.airtest_touch(Template(r"tpl1691374901526.png", record_pos=(12.3, 2.8), resolution=(100, 100)))
...
...
Prev
1
2
3
4
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