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
99e28f84
Commit
99e28f84
authored
Oct 24, 2023
by
章 登恒
Browse files
commit
parent
5be6c810
Changes
6
Hide whitespace changes
Inline
Side-by-side
public/__init__.py
0 → 100644
View file @
99e28f84
public/action.py
0 → 100644
View file @
99e28f84
from
selenium
import
webdriver
from
selenium.webdriver
import
ChromeOptions
from
public.tools
import
wait
def
settle_accounts_point
(
chrome
,
product_id
,
old_type
=
"中心库入库结算"
,
new_type
=
""
,
flag
=
1
):
if
(
flag
==
1
):
wait
()
chrome
.
find_element_by_xpath
(
'//span[text()="%s"]'
%
old_type
).
click
()
wait
()
chrome
.
find_element_by_xpath
(
'//span[text()="批量导入"]'
).
click
()
wait
(
2
)
chrome
.
find_element_by_xpath
(
'//input[@id="basic_goodsName" and @placeholder="编号/名称/简拼"]'
).
send_keys
(
product_id
)
wait
()
chrome
.
find_element_by_xpath
(
'(//span[text()="查 询"])[2]'
).
click
()
wait
()
# 勾选产品前面的复选框
try
:
chrome
.
find_element_by_xpath
(
'//td[@title="%s"]/preceding-sibling::td/label/span/input'
%
product_id
).
click
()
wait
()
chrome
.
find_element_by_xpath
(
'(//span[text()="确 定"])[1]'
).
click
()
except
:
print
(
'没查询出产品'
)
chrome
.
find_element_by_xpath
(
'(//span[text()="取 消"])[1]'
).
click
()
wait
()
elif
(
flag
==
2
):
wait
()
chrome
.
find_element_by_xpath
(
'//span[text()="%s"]'
%
old_type
).
click
()
wait
()
chrome
.
find_element_by_id
(
'form_item_goodsName'
).
send_keys
(
product_id
)
wait
()
chrome
.
find_element_by_xpath
(
'(//span[text()="查 询"])'
).
click
()
try
:
chrome
.
find_element_by_xpath
(
'//input[@type="checkbox"]'
).
click
()
except
:
return
wait
()
chrome
.
find_element_by_xpath
(
'//span[contains(text(),"批量转")]'
).
click
()
wait
()
# chrome.find_element_by_xpath('//label[text()="调整后规则"]/parent::div/following-sibling::div').click()
chrome
.
find_element_by_xpath
(
'(//span[@class="ant-select-selection-item"])[2]'
).
click
()
wait
()
chrome
.
find_element_by_xpath
(
'//div[text()="中心库出库结算"]'
).
click
()
wait
()
chrome
.
find_element_by_xpath
(
'// span[text() = "确 定"]'
).
click
()
def
nGuiBrowserObject
():
opt
=
ChromeOptions
()
# 创建 Chrome 参数对象
opt
.
headless
=
False
# 把 Chrome 设置成无界面模式,windows/Linux 皆可
# opt.headless = True # 无界面
opt
.
add_argument
(
'--start-maximized'
)
opt
.
add_argument
(
'--window-size=1920x887'
)
chrome
=
webdriver
.
Chrome
(
options
=
opt
,
executable_path
=
"c:/python34/chromedriver.exe"
)
# 创建无界面对象
return
chrome
#打开网页
def
openBrowser
(
url
):
# chrome = webdriver.Chrome() #因为firefox是在此处定义的
chrome
=
nGuiBrowserObject
()
chrome
.
implicitly_wait
(
10
)
#隐式等待 10秒
chrome
.
get
(
url
)
return
chrome
#所以函数必须返回firefox,后面的脚本才能使用
#dbshop前台登录
def
logIn
(
chrome
,
username
,
password
):
chrome
.
find_element_by_xpath
(
'//input[@placeholder="请输入用户名"]'
).
clear
()
chrome
.
find_element_by_xpath
(
'//input[@placeholder="请输入用户名"]'
).
send_keys
(
username
)
# chrome.find_element_by_xpath('//input[@placeholder="请输入密码"]').send_keys(password)
chrome
.
find_element_by_xpath
(
'//span[text()="登 录"]'
).
click
()
#dbshop前台修改密码
def
changePassword
(
firefox
,
password
,
newPassword
):
firefox
.
find_element_by_link_text
(
"用户中心"
).
click
()
firefox
.
find_element_by_link_text
(
"账户信息"
).
click
()
firefox
.
find_element_by_link_text
(
"密码修改"
).
click
()
firefox
.
find_element_by_id
(
"old_user_password"
).
send_keys
(
password
)
firefox
.
find_element_by_id
(
"user_password"
).
send_keys
(
newPassword
)
firefox
.
find_element_by_id
(
"user_password_con"
).
send_keys
(
newPassword
)
firefox
.
find_element_by_xpath
(
'//button[@type="submit"]'
).
click
()
#dbshop前台退出
def
logOut
(
firefox
):
firefox
.
find_element_by_link_text
(
"退出"
).
click
()
#dbshop后台登录
def
logInAdmin
(
firefox
):
firefox
.
find_element_by_id
(
"user_name"
).
send_keys
(
"admin"
)
firefox
.
find_element_by_id
(
"user_passwd"
).
send_keys
(
"123456"
)
firefox
.
find_element_by_xpath
(
'//button[@class="btn"]'
).
click
()
#dbshop进入后台二级菜单
def
enterMenu3
(
chrome
,
menu1
,
menu2
,
menu3
):
wait
()
chrome
.
find_element_by_xpath
(
menu1
).
click
()
wait
()
chrome
.
find_element_by_xpath
(
menu2
).
click
()
wait
()
chrome
.
find_element_by_xpath
(
menu3
).
click
()
wait
()
# #dbshop进入后台三级菜单
# def enterMenu3(firefox,menu1,menu2,menu3):
# firefox.find_element_by_link_text(menu1).click()
# from selenium.webdriver.common.action_chains import ActionChains # 导入ActionChains类
# mouse = ActionChains(firefox) # 以浏览器为参数,实例化一个对象mouse,用于模拟鼠标操作浏览器
# element = firefox.find_element_by_link_text(menu2) # 先定位到要操作的对象element
# mouse.move_to_element(element).perform() # 鼠标移动到元素element上,perform()是立即的意思
# firefox.find_element_by_link_text(menu3).click()
#dbshop项目页面切换
def
switch_page
(
a
,
firefox
):
firefox
.
switch_to
.
window
(
firefox
.
window_handles
[
a
-
1
])
public/mail1.py
0 → 100644
View file @
99e28f84
from
smtplib
import
SMTP_SSL
from
email.header
import
Header
from
email.mime.text
import
MIMEText
from
email.mime.multipart
import
MIMEMultipart
from
email.mime.application
import
MIMEApplication
from
email.mime.image
import
MIMEImage
send_usr
=
'18627022503@163.com'
# 发件人
send_pwd
=
'EBJFCICTFEONFQEO'
# 授权码,邮箱设置
reverse
=
'18627022503@163.com'
# 接收者
content
=
'2022<p>python官网链接如下:</p>'
\
'<p><a href="https://www.python.org">python</a></p>'
#content 内容设置
html_img
=
'<p>{content}<br><img src="cid:image1"></br></p>'
# html格式添加图片
email_server
=
'smtp.163.com'
email_title
=
'脚本执行成功了'
# 邮件主题
def
send_email1
(
image_path
,
email_title
):
msg
=
MIMEMultipart
()
# 构建主体
msg
[
'Subject'
]
=
Header
(
email_title
,
'utf-8'
)
# 邮件主题
msg
[
'From'
]
=
send_usr
# 发件人
msg
[
'To'
]
=
Header
(
'xhs'
,
'utf-8'
)
# 收件人--这里是昵称
# msg.attach(MIMEText(content,'html','utf-8')) # 构建邮件正文,不能多次构造
attchment
=
MIMEApplication
(
open
(
r
'D:/test.xlsx'
,
'rb'
).
read
())
# 文件
attchment
.
add_header
(
'Content-Disposition'
,
'attachment'
,
filename
=
'test.png'
)
msg
.
attach
(
attchment
)
# 添加附件到邮件
# f = open("D:\\PycharmProjects\\cmic_python_JobLog\\xhsmail\\2023-04-30_090212.png", 'rb') #打开图片
f
=
open
(
image_path
,
'rb'
)
#打开图片
msgimage
=
MIMEImage
(
f
.
read
())
f
.
close
()
msgimage
.
add_header
(
'Content-ID'
,
'<image1>'
)
# 设置图片
msg
.
attach
(
msgimage
)
msg
.
attach
(
MIMEText
(
html_img
,
'html'
,
'utf-8'
))
# 添加到邮件正文
try
:
smtp
=
SMTP_SSL
(
email_server
)
#指定邮箱服务器
smtp
.
ehlo
(
email_server
)
# 部分邮箱需要
smtp
.
login
(
send_usr
,
send_pwd
)
# 登录邮箱
smtp
.
sendmail
(
send_usr
,
reverse
,
msg
.
as_string
())
# 分别是发件人、收件人、格式
smtp
.
quit
()
# 结束服务
print
(
'邮件发送完成--'
)
except
:
print
(
'发送失败'
)
# if __name__ == '__main__':
# send_email1()
public/tools.py
0 → 100644
View file @
99e28f84
import
subprocess
from
datetime
import
timedelta
,
date
def
IsFileContentRight
(
url
):
f
=
open
(
url
,
"r"
,
encoding
=
"utf-8"
)
# 从文件中读取内容
str1
=
f
.
read
()
import
re
if
(
re
.
search
(
","
,
str1
)
!=
None
or
re
.
search
(
":"
,
str1
)
!=
None
):
return
False
else
:
f
.
close
()
f
=
open
(
url
,
"r"
,
encoding
=
"utf-8"
)
# 从文件中读取内容
mylist1
=
f
.
readlines
()
x
=
0
j
=
0
count
=
0
for
i
in
mylist1
:
if
(
re
.
match
(
"子任务数:"
,
i
)
!=
None
):
print
(
"找到了"
)
j
=
i
[
5
:
6
]
print
(
'子任务数'
,
j
)
break
for
i
in
mylist1
:
if
(
re
.
match
(
"任务"
,
i
)
!=
None
):
print
(
'找到了%s个任务'
%
x
)
x
=
x
+
1
print
(
"真实子任务个数"
,
x
)
for
i
in
mylist1
:
if
(
re
.
match
(
"实际工时"
,
i
)
!=
None
):
count
=
i
.
count
(
","
)
count
=
int
(
count
)
+
1
# break
if
(
j
==
str
(
x
)
==
str
(
count
)):
return
True
else
:
return
False
def
End_Chrome_Progress
():
subprocess
.
call
(
"TASKKILL /f /IM CHROME.EXE"
)
subprocess
.
call
(
"TASKKILL /f /IM CHROMEDRIVER.EXE"
)
# 读取文件所有内容
def
readFile_all
(
url
):
f
=
open
(
url
,
"r"
,
encoding
=
"utf-8"
)
# 从文件中读取内容
t
=
f
.
read
()
f
.
close
()
return
t
# 读取文件内容的函数,需要1个参数文件地址
def
readFile
(
f
):
# f = open(url, "r") # 从文件中读取内容
t
=
f
.
readline
()
# f.close()
return
t
# 覆盖写入
def
writeFile
(
url
,
text
):
f
=
open
(
url
,
"w"
,
encoding
=
"utf-8"
)
f
.
write
(
text
)
f
.
close
()
# 追加写入
def
writeFile_append
(
url
,
text
):
f
=
open
(
url
,
"a"
,
encoding
=
"utf-8"
)
f
.
write
(
get_time_hms
()
+
":::"
+
text
+
'
\n
'
)
f
.
close
()
# 读取文件内容的函数,对内容进行处理,去掉冒号前面的内容
def
readFileContent
(
url
):
f
=
open
(
url
,
"r"
,
encoding
=
"UTF-8"
)
# 从文件中读取内容
t
=
f
.
readlines
()
path1
=
get_pro_path
()
writeFile
(
path1
+
'/add/Everydaylog.txt'
,
""
)
# 先清空所有内容
writeFile
(
path1
+
'/update/update_Everyday_log.txt'
,
""
)
# 先清空所有内容
import
re
for
i
in
t
:
if
i
==
'
\n
'
:
break
mylist
=
re
.
split
(
":"
,
i
)
# print(mylist)
if
mylist
[
0
]
==
"实际工时"
:
mylist
[
1
]
=
mylist
[
1
].
replace
(
'
\n
'
,
""
)
writeFile_append
(
path1
+
'/add/Everydaylog.txt'
,
mylist
[
1
])
writeFile_append
(
path1
+
'/update/update_Everyday_log.txt'
,
mylist
[
1
])
f
.
close
()
return
t
def
get_time
(
type
=
1
):
import
time
if
(
type
==
1
):
t
=
time
.
strftime
(
"%Y-%m-%d"
,
time
.
localtime
())
else
:
t
=
time
.
strftime
(
"%Y%m"
,
time
.
localtime
())
# t = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime())
return
t
def
get_time_add
(
days_aa
):
import
time
# t = time.strftime("%Y-%m-%d", datetime.datetime.now())
tomorrow
=
(
date
.
today
()
+
timedelta
(
days
=
days_aa
)).
strftime
(
"%Y-%m-%d"
)
return
tomorrow
def
get_time_hms
():
import
time
# t = time.strftime("%Y-%m-%d", time.localtime())
timedelta
(
days
=
1
)
t
=
time
.
strftime
(
"%Y-%m-%d-%H-%M-%S"
,
time
.
localtime
())
return
t
def
get_localhost_ip
():
import
socket
ip
=
socket
.
gethostbyname
(
socket
.
gethostname
())
ip
=
ip
[
0
:
5
]
print
(
"http://"
+
ip
)
return
"http://"
+
ip
# 获取当前项目的根目录的路径
def
get_pro_path
():
import
os
# print('根据当前文件获取当前文件所在目录的路径', os.path.dirname(__file__))
curPath
=
os
.
path
.
abspath
(
os
.
path
.
dirname
(
__file__
))
# 获取当前文件的所在目录的绝对路径
# print(curPath) # C:\Users\xhs\Desktop\dbshop项目相关文档2\dbshop1\main
# #将当前文件的所在目录的绝对路径进行分离,分离成C:\Users\xhs\Desktop\dbshop项目相关文档2\dbshop1 和main,存到元组中
print
(
os
.
path
.
split
(
curPath
))
rootPath
=
os
.
path
.
split
(
curPath
)[
0
]
# [0]表示元组中的为一个元素
# print('当前项目的根目录', rootPath)
return
rootPath
# 截图
def
getErrorPhoto
(
chrome
,
type
=
1
):
#1正常截图 2错误截图
import
time
if
type
==
1
:
imgName
=
time
.
strftime
(
"%Y%m%d_%H%M%S"
,
time
.
localtime
())
+
".png"
pro_path
=
get_pro_path
()
# 获取项目的根目录的路径
image_path
=
pro_path
+
"//logs//"
+
imgName
chrome
.
get_screenshot_as_file
(
image_path
)
return
imgName
,
image_path
else
:
imgName
=
time
.
strftime
(
"%Y%m%d_%H%M%S"
,
time
.
localtime
())
+
".png"
pro_path
=
get_pro_path
()
# 获取项目的根目录的路径
image_path
=
pro_path
+
"//logs_error//"
+
imgName
chrome
.
get_screenshot_as_file
(
image_path
)
return
imgName
,
image_path
#
def
is_file_exist
(
filename
):
try
:
f
=
open
(
filename
,
'r'
,
encoding
=
'utf-8'
)
except
:
return
False
else
:
return
True
#获取时间的分
def
get_time_m
():
import
time
from
datetime
import
datetime
nows
=
int
(
time
.
time
())
# timestamp = 1591239600
dt
=
datetime
.
fromtimestamp
(
nows
)
# print(dt.minute, dt.second)
return
dt
.
minute
# if dt.minute == 0 and dt.second == 0:
# print('s ')
# elif dt.minute == 50 and dt.second == 0:
# print('s ')
#判断时间区间,制定提交时间
def
get_submit_time
(
m
):
if
m
>=
0
and
m
<=
10
:
return
20
elif
m
>=
11
and
m
<=
20
:
return
30
elif
m
>=
21
and
m
<=
30
:
return
40
elif
m
>=
31
and
m
<=
40
:
return
50
elif
m
>=
41
and
m
<=
50
:
return
59
elif
m
>=
51
and
m
<=
59
:
return
10
else
:
return
m
+
10
#判断时间区间,制定提交时间
#判断时间区间,制定提交时间
def
get_submit_time1
(
m
):
if
m
>=
0
and
m
<=
30
:
return
40
elif
m
>
30
and
m
<=
59
:
return
10
else
:
return
m
+
20
if
__name__
==
'__main__'
:
# End_Chrome_Progress()
# get_localhost_ip()
# readFileContent(r'..\add\main_Everydaylog.txt')
print
(
IsFileContentRight
(
r
'..\add\main_Everydaylog.txt'
))
\ No newline at end of file
testcase/test_scene1/__init__.py
0 → 100644
View file @
99e28f84
testcase/test_scene1/scene1_mainflow.py
0 → 100644
View file @
99e28f84
import
datetime
import
threading
import
time
import
traceback
from
airtest.core.api
import
*
from
selenium
import
webdriver
from
selenium.webdriver
import
DesiredCapabilities
from
selenium.webdriver.common.keys
import
Keys
from
airtest_selenium.proxy
import
*
from
selenium.webdriver
import
Chrome
,
ChromeOptions
from
airtest.core.api
import
*
from
airtest_selenium.proxy
import
*
from
public.mail1
import
send_email1
from
public.tools
import
*
opt
=
ChromeOptions
()
# 创建 Chrome 参数对象
opt
.
headless
=
False
# 把 Chrome 设置成无界面模式,windows/Linux 皆可
opt
.
add_argument
(
'--start-maximized'
)
opt
.
add_argument
(
'--window-size=1280x1024'
)
chrome
=
webdriver
.
Chrome
(
chrome_options
=
opt
)
SIT_URL
=
'http://scdev.cmic.com.cn:8088/beta/'
#SIT环境地址
#通行证
usr1
,
pwd1
=
'bj_01'
,
'Gyxc1234'
usr2
,
pwd2
=
'bj_02'
,
'Gyxc1234'
usr3
,
pwd3
=
'bj_03'
,
'Gyxc1234'
usr4
,
pwd4
=
'bj_04'
,
'Gyxc1234'
usr5
,
pwd5
=
'bj_05'
,
'Gyxc1234'
warehousename
=
'北京强生非WMS仓'
#仓库名称
class
LoginSys
():
def
loginsys
(
self
,
url
,
usr
,
pwd
):
chrome
.
get
(
url
)
sleep
(
2
)
chrome
.
find_element_by_id
(
'input1'
).
clear
()
chrome
.
find_element_by_id
(
'input1'
).
send_keys
(
usr
)
chrome
.
find_element_by_id
(
'input2'
).
clear
()
chrome
.
find_element_by_id
(
'input2'
).
send_keys
(
pwd
)
chrome
.
find_element_by_id
(
'input2'
).
send_keys
(
Keys
.
ENTER
)
while
True
:
try
:
if
(
chrome
.
find_element_by_xpath
(
'//span[text()="退出"]'
).
is_displayed
()
==
True
):
break
except
:
continue
class
PurchaseOrder
():
def
data_add
(
self
):
order_link
=
chrome
.
find_element_by_xpath
(
'//span[text()="普通采购订单"]'
)
chrome
.
execute_script
(
"arguments[0].click();"
,
order_link
)
chrome
.
switch_to
.
frame
(
chrome
.
find_element_by_xpath
(
'(//iframe[@class="metro-main-frame"])[2]'
))
sleep
(
2
)
chrome
.
find_element_by_xpath
(
'//span[text()="新建"]'
).
click
()
sleep
(
4
)
chrome
.
switch_to
.
frame
(
chrome
.
find_element_by_xpath
(
'//iframe[contains(@name,"awsui-dialog-iframe")]'
))
sleep
(
2
)
# 获取订单号
orderno
=
chrome
.
find_element_by_xpath
(
'//div[text() = "订单号 "]/following-sibling::div/span'
).
text
print
(
orderno
)
#填写仓库信息
chrome
.
find_element_by_xpath
(
'//div[text()="仓库名称 "]/following-sibling::div/div/div/div/div/div/div/div/span/span/i'
).
click
()
sleep
(
1
)
chrome
.
find_element_by_xpath
(
'//input[@placeholder="模糊检索:仓库名称,仓库编码"]'
).
send_keys
(
warehousename
)
chrome
.
find_element_by_xpath
(
'//input[@placeholder="模糊检索:仓库名称,仓库编码"]'
).
send_keys
(
Keys
.
ENTER
)
sleep
(
1
)
btn_div
=
chrome
.
find_element_by_xpath
(
'//span/input[@type="radio" and @value="022bc5d182335c5146b3817a500c2cbc7"]'
)
chrome
.
execute_script
(
"arguments[0].click();"
,
btn_div
)
sleep
(
1
)
chrome
.
find_element_by_xpath
(
'(//button[@class="el-button el-button--primary el-button--default"])[2]'
).
click
()
sleep
(
1
)
#填写合同信息
chrome
.
find_element_by_xpath
(
'//div[text()="合同信息"]'
).
click
()
chrome
.
find_element_by_xpath
(
'//div[text()="合同号 "]/following-sibling::div/div/div/div/div/div/div/div/span/span/i'
).
click
()
chrome
.
find_element_by_xpath
(
'//input[@placeholder="模糊检索:合同号,合同协议号,对方编码,项目名称,项目编码,业态编码,参考部门,参考部门编码,参考业务员,参考业务员编码,产品线名称,产品线编码,合同类型,合同属性"]'
).
send_keys
(
'38443'
)
chrome
.
find_element_by_xpath
(
'//input[@placeholder="模糊检索:合同号,合同协议号,对方编码,项目名称,项目编码,业态编码,参考部门,参考部门编码,参考业务员,参考业务员编码,产品线名称,产品线编码,合同类型,合同属性"]'
).
send_keys
(
Keys
.
ENTER
)
chrome
.
find_element_by_xpath
(
'//div[@class="multiple-header string_col" and text()="38443"]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span'
).
click
()
chrome
.
find_element_by_xpath
(
'(//button[@class="el-button el-button--primary el-button--default"])[3]'
).
click
()
sleep
(
2
)
if
__name__
==
'__main__'
:
step1
=
LoginSys
()
step2
=
PurchaseOrder
()
step1
.
loginsys
(
SIT_URL
,
usr2
,
pwd2
)
step2
.
data_add
()
\ No newline at end of file
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