From e3f3d11a1896fdca66668791a4a75f9040ac1afe Mon Sep 17 00:00:00 2001 From: Super <1171089625@qq.com> Date: Tue, 24 Oct 2023 15:09:45 +0800 Subject: [PATCH] commit --- public/__init__.py | 0 public/action.py | 107 +++++ public/mail1.py | 45 ++ public/tools.py | 214 +++++++++ testcase/od/test1.py | 326 ++++++++++++++ ...00\345\224\256\350\256\242\345\215\225.py" | 173 +++++++ .../main.py" | 51 +++ ...345\244\232\346\230\216\347\273\206100.py" | 403 +++++++++++++++++ ...345\244\232\346\230\216\347\273\206100.py" | 395 ++++++++++++++++ ...244\232\346\230\216\347\273\206100_old.py" | 304 +++++++++++++ ...345\244\232\346\230\216\347\273\206100.py" | 375 ++++++++++++++++ ...345\244\232\346\230\216\347\273\206100.py" | 334 ++++++++++++++ ...345\244\232\346\230\216\347\273\206100.py" | 391 ++++++++++++++++ ...345\244\232\346\230\216\347\273\206100.py" | 310 +++++++++++++ ...5_\345\244\232\346\230\216\347\273\206.py" | 271 +++++++++++ ...345\244\232\346\230\216\347\273\206100.py" | 422 ++++++++++++++++++ ...345\244\232\346\230\216\347\273\206300.py" | 387 ++++++++++++++++ ...um\344\270\215\346\224\257\346\214\201.py" | 328 ++++++++++++++ ...\345\244\232\346\230\216\347\273\20650.py" | 389 ++++++++++++++++ ...\345\215\225\346\230\216\347\273\2068.xls" | Bin 0 -> 278016 bytes ...56\345\200\237\345\207\272\345\215\225.py" | 306 +++++++++++++ ...56\347\224\263\350\257\267\345\215\225.py" | 352 +++++++++++++++ ...71\347\225\214\346\265\213\350\257\225.py" | 47 ++ ...0\345\207\272\345\272\223\345\215\2251.py" | 276 ++++++++++++ ...0\345\224\256\350\256\242\345\215\2251.py" | 268 +++++++++++ ...57\345\200\237\345\207\272\345\215\225.py" | 316 +++++++++++++ ...57\345\200\237\345\207\272\345\215\225.py" | 316 +++++++++++++ ...57\350\257\267\351\242\206\345\215\225.py" | 348 +++++++++++++++ ...01\350\264\247\351\205\215\350\264\247.py" | 359 +++++++++++++++ ...50\345\207\272\345\272\223\345\215\225.py" | 286 ++++++++++++ ...00\345\224\256\350\256\242\345\215\225.py" | 281 ++++++++++++ testcase/test_scene1/__init__.py | 0 testcase/test_scene1/scene1_mainflow.py | 101 +++++ 33 files changed, 8481 insertions(+) create mode 100644 public/__init__.py create mode 100644 public/action.py create mode 100644 public/mail1.py create mode 100644 public/tools.py create mode 100644 testcase/od/test1.py create mode 100644 "testcase/od/uat_\351\224\200\345\224\256\350\256\242\345\215\225.py" create mode 100644 "testcase/od/\345\244\232\346\230\216\347\273\206/main.py" create mode 100644 "testcase/od/\345\244\232\346\230\216\347\273\206/\345\257\204\345\224\256\345\200\237\345\207\272\345\215\225\345\244\232\346\230\216\347\273\206100.py" create mode 100644 "testcase/od/\345\244\232\346\230\216\347\273\206/\345\257\204\345\224\256\347\224\263\350\257\267_\351\205\215\350\264\247_\345\244\232\346\230\216\347\273\206100.py" create mode 100644 "testcase/od/\345\244\232\346\230\216\347\273\206/\345\257\204\345\224\256\351\205\215\350\264\247\345\215\225\345\244\232\346\230\216\347\273\206100_old.py" create mode 100644 "testcase/od/\345\244\232\346\230\216\347\273\206/\346\211\213\346\234\257\345\200\237\345\207\272\345\215\225\345\244\232\346\230\216\347\273\206100.py" create mode 100644 "testcase/od/\345\244\232\346\230\216\347\273\206/\346\211\213\346\234\257\350\257\267\351\242\206\345\215\225\345\244\232\346\230\216\347\273\206100.py" create mode 100644 "testcase/od/\345\244\232\346\230\216\347\273\206/\347\273\217\351\224\200\345\224\256\350\246\201\350\264\247\351\205\215\350\264\247\345\244\232\346\230\216\347\273\206100.py" create mode 100644 "testcase/od/\345\244\232\346\230\216\347\273\206/\350\260\203\346\213\250\345\207\272\345\272\223\345\215\225\345\244\232\346\230\216\347\273\206100.py" create mode 100644 "testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\206.py" create mode 100644 "testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\206100.py" create mode 100644 "testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\206300.py" create mode 100644 "testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\206300_\345\257\274\345\205\245_selenium\344\270\215\346\224\257\346\214\201.py" create mode 100644 "testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\20650.py" create mode 100644 "testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225\346\230\216\347\273\2068.xls" create mode 100644 "testcase/od/\345\257\204\345\224\256\345\200\237\345\207\272\345\215\225.py" create mode 100644 "testcase/od/\345\257\204\345\224\256\347\224\263\350\257\267\345\215\225.py" create mode 100644 "testcase/od/\345\272\223\345\255\230\351\242\204\345\215\240\350\276\271\347\225\214\346\265\213\350\257\225/\345\272\223\345\255\230\351\242\204\345\215\240\350\276\271\347\225\214\346\265\213\350\257\225.py" create mode 100644 "testcase/od/\345\272\223\345\255\230\351\242\204\345\215\240\350\276\271\347\225\214\346\265\213\350\257\225/\350\260\203\346\213\250\345\207\272\345\272\223\345\215\2251.py" create mode 100644 "testcase/od/\345\272\223\345\255\230\351\242\204\345\215\240\350\276\271\347\225\214\346\265\213\350\257\225/\351\224\200\345\224\256\350\256\242\345\215\2251.py" create mode 100644 "testcase/od/\346\211\213\346\234\257\345\200\237\345\207\272\345\215\225.py" create mode 100644 "testcase/od/\346\211\213\346\234\257\345\200\237\345\207\272\345\215\225\345\271\266\345\217\221/\346\211\213\346\234\257\345\200\237\345\207\272\345\215\225.py" create mode 100644 "testcase/od/\346\211\213\346\234\257\350\257\267\351\242\206\345\215\225.py" create mode 100644 "testcase/od/\347\273\217\351\224\200\345\224\256\350\246\201\350\264\247\351\205\215\350\264\247.py" create mode 100644 "testcase/od/\350\260\203\346\213\250\345\207\272\345\272\223\345\215\225.py" create mode 100644 "testcase/od/\351\224\200\345\224\256\350\256\242\345\215\225.py" create mode 100644 testcase/test_scene1/__init__.py create mode 100644 testcase/test_scene1/scene1_mainflow.py diff --git a/public/__init__.py b/public/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/public/action.py b/public/action.py new file mode 100644 index 0000000..faf8f74 --- /dev/null +++ b/public/action.py @@ -0,0 +1,107 @@ + +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]) diff --git a/public/mail1.py b/public/mail1.py new file mode 100644 index 0000000..8610854 --- /dev/null +++ b/public/mail1.py @@ -0,0 +1,45 @@ +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

python官网链接如下:

' \ + '

python

' +#content 内容设置 +html_img = '

{content}

' # 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', '') # 设置图片 + 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() diff --git a/public/tools.py b/public/tools.py new file mode 100644 index 0000000..4e28a74 --- /dev/null +++ b/public/tools.py @@ -0,0 +1,214 @@ +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 diff --git a/testcase/od/test1.py b/testcase/od/test1.py new file mode 100644 index 0000000..855004d --- /dev/null +++ b/testcase/od/test1.py @@ -0,0 +1,326 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) + + +def create_salesorder(type=1): + try: + import time + pro_path = get_pro_path() + start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + # 切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + # chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + # actions = ActionChains(chrome) + # actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + # chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + 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(2) + # chrome.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + # #获取订单号 + # + # orderno=chrome.find_element_by_xpath('//div[text() = "请领单号 "]/following-sibling::div/span').text + # print(orderno) + # # chrome.switch_to.default_content() + # sleep(2) + # # while True: + # # try: + # # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # # break + # # except: + # # continue + # # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # sleep(2) + # # 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('国药集团北京') + # # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + # # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + # # chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + # # chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + # # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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('chenshuheng') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:员工编码,员工名称,部门编码,部门名称"]').send_keys( + # Keys.ENTER) + # chrome.find_element_by_xpath( + # '(//div[text()="chenshuheng"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + # chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[1]').click() + # + # #手术类型 + # chrome.find_element_by_xpath('(//input[@placeholder="请选择" and @type="text"])').click() + # sleep(1) + # chrome.find_element_by_xpath('//li[text()="初次手术"]').click() + # sleep(1) + # #手术种类 + # chrome.find_element_by_xpath('(//input[@placeholder="请选择" and @type="text"])[2]').click() + # sleep(1) + # chrome.find_element_by_xpath('//li[text()="髋关节"]').click() + # sleep(1) + # chrome.find_element_by_xpath('//label[text()="手术日期 "]/following-sibling::div/div').click() + # sleep(1) + # chrome.find_element_by_xpath('//div[ @class ="el-date-table-cell"] // span[text()="31"]').click() + # + # #客户信息页签 + # 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('北京大学第三医院') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客户名称"]').send_keys(Keys.ENTER) + # # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + # btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="02f94bb93be972567166f428524aa3b43"]') + # chrome.execute_script("arguments[0].click();", btn_div) + # chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').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('北京大学第三医院') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客商名称"]').send_keys(Keys.ENTER) + # # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + # btn_div = chrome.find_element_by_xpath( + # '//span/input[@type="radio" and @value="0c4d395678c596b20aa6c2a2fef3483d4"]') + # chrome.execute_script("arguments[0].click();", btn_div) + # chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[4]').click() + # + # # 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"])[4]').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('杨春刚') + # # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys(Keys.ENTER) + # # chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + # # chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[4]').click() + # # #其他信息页签 + # # chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + # # chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # # 子表信息录入 + # chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称"]').send_keys( + # '10214724') + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称"]').send_keys( + # Keys.ENTER) + # sleep(1) + # chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[4]').click() + # sleep(3) + # # 滚动条右拉 + # # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + # + # element=chrome.find_element_by_xpath('//td[@colid="col_75"]') + # element.click() + # sleep(2) + # # element.send_keys("1") + # # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + # chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # sleep(2) + # chrome.find_element_by_xpath('//td[@colid="col_76"]').click() + # #滚动条右拉 + # # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + # # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + # # element = chrome.find_element_by_xpath('//td[@colid="col_197"]') + # # element.click() + # # sleep(6) + # # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # # sleep(2) + # # element = chrome.find_element_by_xpath('//td[@colid="col_198"]') + # # element.click() + # # sleep(6) + # # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # # sleep(2) + # # lock = threading.Lock() + # # lock.acquire() + # #方案一============================开始 + # # if user_count<=5: + # if type==1: + # import datetime + # now = datetime.datetime.now() + # one_minutes_later = now + datetime.timedelta(minutes=1) + # now = now.strftime('%Y-%m-%d %H:%M') + # one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # # print('bbbbbbbb'+one_minutes_later) + # while True: + # now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # # print('变化的时间' + now) + # if now == one_minutes_later: + # print('时间到了') + # chrome.find_element_by_xpath('//span[text()="提交"]').click() + # break + # # 方案一============================结束 + # #方案二===============开始 + # if type==2: + # m=get_time_m() #当前时间的分钟 + # m1=get_submit_time(m)#计划提交时间的分钟 + # while True: + # m2=get_time_m() #循环获取当前的分 + # # sleep(60) + # if (m2==m1): + # chrome.find_element_by_xpath('//span[text()="提交"]').click() + # break + # #方案二===============结束 + # # lock.release() + # sleep(2) + # # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + # # chrome.switch_to.default_content() + # # chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # # sleep(20) + # while True: + # try: + # if chrome.find_element_by_xpath('//span[text()="%s"]'%orderno).is_displayed()==True: + # print('//span[text()="%s"]'%orderno) + # break + # except: + # continue + #进入手术配货单 + chrome.switch_to.default_content() + chrome.find_element_by_xpath('//span[@class="awsui-tabs-icon close"]').click() + sleep(1) + 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('//label[text()="请领单号"]/parent::div/div/div/div/input').send_keys('QLD23082800017B') + sleep(1) + chrome.find_element_by_xpath('//label[text()="请领单号"]/parent::div/div/div/div/input').send_keys(Keys.ENTER) + sleep(1) + sleep(1) + text1=chrome.find_element_by_xpath('(//span[text()="PHD23082800007B"])[2]').text + print(text1) + element = chrome.find_element_by_xpath('(//span[@class="vxe-checkbox--icon vxe-checkbox--unchecked-icon"])[2]') + chrome.execute_script("arguments[0].click();", element) + sleep(1) + chrome.find_element_by_xpath('//span[text()="批量提交"]').click() + sleep(1) + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]/span[text()="确定"]').click() + print('手术请领单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + # info=orderno+'执行耗时'+str(end - start) + now = get_time() + # writeFile_append(pro_path + '/logs/catalina.out', info) + # send_email1(image_path, info) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + +def start1(): + count = 5 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/uat_\351\224\200\345\224\256\350\256\242\345\215\225.py" "b/testcase/od/uat_\351\224\200\345\224\256\350\256\242\345\215\225.py" new file mode 100644 index 0000000..147c65c --- /dev/null +++ "b/testcase/od/uat_\351\224\200\345\224\256\350\256\242\345\215\225.py" @@ -0,0 +1,173 @@ +import threading +import time +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 * + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) + + +def create_salesorder(): + import time + start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + # chrome.get("http://10.17.65.200:8088/portal/") + chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + chrome.maximize_window() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + + chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + actions = ActionChains(chrome) + actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[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")]')) + + # chrome.switch_to.default_content() + sleep(4) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + + + sleep(2) + 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('国药集团北京') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + + chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys('北京强生非') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').click() + 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('40080') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:合同号,合同协议号,对方编码,项目名称,项目编码,业态编码,参考部门,参考部门编码,参考业务员,参考业务员编码,产品线名称,产品线编码,合同类型,合同属性"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('//div[@class="multiple-header string_col" and text()="40080"]/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"])[4]').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('北京大学第三医院') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客户名称,收货地址号,收货地址信息,公司编码,货币码,税率/税区,客户分类,联系人,联系人电话"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//div[text()="北京大学第三医院"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[4]').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('杨春刚') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath( + '(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button)[13]').click() + #其他信息页签 + chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + '10006179') + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + Keys.ENTER) + chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[6]').click() + sleep(10) + element=chrome.find_element_by_xpath('//td[@colid="col_177"]') + element.click() + sleep(6) + # element.send_keys("1") + chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'"); + sleep(3) + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + element = chrome.find_element_by_xpath('//td[@colid="col_197"]') + element.click() + sleep(6) + chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'"); + sleep(2) + element = chrome.find_element_by_xpath('//td[@colid="col_198"]') + element.click() + sleep(6) + chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'"); + sleep(2) + chrome.find_element_by_xpath('//span[text()="提交"]').click() + sleep(2) + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini awsui-button awsui-button--primary"]//span[text()="确定"]').click() + chrome.switch_to.default_content() + while True: + try: + if chrome.find_element_by_xpath('//span[text()="新建"]').is_displayed()==True: + break + except: + continue + print('销售订单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + for i in range(1): + t = threading.Thread(target=job) + t.start() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\345\244\232\346\230\216\347\273\206/main.py" "b/testcase/od/\345\244\232\346\230\216\347\273\206/main.py" new file mode 100644 index 0000000..5c8ee40 --- /dev/null +++ "b/testcase/od/\345\244\232\346\230\216\347\273\206/main.py" @@ -0,0 +1,51 @@ +import threading +import time +from airtest.core.api import * +from selenium import webdriver +from selenium.webdriver.common.keys import Keys +from airtest_selenium.proxy import * +def job3(): + print("这是一个需要执行的任务。。。。。") + from testcase.od.多明细.销售订单_多明细100 import create_salesorder + create_salesorder(2) + print("当前线程的个数:", threading.active_count() ) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) +def job1(): + print("这是一个需要执行的任务。。。。。") + # from testcase.od.多明细.调拨出库单多明细100 import create_salesorder1 + from testcase.od.多明细.手术请领单多明细100 import create_salesorder + create_salesorder(2) + print("当前线程的个数:", threading.active_count() ) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=create_salesorder,name="job1") + # t2 = threading.Thread(target=create_salesorder1,name="job2") + # t1.start() + # t2.start() + count = 25 + # semaphore = threading.Semaphore(value=1) + # for i in range(count): + # if i<15: + # t = threading.Thread(target=job3) + # t.start() + # if i>=15: + # t = threading.Thread(target=job1) + # t.start() + # # t.join() + for i in range(count): + t = threading.Thread(target=job1) + t.start() + print(threading.active_count()) + # sleep(30) + # sys.exit(0) + + + # print("程序执行结束.....") + # for i in range(10): + # from testcase.od.销售订单 import * + # start1() + + diff --git "a/testcase/od/\345\244\232\346\230\216\347\273\206/\345\257\204\345\224\256\345\200\237\345\207\272\345\215\225\345\244\232\346\230\216\347\273\206100.py" "b/testcase/od/\345\244\232\346\230\216\347\273\206/\345\257\204\345\224\256\345\200\237\345\207\272\345\215\225\345\244\232\346\230\216\347\273\206100.py" new file mode 100644 index 0000000..fdb3f88 --- /dev/null +++ "b/testcase/od/\345\244\232\346\230\216\347\273\206/\345\257\204\345\224\256\345\200\237\345\207\272\345\215\225\345\244\232\346\230\216\347\273\206100.py" @@ -0,0 +1,403 @@ +#!/usr/bin/env python +# coding=utf-8 +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) +def add_goods(goodsname,chrome): + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,件包数"]').send_keys( + goodsname) + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,件包数"]').send_keys( + Keys.ENTER) + #获取页数 + # pagecount=chrome.find_element_by_xpath('(// li[ @class ="number"])[16]').text + pagecount=10 + for i in range(int(pagecount)): + sleep(1) + chrome.find_element_by_xpath( + '//th[@class="el-table_18_column_157 multiple-column el-table-column--selection is-leaf headerCellClassName el-table__cell"]/div/label/span/span').click() + #翻页 + chrome.find_element_by_xpath('(//button[@class="btn-next is-last"])[6]').click() + sleep(2) + + +def create_salesorder(type=1): + try: + import time + pro_path = get_pro_path() + start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + # 切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + # chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + # actions = ActionChains(chrome) + # actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + # chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + 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(4) + 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")]')) + #获取订单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "订单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(4) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + + + # sleep(2) + # 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('国药集团北京') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[2]').click() + # chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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('杨春刚') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:员工编码,员工名称"]').send_keys( + Keys.ENTER) + chrome.find_element_by_xpath( + '(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[1]').click() + + #客户信息页签 + 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('1451') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客户名称,收货地址号,收货地址信息,地址名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="0b570c63f68dfcc5a40d6a06f6aef07e4"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').click() + #仓库信息页签 + 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('103356') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:仓库编码,仓库名称"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('//div[@class="multiple-header string_col" and text()="103356"]/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"])[4]').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="模糊检索:仓库编码,仓库名称"])[2]').send_keys('103503') + chrome.find_element_by_xpath('(//input[@placeholder="模糊检索:仓库编码,仓库名称"])[2]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath( + '//div[@class="multiple-header string_col" and text()="103503"]/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"])[5]').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('杨春刚') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + # chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[4]').click() + # #其他信息页签 + # chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + # chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # 点击添加商品弹出添加商品子窗口 + for i in range(1): + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + add_goods('PTCA', chrome) + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(10) + while True: + try: + chrome.find_element_by_xpath('//div[@class="el-loading-spinner"]').is_displayed() + continue + except: + break + # 滚动条右拉 + chrome.execute_script( + "document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 1200"); + # element = chrome.find_element_by_xpath('//td[@colid="col_159"]') + # element.click() + # sleep(3) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + # chrome.find_element_by_xpath( + # '//div[@class="el-input el-input--fullScreenSize el-input--prefix el-input--suffix dataDialog awsui-input dataDialog"]/div/input').send_keys( + # '23072800OP0237') + # sleep(1) + # chrome.find_element_by_xpath('//td[@colid="col_160"]').click() + sleep(1) + # for i in range(1,101): + # element = chrome.find_element_by_xpath('(//td[@colid="col_159"])[%s]'%i) + # element.click() + # sleep(2) + # chrome.find_element_by_xpath( + # '(//div[@class="el-input el-input--fullScreenSize el-input--prefix el-input--suffix dataDialog awsui-input dataDialog"]/div/span/span)[2]').click() + # # chrome.find_element_by_xpath('//div[@class="el-input el-input--fullScreenSize el-input--prefix el-input--suffix dataDialog awsui-input dataDialog"]/div/input').send_keys('23072800OP0237') + # chrome.find_element_by_xpath('(//div[text()="合格品"])[3]').click() + # sleep(1) + # chrome.find_element_by_xpath( + # '(//button[@class="el-button el-button--primary el-button--default"])[8]').click() + # sleep(1) + # chrome.find_element_by_xpath('//td[@colid="col_160"]').click() + # sleep(1) + + for i in range(1, 101): + element = chrome.find_element_by_xpath('(//td[@colid="col_165"])[%s]' % i) + # if i==88: + # print('这里出问题了') + # chrome.execute_script( + # "document.getElementsByClassName('vxe-table--body-wrapper body--wrapper')[0].scrollTop = %s*10;" % i) + # try: + element.click() + # except: + # element=chrome.find_element_by_class_name('vxe-table--footer-wrapper body--wrapper') + # chrome.execute_script("arguments[0].click();", element) + sleep(2) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + sleep(2) + chrome.find_element_by_xpath('(//td[@colid="col_166"])[%s]' % i) + chrome.execute_script( + "document.getElementsByClassName('vxe-table--body-wrapper body--wrapper')[0].scrollTop = %s*50;" % i) + if i==100: + chrome.find_element_by_xpath('(//td[@class="vxe-body--column col_166 col--left col--ellipsis"])[100]').click() + sleep(2) + # chrome.execute_script( + # "document.getElementsByClassName('vxe-table--body-wrapper body--wrapper')[0].scrollTop = 0;") + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 0"); + + chrome.execute_script("document.getElementsByClassName('body')[0].scrollTop=100") + # 点击自动配货按钮 + chrome.find_element_by_xpath('//button[text()="自动配货"]').click() + sleep(2) + chrome.find_element_by_xpath('//span[text()="分配批次"]').click() + sleep(30) + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,件包数"]').send_keys( + # '10006179') + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,件包数"]').send_keys( + # Keys.ENTER) + # chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + # sleep(3) + # 滚动条右拉 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 1000"); + # element = chrome.find_element_by_xpath('//td[@colid="col_159"]') + # element.click() + # sleep(3) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + # chrome.find_element_by_xpath('//div[@class="el-input el-input--fullScreenSize el-input--prefix el-input--suffix dataDialog awsui-input dataDialog"]/div/input').send_keys('23072800OP0237') + # sleep(1) + # chrome.find_element_by_xpath('//td[@colid="col_160"]').click() + # sleep(1) + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 1500"); + # sleep(1) + # element=chrome.find_element_by_xpath('//td[@colid="col_165"]') + # element.click() + # sleep(3) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + # chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # sleep(1) + # chrome.find_element_by_xpath('//td[@colid="col_166"]').click() + # sleep(1) + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + # element = chrome.find_element_by_xpath('//td[@colid="col_197"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # element = chrome.find_element_by_xpath('//td[@colid="col_198"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # lock = threading.Lock() + # lock.acquire() + #方案一============================开始 + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + sleep(2) + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + while True: + m2=get_time_m() #循环获取当前的分 + sleep(10) + if (m2==m1): + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + sleep(2) + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + break + #方案二===============结束 + # lock.release() + while True: + try: + if chrome.find_element_by_xpath('//p[text()="共享任务创建成功"]').is_displayed() == True: + # print('订单完成了') + break + except: + continue + sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + chrome.switch_to.default_content() + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(20) + while True: + try: + if chrome.find_element_by_xpath('//span[text()="%s"]'%orderno).is_displayed()==True: + print('//span[text()="%s"]'%orderno) + break + except: + continue + print('寄售借出单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+str(end - start) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + # t.join() + +def start1(): + count = 5 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\345\244\232\346\230\216\347\273\206/\345\257\204\345\224\256\347\224\263\350\257\267_\351\205\215\350\264\247_\345\244\232\346\230\216\347\273\206100.py" "b/testcase/od/\345\244\232\346\230\216\347\273\206/\345\257\204\345\224\256\347\224\263\350\257\267_\351\205\215\350\264\247_\345\244\232\346\230\216\347\273\206100.py" new file mode 100644 index 0000000..528feea --- /dev/null +++ "b/testcase/od/\345\244\232\346\230\216\347\273\206/\345\257\204\345\224\256\347\224\263\350\257\267_\351\205\215\350\264\247_\345\244\232\346\230\216\347\273\206100.py" @@ -0,0 +1,395 @@ +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 selenium.webdriver.support.wait import WebDriverWait + +from mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) +def add_goods(goodsname,chrome): + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号"]').send_keys( + goodsname) + sleep(2) + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号"]').send_keys( + Keys.ENTER) + sleep(2) + #获取页数 + # pagecount=chrome.find_element_by_xpath('(// li[ @class ="number"])[16]').text + pagecount=10 + for i in range(int(pagecount)): + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # goodsname) + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # Keys.ENTER) + sleep(1) + chrome.find_element_by_xpath( + '//th[@class="el-table_12_column_139 multiple-column el-table-column--selection is-leaf headerCellClassName el-table__cell"]/div/label/span/span').click() + sleep(2) + #翻页 + chrome.find_element_by_xpath('(//button[@class="btn-next is-last"])[4]').click() + + #点击确定 + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(1) + +def create_salesorder(type=1): + try: + import time + pro_path = get_pro_path() + start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + # chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + # 切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + # chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + # actions = ActionChains(chrome) + # actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + # chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + 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(2) + chrome.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + #获取订单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "寄售申请单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(2) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + + + # sleep(2) + # 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('国药集团北京') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[2]').click() + # chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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('杨春刚') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:员工编码,员工名称"]').send_keys( + Keys.ENTER) + chrome.find_element_by_xpath( + '(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[1]').click() + + #客户信息页签 + 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('1451') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客户名称,收货地址号,收货地址信息,地址名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="0b570c63f68dfcc5a40d6a06f6aef07e4"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').click() + sleep(2) + # #仓库信息页签 + # 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('103356') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:仓库编码,仓库名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//div[@class="multiple-header string_col" and text()="103356"]/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"])[4]').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="模糊检索:仓库编码,仓库名称"])[2]').send_keys('103503') + # chrome.find_element_by_xpath('(//input[@placeholder="模糊检索:仓库编码,仓库名称"])[2]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath( + # '//div[@class="multiple-header string_col" and text()="103503"]/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"])[5]').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('杨春刚') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + # chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[4]').click() + # #其他信息页签 + # chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + # chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + for i in range(1): + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + add_goods('PTCA', chrome) + chrome.find_element_by_xpath( + '(//button[@class="el-button el-button--primary el-button--default"])[4]').click() + sleep(2) + while True: + try: + chrome.find_element_by_xpath('//div[@class="el-loading-spinner"]').is_displayed() + continue + except: + break + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号"]').send_keys( + # '10006179') + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号"]').send_keys( + # Keys.ENTER) + # chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[3]').click() + # 滚动条右拉 + chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 800"); + sleep(3) + for i in range(1, 101): + element = chrome.find_element_by_xpath('(//td[@colid="col_113"])[%s]' % i) + sleep(2) + chrome.execute_script("arguments[0].click();", element) + + # element=chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + # element.click() + sleep(2) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # chrome.find_element_by_xpath('//td[@colid="col_177"]/div/div').send_keys('1') + sleep(2) + # chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]'%i).click() + element = chrome.find_element_by_xpath('(//td[@colid="col_114"])[%s]' % i) + chrome.execute_script("arguments[0].click();", element) + sleep(2) + + sleep(3) + + chrome.find_element_by_xpath('//span[text()="提交"]').click() + sleep(3) + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + sleep(2) + ele=chrome.find_element_by_xpath('//p[text()="流程结束"]') + wait=WebDriverWait(chrome, 3600) + wait.until(lambda x:ele.is_displayed()) + # while True: + # try: + # if chrome.find_element_by_xpath('//p[text()="流程结束"]').is_displayed() == True: + # # print('流程结束') + # break + # # else: + # # print('共享任务创建成功的元素没有出现') + # except: + # continue + chrome.switch_to.default_content() + sleep(6) + chrome.find_element_by_xpath('//span[@class="awsui-tabs-icon close"]').click() + sleep(2) + order_link = chrome.find_element_by_xpath('//span[text()="寄售配货单"]') + sleep(2) + chrome.execute_script("arguments[0].click();", order_link) + sleep(2) + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + sleep(2) + # 输入配货单号 + chrome.find_element_by_xpath('(//input[@class="el-input__inner"])[2]').send_keys(orderno) + sleep(2) + chrome.find_element_by_xpath('(//input[@class="el-input__inner"])[2]').send_keys(Keys.ENTER) + sleep(2) + chrome.find_element_by_xpath('//td[@class="vxe-body--column col_19 col--center col--last col--ellipsis dw-click-cell"]/div/span').click() + sleep(2) + chrome.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + sleep(2) + # 点击自动配货按钮 + chrome.find_element_by_xpath('//button[text()="自动配货"]').click() + sleep(2) + chrome.find_element_by_xpath('//span[text()="分配批次"]').click() + sleep(2) + # chrome.execute_script( + # 'document.getElementsByClassName("body")[0].scrollTop = "300";') + # # 滚动条右拉 + # chrome.execute_script( + # "document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 1200") + # + # element = chrome.find_element_by_xpath('(//td[@colid="col_124"])[1]') + # element.click() + # sleep(2) + # chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # sleep(2) + # chrome.find_element_by_xpath('//td[@colid="col_125"]').click() + # sleep(1) + + #方案一============================开始 + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + sleep(2) + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + while True: + m2=get_time_m() #循环获取当前的分 + sleep(10) + if (m2==m1): + print('时间到了') + chrome.find_element_by_xpath('//span[text()="提交"]').click() + sleep(2) + start = time.clock() + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + break + #方案二===============结束 + while True: + try: + if chrome.find_element_by_xpath('//p[text()="流程结束"]').is_displayed()==True: + # print('流程结束') + break + # else: + # print('共享任务创建成功的元素没有出现') + except: + continue + # lock.release() + # sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + chrome.switch_to.default_content() + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(20) + while True: + try: + if chrome.find_element_by_xpath('(//span[text()="%s"])[1]'%orderno).is_displayed()==True: + print('//span[text()="%s"]'%orderno) + break + except: + continue + print('寄售申请单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+str(end - start) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + # t.join() + +def start1(): + count = 5 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\345\244\232\346\230\216\347\273\206/\345\257\204\345\224\256\351\205\215\350\264\247\345\215\225\345\244\232\346\230\216\347\273\206100_old.py" "b/testcase/od/\345\244\232\346\230\216\347\273\206/\345\257\204\345\224\256\351\205\215\350\264\247\345\215\225\345\244\232\346\230\216\347\273\206100_old.py" new file mode 100644 index 0000000..0472897 --- /dev/null +++ "b/testcase/od/\345\244\232\346\230\216\347\273\206/\345\257\204\345\224\256\351\205\215\350\264\247\345\215\225\345\244\232\346\230\216\347\273\206100_old.py" @@ -0,0 +1,304 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) +def add_goods(goodsname,chrome): + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,件包数"]').send_keys( + goodsname) + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,件包数"]').send_keys( + Keys.ENTER) + #获取页数 + # pagecount=chrome.find_element_by_xpath('(// li[ @class ="number"])[16]').text + pagecount=10 + for i in range(int(pagecount)): + sleep(1) + chrome.find_element_by_xpath( + '//th[@class="el-table_18_column_157 multiple-column el-table-column--selection is-leaf headerCellClassName el-table__cell"]/div/label/span/span').click() + #翻页 + chrome.find_element_by_xpath('(//button[@class="btn-next is-last"])[6]').click() + sleep(2) + + +def create_salesorder(type=1): + try: + import time + pro_path = get_pro_path() + start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + # 切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + # chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + # actions = ActionChains(chrome) + # actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + # chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + 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('(//input[@class="el-input__inner"])[2]').send_keys('PHD23082800006A') + sleep(2) + chrome.find_element_by_xpath('(//input[@class="el-input__inner"])[2]').send_keys(Keys.ENTER) + sleep(2) + + # chrome.find_element_by_xpath('//td[@class="vxe-body--column col_19 col--center col--last col--ellipsis dw-click-cell"]/div/span').click() + # chrome.find_element_by_xpath('//span[text()="PHD23082800006A"]').click() + chrome.find_element_by_xpath('//td[@class="vxe-body--column col_19 col--center col--last col--ellipsis dw-click-cell"]/div/span').click() + + # chrome.switch_to.default_content() + sleep(4) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + + + # sleep(2) + # 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('国药集团北京') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[2]').click() + # chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + # chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + chrome.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + #点击自动配货按钮 + chrome.find_element_by_xpath('//button[text()="自动配货"]').click() + sleep(2) + chrome.find_element_by_xpath('//span[text()="分配批次"]').click() + sleep(2) + chrome.execute_script( + 'document.getElementsByClassName("body")[0].scrollTop = "300";') + # 滚动条右拉 + chrome.execute_script( + "document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 1200"); + + for i in range(1,101): + element = chrome.find_element_by_xpath('(//td[@colid="col_124"])[%s]'%i) + element.click() + sleep(2) + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + sleep(2) + chrome.find_element_by_xpath('//td[@colid="col_125"]').click() + sleep(1) + + + + + # element = chrome.find_element_by_xpath('//td[@colid="col_159"]') + # element.click() + # sleep(3) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + # chrome.find_element_by_xpath( + # '//div[@class="el-input el-input--fullScreenSize el-input--prefix el-input--suffix dataDialog awsui-input dataDialog"]/div/input').send_keys( + # '23072800OP0237') + # sleep(1) + # chrome.find_element_by_xpath('//td[@colid="col_160"]').click() + + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,件包数"]').send_keys( + # '10006179') + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,件包数"]').send_keys( + # Keys.ENTER) + # chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + # sleep(3) + # 滚动条右拉 + + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + # chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # sleep(1) + # chrome.find_element_by_xpath('//td[@colid="col_166"]').click() + # sleep(1) + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + # element = chrome.find_element_by_xpath('//td[@colid="col_197"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # element = chrome.find_element_by_xpath('//td[@colid="col_198"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # lock = threading.Lock() + # lock.acquire() + #方案一============================开始 + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + # sleep(3) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + while True: + m2=get_time_m() #循环获取当前的分 + sleep(10) + if (m2==m1): + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + # sleep(3) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + break + #方案二===============结束 + # lock.release() + while True: + try: + if chrome.find_element_by_xpath('//p[text()="流程结束"]').is_displayed() == True: + # print('订单完成了') + break + except: + continue + sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + # chrome.switch_to.default_content() + # chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(20) + # while True: + # try: + # if chrome.find_element_by_xpath('//span[text()="%s"]'%orderno).is_displayed()==True: + # print('//span[text()="%s"]'%orderno) + # break + # except: + # continue + print('寄售配货单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info='执行耗时'+str(end - start) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + # t.join() + +def start1(): + count = 5 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\345\244\232\346\230\216\347\273\206/\346\211\213\346\234\257\345\200\237\345\207\272\345\215\225\345\244\232\346\230\216\347\273\206100.py" "b/testcase/od/\345\244\232\346\230\216\347\273\206/\346\211\213\346\234\257\345\200\237\345\207\272\345\215\225\345\244\232\346\230\216\347\273\206100.py" new file mode 100644 index 0000000..6474b6e --- /dev/null +++ "b/testcase/od/\345\244\232\346\230\216\347\273\206/\346\211\213\346\234\257\345\200\237\345\207\272\345\215\225\345\244\232\346\230\216\347\273\206100.py" @@ -0,0 +1,375 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) +def add_goods(goodsname,chrome): + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,存储条件"]').send_keys( + goodsname) + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,存储条件"]').send_keys( + Keys.ENTER) + #获取页数 + # pagecount=chrome.find_element_by_xpath('(// li[ @class ="number"])[16]').text + pagecount=10 + for i in range(int(pagecount)): + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # goodsname) + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # Keys.ENTER) + sleep(1) + chrome.find_element_by_xpath( + '//th[@class="el-table_15_column_131 multiple-column el-table-column--selection is-leaf headerCellClassName el-table__cell"]/div/label/span/span').click() + #翻页 + chrome.find_element_by_xpath('(//button[@class="btn-next is-last"])[5]').click() + + #点击确定 + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(1) + +def create_salesorder(type=1): + try: + import time + pro_path = get_pro_path() + start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + # 切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + # chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + # actions = ActionChains(chrome) + # actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + # chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + 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(2) + chrome.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + #获取订单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "借出单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(2) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + sleep(2) + # 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('国药集团北京') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + # chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + # chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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('chenshuheng') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:员工编码,员工名称,部门编码,部门名称"]').send_keys( + Keys.ENTER) + chrome.find_element_by_xpath( + '(//div[text()="chenshuheng"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[1]').click() + + #手术类型 + chrome.find_element_by_xpath('(//input[@placeholder="请选择" and @type="text"])').click() + sleep(1) + chrome.find_element_by_xpath('//li[text()="初次手术"]').click() + sleep(1) + #手术种类 + chrome.find_element_by_xpath('(//input[@placeholder="请选择" and @type="text"])[2]').click() + sleep(1) + chrome.find_element_by_xpath('//li[text()="髋关节"]').click() + sleep(1) + chrome.find_element_by_xpath('//label[text()="手术日期 "]/following-sibling::div/div').click() + sleep(1) + chrome.find_element_by_xpath('//div[ @class ="el-date-table-cell"] // span[text()="31"]').click() + + #客户信息页签 + 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('北京大学第三医院') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客户名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="083165b4f865526823ef04a27fa9cd7c1"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').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('北京大学第三医院') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客商名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div = chrome.find_element_by_xpath( + '//span/input[@type="radio" and @value="0c4d395678c596b20aa6c2a2fef3483d4"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').click() + + # 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"])[4]').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('杨春刚') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + # chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[4]').click() + # #其他信息页签 + # chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + # chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # 点击添加商品弹出添加商品子窗口 + for i in range(1): + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + add_goods('PTCA', chrome) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[5]').click() + sleep(10) + for i in range(1, 101): + element = chrome.find_element_by_xpath('(//td[@colid="col_89"])[%s]' % i) + chrome.execute_script("arguments[0].click();", element) + + # element=chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + # element.click() + sleep(2) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # chrome.find_element_by_xpath('//td[@colid="col_177"]/div/div').send_keys('1') + sleep(2) + # chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]'%i).click() + element = chrome.find_element_by_xpath('(//td[@colid="col_90"])[%s]' % i) + chrome.execute_script("arguments[0].click();", element) + sleep(2) + + + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,存储条件"]').send_keys( + # '10214724') + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,存储条件"]').send_keys( + # Keys.ENTER) + # sleep(1) + # chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[4]').click() + # sleep(3) + # 滚动条右拉 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + + # element=chrome.find_element_by_xpath('//td[@colid="col_89"]') + # element.click() + # sleep(2) + # # element.send_keys("1") + # # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + # chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # sleep(2) + # chrome.find_element_by_xpath('//td[@colid="col_90"]').click() + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + # element = chrome.find_element_by_xpath('//td[@colid="col_197"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # element = chrome.find_element_by_xpath('//td[@colid="col_198"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # lock = threading.Lock() + # lock.acquire() + #方案一============================开始 + # if user_count<=5: + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + while True: + m2=get_time_m() #循环获取当前的分 + # sleep(60) + if (m2==m1): + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + #方案二===============结束 + while True: + try: + if chrome.find_element_by_xpath('//p[text()="共享任务创建成功"]').is_displayed()==True: + # print('订单完成了') + break + # else: + # print('共享任务创建成功的元素没有出现') + except: + continue + # lock.release() + # while True: + # try: + # if chrome.find_element_by_xpath('//p[text()="共享任务创建成功"]').is_displayed() == True: + # # print('订单完成了') + # break + # except: + # continue + sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + chrome.switch_to.default_content() + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(20) + while True: + try: + if chrome.find_element_by_xpath('(//span[text()="%s"])[2]'%orderno).is_displayed()==True: + print('//span[text()="%s"])[2]'%orderno) + break + except: + continue + print('手术借出单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+str(end - start) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + +def start1(): + count = 5 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\345\244\232\346\230\216\347\273\206/\346\211\213\346\234\257\350\257\267\351\242\206\345\215\225\345\244\232\346\230\216\347\273\206100.py" "b/testcase/od/\345\244\232\346\230\216\347\273\206/\346\211\213\346\234\257\350\257\267\351\242\206\345\215\225\345\244\232\346\230\216\347\273\206100.py" new file mode 100644 index 0000000..2a9aaa1 --- /dev/null +++ "b/testcase/od/\345\244\232\346\230\216\347\273\206/\346\211\213\346\234\257\350\257\267\351\242\206\345\215\225\345\244\232\346\230\216\347\273\206100.py" @@ -0,0 +1,334 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) +def add_goods(goodsname,chrome): + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称"]').send_keys( + goodsname) + sleep(2) + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称"]').send_keys( + Keys.ENTER) + sleep(2) + #获取页数 + # pagecount=chrome.find_element_by_xpath('(// li[ @class ="number"])[16]').text + pagecount=10 + for i in range(int(pagecount)): + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # goodsname) + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # Keys.ENTER) + sleep(1) + chrome.find_element_by_xpath( + '//th[@class="el-table_15_column_145 multiple-column el-table-column--selection is-leaf headerCellClassName el-table__cell"]/div/label/span/span').click() + sleep(2) + #翻页 + chrome.find_element_by_xpath('(//button[@class="btn-next is-last"])[5]').click() + + #点击确定 + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(1) + +def create_salesorder(type=1): + import time + pro_path = get_pro_path() + start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + # chrome = WebChrome(chrome_options=opt) + chrome = webdriver.Chrome(chrome_options=opt) + chrome.implicitly_wait(20) + try: + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + # 切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + 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(2) + chrome.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + #获取订单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "请领单号 "]/following-sibling::div/span').text + print(orderno) + sleep(2) + + # 业务员名称 + chrome.find_element_by_xpath( + '//div[text()="业务员名称 "]/following-sibling::div/div/div/div/div/div/div/div/span/span/i').click() + sleep(2) + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:员工编码,员工名称,部门编码,部门名称"]').send_keys('chenshuheng') + sleep(2) + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:员工编码,员工名称,部门编码,部门名称"]').send_keys( + Keys.ENTER) + sleep(2) + chrome.find_element_by_xpath( + '(//div[text()="chenshuheng"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[1]').click() + + #手术类型 + chrome.find_element_by_xpath('(//input[@placeholder="请选择" and @type="text"])').click() + sleep(1) + chrome.find_element_by_xpath('//li[text()="初次手术"]').click() + sleep(1) + #手术种类 + chrome.find_element_by_xpath('(//input[@placeholder="请选择" and @type="text"])[2]').click() + sleep(1) + chrome.find_element_by_xpath('//li[text()="髋关节"]').click() + sleep(1) + chrome.find_element_by_xpath('//label[text()="手术日期 "]/following-sibling::div/div').click() + sleep(1) + chrome.find_element_by_xpath('//div[ @class ="el-date-table-cell"] // span[text()="31"]').click() + + #客户信息页签 + 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('北京大学第三医院') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客户名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="02f94bb93be972567166f428524aa3b43"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').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('北京大学第三医院') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客商名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div = chrome.find_element_by_xpath( + '//span/input[@type="radio" and @value="0c4d395678c596b20aa6c2a2fef3483d4"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[4]').click() + + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + for i in range(1): + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + add_goods('PTCA', chrome) + chrome.find_element_by_xpath( + '(//button[@class="el-button el-button--primary el-button--default"])[5]').click() + sleep(30) + + for i in range(1, 101): + element = chrome.find_element_by_xpath('(//td[@colid="col_75"])[%s]' % i) + sleep(2) + chrome.execute_script("arguments[0].click();", element) + + # element=chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + # element.click() + sleep(2) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # chrome.find_element_by_xpath('//td[@colid="col_177"]/div/div').send_keys('1') + sleep(2) + # chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]'%i).click() + element = chrome.find_element_by_xpath('(//td[@colid="col_76"])[%s]' % i) + chrome.execute_script("arguments[0].click();", element) + sleep(2) + sleep(2) + chrome.find_element_by_xpath('//span[text()="提交"]').click() + while True: + try: + if chrome.find_element_by_xpath('//p[text()="共享任务创建成功"]').is_displayed() == True: + # print('订单完成了') + break + except: + continue + # lock.release() + sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + # chrome.switch_to.default_content() + # chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # # sleep(20) + # while True: + # try: + # if chrome.find_element_by_xpath('//span[text()="%s"]'%orderno).is_displayed()==True: + # print('//span[text()="%s"]'%orderno) + # break + # except: + # continue + # 进入手术配货单 + chrome.switch_to.default_content() + sleep(3) + chrome.find_element_by_xpath('//span[@class="awsui-tabs-icon close"]').click() + sleep(1) + 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('//label[text()="请领单号"]/parent::div/div/div/div/input').send_keys(orderno) + sleep(1) + chrome.find_element_by_xpath('//label[text()="请领单号"]/parent::div/div/div/div/input').send_keys(Keys.ENTER) + sleep(1) + # chrome.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + sleep(1) + # text1 = chrome.find_element_by_xpath('(//span[text()="QLD23082800037B"])[2]').text + # print(text1) + chrome.find_element_by_xpath( + '//span[text()="%s"]//parent::div/parent::td//preceding-sibling::td[1]/div/span' % orderno).click() + # element = chrome.find_element_by_xpath('(//span[@class="vxe-checkbox--icon vxe-checkbox--unchecked-icon"])[2]') + # chrome.execute_script("arguments[0].click();", element) + sleep(1) + chrome.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + sleep(1) + # 方案一============================开始 + # if user_count<=5: + if type == 1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + # 方案一============================结束 + # 方案二===============开始 + if type == 2: + m = get_time_m() # 当前时间的分钟 + m1 = get_submit_time1(m) # 计划提交时间的分钟 + print(' # 计划提交时间的分钟',m1) + while True: + m2 = get_time_m() # 循环获取当前的分 + # sleep(60) + if (m2 == m1): + print('时间到了') + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + # 方案二===============结束# + + # chrome.find_element_by_xpath('//span[text()="提交"]').click() + while True: + try: + if chrome.find_element_by_xpath('//p[text()="流程结束"]').is_displayed() == True: + # print('订单完成了') + break + except: + continue + # chrome.find_element_by_xpath('//span[text()="批量提交"]').click() + sleep(1) + print('手术请领配货单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+str(end - start) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + +def start1(): + count = 5 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\345\244\232\346\230\216\347\273\206/\347\273\217\351\224\200\345\224\256\350\246\201\350\264\247\351\205\215\350\264\247\345\244\232\346\230\216\347\273\206100.py" "b/testcase/od/\345\244\232\346\230\216\347\273\206/\347\273\217\351\224\200\345\224\256\350\246\201\350\264\247\351\205\215\350\264\247\345\244\232\346\230\216\347\273\206100.py" new file mode 100644 index 0000000..53161c7 --- /dev/null +++ "b/testcase/od/\345\244\232\346\230\216\347\273\206/\347\273\217\351\224\200\345\224\256\350\246\201\350\264\247\351\205\215\350\264\247\345\244\232\346\230\216\347\273\206100.py" @@ -0,0 +1,391 @@ +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 selenium.webdriver.support.select import Select + +from mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) +def add_goods(goodsname,chrome): + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,采购计量单位,销售计量单位,生产厂家编码"]').send_keys( + goodsname) + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,采购计量单位,销售计量单位,生产厂家编码"]').send_keys( + Keys.ENTER) + # 获取页数 + # pagecount=chrome.find_element_by_xpath('(// li[ @class ="number"])[16]').text + pagecount = 10 + for i in range(int(pagecount)): + sleep(1) + chrome.find_element_by_xpath( + '//th[@class="el-table_15_column_192 multiple-column el-table-column--selection is-leaf headerCellClassName el-table__cell"]/div/label/span/span').click() + # 翻页 + chrome.find_element_by_xpath('(//button[@class="btn-next is-last"])[5]').click() + + +sleep(1) + + +#配货函数 +def match_goods(chrome,orderno,type): + chrome.switch_to.default_content() + sleep(1) + chrome.find_element_by_xpath('//span[@class="awsui-tabs-icon close"]').click() + sleep(1) + 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.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + sleep(2) + s = Select(chrome.find_element_by_id('purchasingCoOptSelect')) + s.select_by_index(0) + sleep(2) + # chrome.find_element_by_xpath('//li[text()="北京大学第三医院(3)"]').click() + # sleep(1) + chrome.find_element_by_xpath('//span[text()="%s"]'%orderno).click() + sleep(4) + # 点击自动填充按钮 + chrome.find_element_by_xpath('//button[text()="自动填充"]').click() + # sleep(4) + while True: + try: + chrome.find_element_by_xpath('//button[text()="提交"]').click() + break + except: + continue + sleep(2) + # chrome.find_element_by_xpath('//a[text()="确认"]').click() + sleep(1) + + # 方案一============================开始 + if type == 1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + start = time.clock() + print('提交订单开始时间', start) + chrome.find_element_by_xpath('//a[text()="确认"]').click() + break + # 方案一============================结束 + # 方案二===============开始 + if type == 2: + m = get_time_m() # 当前时间的分钟 + m1 = get_submit_time(m) # 计划提交时间的分钟 + print('销售订单计划提交时间的分钟', m1) + while True: + m2 = get_time_m() # 循环获取当前的分 + # sleep(30) + if (m2 == m1): + start = time.clock() + chrome.find_element_by_xpath('//a[text()="确认"]').click() + break + # 方案二===============结束 + while True: + try: + if chrome.find_element_by_xpath('//div[text()="提交成功"]').is_displayed() == True: + # print('订单完成了') + break + # else: + # print('共享任务创建成功的元素没有出现') + except: + continue + end = time.clock() + print(start, end) + # print('CPU执行时间: ', end - start) + return str(end - start) + +def create_salesorder(type=1): + try: + import time + pro_path = get_pro_path() + start = time.clock() + print('开始时间',start) + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + # chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + #切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + 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(4) + 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")]')) + # 获取订单号 + + orderno = chrome.find_element_by_xpath('//div[text() = "要货申请单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(4) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + print(chrome.find_element_by_xpath('//div[text()="要货申请单号 "]').text) + + + sleep(2) + #客户名称 + 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('北京大学') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客户名称,收货地址,产品线名称,产品线编码"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + + chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + + #详细信息 + 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('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="012001f8d35054875d6157d4715404319"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').click() + sleep(1) + + #业务员名称 + 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('chenshuheng') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,部门编码,部门类型编码"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//div[text()="chenshuheng"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[3]').click() + # #其他信息页签 + # chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + # chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + # 点击添加商品弹出添加商品子窗口 + for i in range(1): + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + add_goods('PTCA', chrome) + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[4]').click() + sleep(20) + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,采购计量单位,销售计量单位,生产厂家编码"]').send_keys( + # '10006179') + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,采购计量单位,销售计量单位,生产厂家编码"]').send_keys( + # Keys.ENTER) + # sleep(1) + # chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[4]').click() + while True: + try: + chrome.find_element_by_xpath('//div[@class="el-loading-spinner"]').is_displayed() + continue + except: + break + for i in range(1, 101): + sleep(2) + element=chrome.find_element_by_xpath('(//td[@colid="col_93"])[%s]'%i) + element.click() + sleep(2) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # chrome.find_element_by_xpath('//td[@colid="col_177"]/div/div').send_keys('1') + sleep(2) + chrome.find_element_by_xpath('(//td[@colid="col_94"])[%s]'%i).click() + sleep(2) + chrome.execute_script( + "document.getElementsByClassName('vxe-table--body-wrapper body--wrapper')[0].scrollTop = %s*50;" % i) + # #滚动条右拉 + # # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + # element = chrome.find_element_by_xpath('//td[@colid="col_197"]') + # element.click() + # sleep(2) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # element = chrome.find_element_by_xpath('//td[@colid="col_198"]') + # element.click() + # sleep(2) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # lock = threading.Lock() + # lock.acquire() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + + while True: + try: + if chrome.find_element_by_xpath('//p[text()="共享任务创建成功"]').is_displayed()==True: + # print('订单完成了') + break + # else: + # print('共享任务创建成功的元素没有出现') + except: + continue + # lock.release() + # sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini awsui-button awsui-button--primary"]//span[text()="确定"]').click() + # chrome.switch_to.default_content() + # chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(20) + # while True: + # try: + # if chrome.find_element_by_xpath('//span[text()="%s"]' % orderno).is_displayed() == True: + # print('//span[text()="%s"]' % orderno) + # break + # except: + # continue + while True: + try: + # if chrome.find_element_by_xpath('(//span[text()="%s"])[2]'%orderno).is_displayed()==True: + if chrome.find_element_by_xpath( + '//span[text() = "1"]/ancestor-or-self::td/following-sibling::td/div/span').is_displayed() == True: + # print('aaaaaaaaaaaaaaaaaaaaaaaa', chrome.find_element_by_xpath( + # '//span[text() = "1"]/ancestor-or-self::td/following-sibling::td/div/span').text) + break + except: + continue + print('经销售要货申请单创建完成') + # 审批 + chrome.switch_to.default_content() + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + sleep(2) + chrome.find_element_by_xpath( + '//span[text() = "%s"]' % orderno).click() + chrome.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + + chrome.find_element_by_xpath('//span[text()="审核通过"]').click() + sleep(1) + chrome.find_element_by_xpath('//textarea[@placeholder="意见留言"]').send_keys('3333') + sleep(1) + chrome.find_element_by_xpath('//span[text()="发送"]').click() + while True: + try: + if chrome.find_element_by_xpath('//p[text()="共享任务创建成功"]').is_displayed() == True: + # print('订单完成了') + break + # else: + # print('共享任务创建成功的元素没有出现') + except: + continue + time1=match_goods(chrome, orderno,type) + # end = time.clock() + # print(start, end) + print('CPU执行时间: ', time1) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+time1 + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + +def start1(): + count = 1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\345\244\232\346\230\216\347\273\206/\350\260\203\346\213\250\345\207\272\345\272\223\345\215\225\345\244\232\346\230\216\347\273\206100.py" "b/testcase/od/\345\244\232\346\230\216\347\273\206/\350\260\203\346\213\250\345\207\272\345\272\223\345\215\225\345\244\232\346\230\216\347\273\206100.py" new file mode 100644 index 0000000..1bec6bb --- /dev/null +++ "b/testcase/od/\345\244\232\346\230\216\347\273\206/\350\260\203\346\213\250\345\207\272\345\272\223\345\215\225\345\244\232\346\230\216\347\273\206100.py" @@ -0,0 +1,310 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder1(1) + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) +def add_goods(goodsname,chrome): + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品全称,规格型号,主计量单位,采购计量单位,厂家物料编码,存储条件,存储条件说明,生产企业编码,行类型,件包数,产品备注,产品描述,商品性质,是否免备案"]').send_keys( + goodsname) + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品全称,规格型号,主计量单位,采购计量单位,厂家物料编码,存储条件,存储条件说明,生产企业编码,行类型,件包数,产品备注,产品描述,商品性质,是否免备案"]').send_keys( + Keys.ENTER) + #获取页数 + # pagecount=chrome.find_element_by_xpath('(// li[ @class ="number"])[16]').text + pagecount=10 + for i in range(int(pagecount)): + sleep(1) + chrome.find_element_by_xpath( + '//th[@class="el-table_18_column_144 multiple-column el-table-column--selection is-leaf headerCellClassName el-table__cell"]/div/label/span/span').click() + #翻页 + chrome.find_element_by_xpath('(//button[@class="btn-next is-last"])[6]').click() + sleep(2) + + +def create_salesorder1(type=1): + import time + start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + # chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + # 切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + allot_link = chrome.find_element_by_xpath('//span[text()="调拨出库单"]') + chrome.execute_script("arguments[0].click();", allot_link) + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + sleep(4) + 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")]')) + #获取调拨出库单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "调拨出库订单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(4) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + print(chrome.find_element_by_xpath('//div[text()="公司名称 "]').text) + + + sleep(2) + 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('国药集团北京') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + sleep(2) + chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + + chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys('北京强生非') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys(Keys.ENTER) + # # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + # btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]') + # chrome.execute_script("arguments[0].click();", btn_div) + # chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').click() + # 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"])[4]').click() + #业务员名称 + sleep(1) + 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('杨春刚') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,部门名称,部门编码,部门类型"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[2]').click() + #仓库信息页签 + 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="模糊检索:调拨出库仓库名称,调拨出库仓库编码,是否WMS仓"]').send_keys('北京强生非') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:调拨出库仓库名称,调拨出库仓库编码,是否WMS仓"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="08374712eb9413253c6281062de2ab877"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//span[@class="ensureBtn"])[3]/button').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="模糊检索:调拨入库仓库名称,调拨入库仓库编码,是否WMS"]').send_keys('北京公司-宁波仓') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:调拨入库仓库名称,调拨入库仓库编码,是否WMS"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div = chrome.find_element_by_xpath('//span/input[@type="radio" and @value="0e455e227177d35f275908320e3e32fe9"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//span[@class="ensureBtn"])[4]/button').click() + + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # 点击添加商品弹出添加商品子窗口 + for i in range(1): + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + add_goods('PTCA',chrome) + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(10) + + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品全称,规格型号,主计量单位,采购计量单位,厂家物料编码,存储条件,存储条件说明,生产企业编码,行类型,件包数,产品备注,产品描述,商品性质,是否免备案"]').send_keys( + # '10006179') + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品全称,规格型号,主计量单位,采购计量单位,厂家物料编码,存储条件,存储条件说明,生产企业编码,行类型,件包数,产品备注,产品描述,商品性质,是否免备案"]').send_keys( + # Keys.ENTER) + # sleep(1) + # chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(6) + for i in range(1, 101): + element=chrome.find_element_by_xpath('(//td[@colid="col_108"])[%s]'%i) + element.click() + sleep(2) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + sleep(2) + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + # element = chrome.find_element_by_xpath('//td[@colid="col_197"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # element = chrome.find_element_by_xpath('//td[@colid="col_198"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # lock = threading.Lock() + # lock.acquire() + #方案一============================开始 + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + print('调拨计划提交时间',m1) + while True: + m2=get_time_m() #循环获取当前的分 + # sleep(30) + if (m2==m1): + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + #方案二===============结束 + while True: + try: + if chrome.find_element_by_xpath('//p[text()="共享任务创建成功"]').is_displayed() == True: + # print('订单完成了') + break + except: + continue + # lock.release() + # sleep(5) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini awsui-button awsui-button--primary"]//span[text()="确定"]').click() + chrome.switch_to.default_content() + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(20) + while True: + try: + if chrome.find_element_by_xpath('(//span[text()="%s"])[2]'%orderno).is_displayed()==True: + print('//span[text()="%s"]'%orderno) + break + except: + continue + print('调拨出库单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + time1=end - start + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+',耗时'+str(time1) + now = get_time() + pro_path = get_pro_path() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + pro_path = get_pro_path() + + try: + for i in range(1): + t = threading.Thread(target=job) + t.start() + # t.join() + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + # imgInfo = getErrorPhoto(chrome) + # imgName = imgInfo[0] + # image_path = imgInfo[1] + # print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) + + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\206.py" "b/testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\206.py" new file mode 100644 index 0000000..e0e52f2 --- /dev/null +++ "b/testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\206.py" @@ -0,0 +1,271 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) + + +def create_salesorder(type=1): + try: + import time + pro_path = get_pro_path() + start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + # chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + #切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + # chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + # actions = ActionChains(chrome) + # actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + # chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + 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(4) + 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")]')) + #获取订单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "销售订单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(4) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + + + sleep(2) + 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('国药集团北京') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + + chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys('北京强生非') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').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"])[4]').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('杨春刚') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[4]').click() + #其他信息页签 + chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + 'PTCA') + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + Keys.ENTER) + sleep(1) + chrome.find_element_by_xpath('//th[@class="el-table_18_column_229 multiple-column el-table-column--selection is-leaf headerCellClassName el-table__cell"]/div/label/span/span').click() + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(2) + for i in range(1,11): + element=chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + element.click() + sleep(2) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # chrome.find_element_by_xpath('//td[@colid="col_177"]/div/div').send_keys('1') + sleep(1) + chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]'%i).click() + sleep(2) + + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + for i in range(1, 11): + element = chrome.find_element_by_xpath('(//td[@colid="col_197"])[%s]'%i) + element.click() + sleep(2) + chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + sleep(2) + element = chrome.find_element_by_xpath('(//td[@colid="col_198"])[%s]'%i) + element.click() + sleep(2) + chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + sleep(2) + # lock = threading.Lock() + # lock.acquire() + #方案一============================开始 + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + print('销售订单计划提交时间的分钟',m1) + while True: + m2=get_time_m() #循环获取当前的分 + # sleep(30) + if (m2==m1): + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + #方案二===============结束 + # lock.release() + sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini awsui-button awsui-button--primary"]//span[text()="确定"]').click() + # chrome.switch_to.default_content() + # chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(20) + while True: + try: + if chrome.find_element_by_xpath('//span[text()="%s"]'%orderno).is_displayed()==True: + print('//span[text()="%s"]'%orderno) + break + except: + continue + print('销售订单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+str(end - start) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + +def start1(): + count = 1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\206100.py" "b/testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\206100.py" new file mode 100644 index 0000000..1596264 --- /dev/null +++ "b/testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\206100.py" @@ -0,0 +1,422 @@ + + +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 * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(type=2): + print("这是一个需要执行的任务。。。。。") + create_salesorder(type) + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) +def add_goods(goodsname,chrome): + sleep(4) + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + goodsname) + sleep(2) + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + Keys.ENTER) + sleep(2) + #获取页数 + # pagecount=chrome.find_element_by_xpath('(// li[ @class ="number"])[16]').text + pagecount=10 + for i in range(int(pagecount)): + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # goodsname) + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # Keys.ENTER) + sleep(1) + chrome.find_element_by_xpath( + '//th[@class="el-table_18_column_269 multiple-column el-table-column--selection is-leaf headerCellClassName el-table__cell"]/div/label/span/span').click() + #翻页 + sleep(2) + chrome.find_element_by_xpath('(//button[@class="btn-next is-last"])[6]').click() + + #点击确定 + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(2) +def create_salesorder(type=1): + import time + pro_path = get_pro_path() + start = time.clock() + print('订单开始时间', start) + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + # chrome = WebChrome(chrome_options=opt) + chrome=webdriver.Chrome(chrome_options=opt) + try: + + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + # chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + #切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + # chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + # actions = ActionChains(chrome) + # actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + # chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + 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(4) + 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")]')) + #获取订单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "销售订单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(4) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + + + sleep(2) + # 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('国药集团北京') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + + # chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys('北京强生非') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]') + chrome.execute_script("arguments[0].click();", btn_div) + 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) + #客户名称 + 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( + '1000486') + sleep(2) + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:客户编码,客户名称,收货地址号,收货地址信息,公司编码,货币码,税率/税区,客户分类,联系人,联系人电话"]').send_keys( + Keys.ENTER) + sleep(2) + chrome.find_element_by_xpath( + '//div[@class="multiple-header number_col" and text()="1000486"]/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"])[4]').click() + sleep(2) + #业务员名称 + chrome.find_element_by_xpath( + '//div[text()="业务员名称 "]/following-sibling::div/div/div/div/div/div/div/div/span/span/i').click() + sleep(2) + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys('杨春刚') + sleep(2) + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys(Keys.ENTER) + sleep(2) + chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + sleep(2) + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[4]').click() + #其他信息页签 + chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + sleep(2) + chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + + # 点击添加商品弹出添加商品子窗口 + for i in range(1): + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + add_goods('PTCA',chrome) + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(20) + # for i in range(1): + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # add_goods('PTCA', chrome) + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + # sleep(10) + + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # 'PTCA') + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # Keys.ENTER) + # sleep(1) + # chrome.find_element_by_xpath('//th[@class="el-table_18_column_229 multiple-column el-table-column--selection is-leaf headerCellClassName el-table__cell"]/div/label/span/span').click() + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + # sleep(2) + # sleep(6) + while True: + try: + chrome.find_element_by_xpath('//div[@class="el-loading-spinner"]').is_displayed() + continue + except: + break + for i in range(1,101): + sleep(2) + element = chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + chrome.execute_script("arguments[0].click();", element) + + # element=chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + # element.click() + # element=chrome.find_element_by_xpath('//span[@class="form-grid-check-num" and text()="%s"]/ancestor::td/following-sibling::td[5]'%i) + # element.click() + sleep(2) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # chrome.find_element_by_xpath('//td[@colid="col_177"]/div/div').send_keys('1') + sleep(2) + chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]'%i).click() + # element = chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]' % i) + # chrome.execute_script("arguments[0].click();", element) + # element = chrome.find_element_by_xpath( + # '//span[@class="form-grid-check-num" and text()="%s"]/ancestor::td/following-sibling::td[6]' % i) + # element.click() + sleep(2) + chrome.execute_script( + "document.getElementsByClassName('vxe-table--body-wrapper body--wrapper')[0].scrollTop = %s*30;" % i) + sleep(2) + + # print('200条输入完毕') + # chrome.find_element_by_xpath('//button[@ class="vxe-pager--next-btn" and @title="下一页"]').click() + # # sleep(2) + # chrome.execute_script( + # "document.getElementsByClassName('vxe-table--body-wrapper body--wrapper')[0].scrollTop=0;") + + #输入第二页数据 + # for i in range(1,51): + # + # # element = chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + # # chrome.execute_script("arguments[0].click();", element) + # + # # element=chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + # # element.click() + # element=chrome.find_element_by_xpath('//span[@class="form-grid-check-num" and text()="%s"]/ancestor::td/following-sibling::td[5]'%i) + # element.click() + # sleep(2) + # # element.send_keys("1") + # # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + # chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # # chrome.find_element_by_xpath('//td[@colid="col_177"]/div/div').send_keys('1') + # sleep(2) + # # chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]'%i).click() + # # element = chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]' % i) + # # chrome.execute_script("arguments[0].click();", element) + # element = chrome.find_element_by_xpath( + # '//span[@class="form-grid-check-num" and text()="%s"]/ancestor::td/following-sibling::td[6]' % i) + # element.click() + # sleep(2) + print('ok') + + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000;") + # sleep(1) + #右侧滚动条向上 + # chrome.execute_script("document.getElementsByClassName('vxe-table--body-wrapper body--wrapper')[0].scrollTop=0;") + # for i in range(1,201): + # element = chrome.find_element_by_xpath('(//td[@colid="col_197"])[%s]'%i) + # element.click() + # sleep(2) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # element = chrome.find_element_by_xpath('(//td[@colid="col_198"])[%s]'%i) + # element.click() + # sleep(2) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # lock = threading.Lock() + # lock.acquire() + # start = time.clock() + #方案一============================开始 + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + # global start + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time1(m)#计划提交时间的分钟 + print('销售订单计划提交时间的分钟',m1) + while True: + m2=get_time_m() #循环获取当前的分 + # sleep(30) + if (m2==m1): + # chrome.find_element_by_xpath('//span[text()="保存"]').click() + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + #方案二===============结束 + chrome.implicitly_wait(0) + while True: + try: + if chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini awsui-button awsui-button--primary"]').is_displayed()==True: + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini awsui-button awsui-button--primary"]').click() + break + + except: + continue + while True: + try: + if chrome.find_element_by_xpath('//p[text()="办理成功"]').is_displayed()==True: + # print('订单完成了') + break + # else: + # print('共享任务创建成功的元素没有出现') + except: + continue + # lock.release() + # sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini awsui-button awsui-button--primary"]//span[text()="确定"]').click() + chrome.switch_to.default_content() + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(60) + # while True: + # try: + # # if chrome.find_element_by_xpath('(//span[text()="%s"])[2]'%orderno).is_displayed()==True: + # if chrome.find_element_by_xpath( + # '//span[text() = "1"]/ancestor-or-self::td/following-sibling::td/div/span').is_displayed() == True: + # # print('aaaaaaaaaaaaaaaaaaaaaaaa', chrome.find_element_by_xpath( + # # '//span[text() = "1"]/ancestor-or-self::td/following-sibling::td/div/span').text) + # break + # except: + # continue + chrome.implicitly_wait(30) + print('销售订单创建完成') + end = time.clock() + print(start, end) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+str(end - start) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + print('CPU执行时间: ', end - start) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=10 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + +def start1(): + count = 1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\206300.py" "b/testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\206300.py" new file mode 100644 index 0000000..8afe7a5 --- /dev/null +++ "b/testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\206300.py" @@ -0,0 +1,387 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) +def add_goods(goodsname,chrome): + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + goodsname) + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + Keys.ENTER) + #获取页数 + # pagecount=chrome.find_element_by_xpath('(// li[ @class ="number"])[16]').text + pagecount=10 + for i in range(int(pagecount)): + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # goodsname) + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # Keys.ENTER) + sleep(1) + chrome.find_element_by_xpath( + '//th[@class="el-table_18_column_269 multiple-column el-table-column--selection is-leaf headerCellClassName el-table__cell"]/div/label/span/span').click() + #翻页 + chrome.find_element_by_xpath('(//button[@class="btn-next is-last"])[6]').click() + + #点击确定 + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(2) +def create_salesorder(type=1): + try: + import time + pro_path = get_pro_path() + # start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + # chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + #切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + # chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + # actions = ActionChains(chrome) + # actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + # chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + 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(4) + 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")]')) + #获取订单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "销售订单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(4) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + + + sleep(2) + # 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('国药集团北京') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + + # chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys('北京强生非') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]') + chrome.execute_script("arguments[0].click();", btn_div) + 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() + #客户名称 + 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( + '1000486') + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:客户编码,客户名称,收货地址号,收货地址信息,公司编码,货币码,税率/税区,客户分类,联系人,联系人电话"]').send_keys( + Keys.ENTER) + chrome.find_element_by_xpath( + '//div[@class="multiple-header number_col" and text()="1000486"]/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"])[4]').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('杨春刚') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[4]').click() + #其他信息页签 + chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + + # 点击添加商品弹出添加商品子窗口 + for i in range(3): + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + add_goods('PTCA',chrome) + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(20) + # for i in range(1): + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # add_goods('PTCA', chrome) + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + # sleep(10) + + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # 'PTCA') + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # Keys.ENTER) + # sleep(1) + # chrome.find_element_by_xpath('//th[@class="el-table_18_column_229 multiple-column el-table-column--selection is-leaf headerCellClassName el-table__cell"]/div/label/span/span').click() + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + # sleep(2) + sleep(6) + for i in range(1,201): + + # element = chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + # chrome.execute_script("arguments[0].click();", element) + + # element=chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + # element.click() + element=chrome.find_element_by_xpath('//span[@class="form-grid-check-num" and text()="%s"]/ancestor::td/following-sibling::td[5]'%i) + element.click() + sleep(1) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # chrome.find_element_by_xpath('//td[@colid="col_177"]/div/div').send_keys('1') + sleep(1) + # chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]'%i).click() + # element = chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]' % i) + # chrome.execute_script("arguments[0].click();", element) + element = chrome.find_element_by_xpath( + '//span[@class="form-grid-check-num" and text()="%s"]/ancestor::td/following-sibling::td[6]' % i) + element.click() + sleep(2) + + print('200条输入完毕') + chrome.find_element_by_xpath('//button[@ class="vxe-pager--next-btn" and @title="下一页"]').click() + sleep(15) + chrome.execute_script( + "document.getElementsByClassName('vxe-table--body-wrapper body--wrapper')[0].scrollTop=0;") + + #输入第二页数据 + for i in range(1,101): + + # element = chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + # chrome.execute_script("arguments[0].click();", element) + + # element=chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + # element.click() + element=chrome.find_element_by_xpath('//span[@class="form-grid-check-num" and text()="%s"]/ancestor::td/following-sibling::td[5]'%i) + element.click() + sleep(1) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # chrome.find_element_by_xpath('//td[@colid="col_177"]/div/div').send_keys('1') + sleep(1) + # chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]'%i).click() + # element = chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]' % i) + # chrome.execute_script("arguments[0].click();", element) + element = chrome.find_element_by_xpath( + '//span[@class="form-grid-check-num" and text()="%s"]/ancestor::td/following-sibling::td[6]' % i) + element.click() + sleep(2) + print('ok') + + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000;") + # sleep(1) + #右侧滚动条向上 + # chrome.execute_script("document.getElementsByClassName('vxe-table--body-wrapper body--wrapper')[0].scrollTop=0;") + # for i in range(1,201): + # element = chrome.find_element_by_xpath('(//td[@colid="col_197"])[%s]'%i) + # element.click() + # sleep(2) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # element = chrome.find_element_by_xpath('(//td[@colid="col_198"])[%s]'%i) + # element.click() + # sleep(2) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # lock = threading.Lock() + # lock.acquire() + start = time.clock() + #方案一============================开始 + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + # global start + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + print('销售订单计划提交时间的分钟',m1) + while True: + m2=get_time_m() #循环获取当前的分 + # sleep(30) + if (m2==m1): + # chrome.find_element_by_xpath('//span[text()="保存"]').click() + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + #方案二===============结束 + while True: + try: + if chrome.find_element_by_xpath('//p[text()="共享任务创建成功"]').is_displayed()==True: + # print('订单完成了') + break + # else: + # print('共享任务创建成功的元素没有出现') + except: + continue + # lock.release() + sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini awsui-button awsui-button--primary"]//span[text()="确定"]').click() + chrome.switch_to.default_content() + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + sleep(60) + while True: + try: + # if chrome.find_element_by_xpath('(//span[text()="%s"])[2]'%orderno).is_displayed()==True: + if chrome.find_element_by_xpath( + '//span[text() = "1"]/ancestor-or-self::td/following-sibling::td/div/span').is_displayed() == True: + # print('aaaaaaaaaaaaaaaaaaaaaaaa', chrome.find_element_by_xpath( + # '//span[text() = "1"]/ancestor-or-self::td/following-sibling::td/div/span').text) + break + except: + continue + print('销售订单创建完成') + end = time.clock() + print(start, end) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+str(end - start) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + print('CPU执行时间: ', end - start) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + +def start1(): + count = 1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\206300_\345\257\274\345\205\245_selenium\344\270\215\346\224\257\346\214\201.py" "b/testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\206300_\345\257\274\345\205\245_selenium\344\270\215\346\224\257\346\214\201.py" new file mode 100644 index 0000000..9cadd4d --- /dev/null +++ "b/testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\206300_\345\257\274\345\205\245_selenium\344\270\215\346\224\257\346\214\201.py" @@ -0,0 +1,328 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) +def add_goods(goodsname,chrome): + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + goodsname) + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + Keys.ENTER) + #获取页数 + pagecount=chrome.find_element_by_xpath('(// li[ @class ="number"])[16]').text + pagecount=10 + for i in range(int(pagecount)): + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # goodsname) + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # Keys.ENTER) + sleep(1) + chrome.find_element_by_xpath( + '//th[@class="el-table_18_column_229 multiple-column el-table-column--selection is-leaf headerCellClassName el-table__cell"]/div/label/span/span').click() + #翻页 + chrome.find_element_by_xpath('(//button[@class="btn-next is-last"])[6]').click() + + #点击确定 + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(2) +def create_salesorder(type=1): + try: + import time + pro_path = get_pro_path() + # start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + # chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + #切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + # chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + # actions = ActionChains(chrome) + # actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + # chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + 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(4) + 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")]')) + #获取订单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "销售订单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(4) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + + + sleep(2) + 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('国药集团北京') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + + chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys('北京强生非') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').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"])[4]').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('杨春刚') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[4]').click() + #其他信息页签 + chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + + # 点击添加商品弹出添加商品子窗口 + chrome.find_element_by_xpath('//button[text()="导入"]').click() + sleep(1) + # chrome.find_element_by_xpath('//span[text()="上传Excel文件"]').click() + sleep(1) + element = chrome.find_element_by_class_name('upload__text') + chrome.execute_script("arguments[0].click();", element) + sleep(1) + chrome.find_element_by_class_name('el-upload__text').send_keys(r'D:\PycharmProjects\骨科库存占用专项测试\testcase\od\销售订单明细8.xls') + sleep(1) + # for i in range(1): + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # add_goods('PTCA',chrome) + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + # sleep(10) + # for i in range(1): + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # add_goods('PTCA', chrome) + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + # sleep(10) + + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # 'PTCA') + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # Keys.ENTER) + # sleep(1) + # chrome.find_element_by_xpath('//th[@class="el-table_18_column_229 multiple-column el-table-column--selection is-leaf headerCellClassName el-table__cell"]/div/label/span/span').click() + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + # sleep(2) + sleep(6) + for i in range(1,101): + element = chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + chrome.execute_script("arguments[0].click();", element) + + # element=chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + # element.click() + sleep(2) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # chrome.find_element_by_xpath('//td[@colid="col_177"]/div/div').send_keys('1') + sleep(2) + # chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]'%i).click() + element = chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]' % i) + chrome.execute_script("arguments[0].click();", element) + sleep(2) + + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + for i in range(1,101): + element = chrome.find_element_by_xpath('(//td[@colid="col_197"])[%s]'%i) + element.click() + sleep(2) + chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + sleep(2) + element = chrome.find_element_by_xpath('(//td[@colid="col_198"])[%s]'%i) + element.click() + sleep(2) + chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + sleep(2) + # lock = threading.Lock() + # lock.acquire() + start = time.clock() + #方案一============================开始 + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + # global start + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + print('销售订单计划提交时间的分钟',m1) + while True: + m2=get_time_m() #循环获取当前的分 + # sleep(30) + if (m2==m1): + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + #方案二===============结束 + # lock.release() + sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini awsui-button awsui-button--primary"]//span[text()="确定"]').click() + chrome.switch_to.default_content() + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + sleep(20) + while True: + try: + if chrome.find_element_by_xpath('(//span[text()="%s"])[2]'%orderno).is_displayed()==True: + print('//span[text()="%s"]'%orderno) + break + except: + continue + print('销售订单创建完成') + end = time.clock() + print(start, end) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+str(end - start) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + print('CPU执行时间: ', end - start) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + +def start1(): + count = 1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\20650.py" "b/testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\20650.py" new file mode 100644 index 0000000..c6aac9e --- /dev/null +++ "b/testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225_\345\244\232\346\230\216\347\273\20650.py" @@ -0,0 +1,389 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) +def add_goods(goodsname,chrome): + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + goodsname) + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + Keys.ENTER) + #获取页数 + # pagecount=chrome.find_element_by_xpath('(// li[ @class ="number"])[16]').text + pagecount=5 + for i in range(int(pagecount)): + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # goodsname) + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # Keys.ENTER) + sleep(1) + chrome.find_element_by_xpath( + '//th[@class="el-table_18_column_269 multiple-column el-table-column--selection is-leaf headerCellClassName el-table__cell"]/div/label/span/span').click() + #翻页 + chrome.find_element_by_xpath('(//button[@class="btn-next is-last"])[6]').click() + + #点击确定 + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(2) +def create_salesorder(type=1): + try: + import time + pro_path = get_pro_path() + # start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + # chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + #切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + # chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + # actions = ActionChains(chrome) + # actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + # chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + 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(4) + 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")]')) + #获取订单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "销售订单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(4) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + + + sleep(2) + # 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('国药集团北京') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + + # chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys('北京强生非') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]') + chrome.execute_script("arguments[0].click();", btn_div) + 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() + #客户名称 + 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( + '1000486') + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:客户编码,客户名称,收货地址号,收货地址信息,公司编码,货币码,税率/税区,客户分类,联系人,联系人电话"]').send_keys( + Keys.ENTER) + chrome.find_element_by_xpath( + '//div[@class="multiple-header number_col" and text()="1000486"]/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"])[4]').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('杨春刚') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[4]').click() + #其他信息页签 + chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + + # 点击添加商品弹出添加商品子窗口 + for i in range(1): + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + add_goods('PTCA',chrome) + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(20) + # for i in range(1): + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # add_goods('PTCA', chrome) + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + # sleep(10) + + # chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # 'PTCA') + # chrome.find_element_by_xpath( + # '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + # Keys.ENTER) + # sleep(1) + # chrome.find_element_by_xpath('//th[@class="el-table_18_column_229 multiple-column el-table-column--selection is-leaf headerCellClassName el-table__cell"]/div/label/span/span').click() + # chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + # sleep(2) + sleep(6) + for i in range(1,51): + if i==50: + print('50为什么有问题') + + # element = chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + # chrome.execute_script("arguments[0].click();", element) + + # element=chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + # element.click() + element=chrome.find_element_by_xpath('//span[@class="form-grid-check-num" and text()="%s"]/ancestor::td/following-sibling::td[5]'%i) + element.click() + sleep(2) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # chrome.find_element_by_xpath('//td[@colid="col_177"]/div/div').send_keys('1') + sleep(2) + # chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]'%i).click() + # element = chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]' % i) + # chrome.execute_script("arguments[0].click();", element) + element = chrome.find_element_by_xpath( + '//span[@class="form-grid-check-num" and text()="%s"]/ancestor::td/following-sibling::td[6]' % i) + element.click() + sleep(2) + + # print('200条输入完毕') + # chrome.find_element_by_xpath('//button[@ class="vxe-pager--next-btn" and @title="下一页"]').click() + # # sleep(2) + # chrome.execute_script( + # "document.getElementsByClassName('vxe-table--body-wrapper body--wrapper')[0].scrollTop=0;") + + #输入第二页数据 + # for i in range(1,51): + # + # # element = chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + # # chrome.execute_script("arguments[0].click();", element) + # + # # element=chrome.find_element_by_xpath('(//td[@colid="col_177"])[%s]'%i) + # # element.click() + # element=chrome.find_element_by_xpath('//span[@class="form-grid-check-num" and text()="%s"]/ancestor::td/following-sibling::td[5]'%i) + # element.click() + # sleep(2) + # # element.send_keys("1") + # # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + # chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # # chrome.find_element_by_xpath('//td[@colid="col_177"]/div/div').send_keys('1') + # sleep(2) + # # chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]'%i).click() + # # element = chrome.find_element_by_xpath('(//td[@colid="col_178"])[%s]' % i) + # # chrome.execute_script("arguments[0].click();", element) + # element = chrome.find_element_by_xpath( + # '//span[@class="form-grid-check-num" and text()="%s"]/ancestor::td/following-sibling::td[6]' % i) + # element.click() + # sleep(2) + print('ok') + + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000;") + # sleep(1) + #右侧滚动条向上 + # chrome.execute_script("document.getElementsByClassName('vxe-table--body-wrapper body--wrapper')[0].scrollTop=0;") + # for i in range(1,201): + # element = chrome.find_element_by_xpath('(//td[@colid="col_197"])[%s]'%i) + # element.click() + # sleep(2) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # element = chrome.find_element_by_xpath('(//td[@colid="col_198"])[%s]'%i) + # element.click() + # sleep(2) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # lock = threading.Lock() + # lock.acquire() + start = time.clock() + #方案一============================开始 + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + # global start + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + print('销售订单计划提交时间的分钟',m1) + while True: + m2=get_time_m() #循环获取当前的分 + # sleep(30) + if (m2==m1): + chrome.find_element_by_xpath('//span[text()="保存"]').click() + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + #方案二===============结束 + while True: + try: + if chrome.find_element_by_xpath('//p[text()="共享任务创建成功"]').is_displayed() == True: + print('订单完成了') + break + else: + print('共享任务创建成功的元素没有出现') + except: + continue + # lock.release() + # sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini awsui-button awsui-button--primary"]//span[text()="确定"]').click() + chrome.switch_to.default_content() + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(60) + while True: + try: + # if chrome.find_element_by_xpath('(//span[text()="%s"])[2]'%orderno).is_displayed()==True: + if chrome.find_element_by_xpath( + '//span[text() = "1"]/ancestor-or-self::td/following-sibling::td/div/span').is_displayed() == True: + print('aaaaaaaaaaaaaaaaaaaaaaaa', chrome.find_element_by_xpath( + '//span[text() = "1"]/ancestor-or-self::td/following-sibling::td/div/span').text) + break + except: + continue + print('销售订单创建完成') + end = time.clock() + print(start, end) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+str(end - start) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + print('CPU执行时间: ', end - start) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + +def start1(): + count = 1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225\346\230\216\347\273\2068.xls" "b/testcase/od/\345\244\232\346\230\216\347\273\206/\351\224\200\345\224\256\350\256\242\345\215\225\346\230\216\347\273\2068.xls" new file mode 100644 index 0000000000000000000000000000000000000000..24b559a7a47d7cde5eed7e566448a532bc4ea8ae GIT binary patch literal 278016 zcmeF)3HT&cedzs~fA4Emb$3;DS9f)FRk020f0>#842W!ks4xh_DzXg>i)_lGvIv8S zpooBof{LgyQIi{ElB-E>Hp#wTCCSx$lj|Ez%uRChCYqJxCWiYv)!kL+i{0;&=e|Do zd6$`a&Q$+Sov!87(w{kX`t+B-WPknRKk9$Oc*&pRjDqp6FV>8*mS56d86<)xJjnB78l^4s-BXAB z-|}aEzNoSn$l7l)t~d6k+j0HB)g;v=H6%49wIsDAnUdrdVAzs6lDd+5k{n5{Bu`Rb(m;|gX((wV zDUdXl6iS*%iX_F75=jS1I#|*nk`9%0n53)IziHjl1`FzvZPZay+YEdl1`KKN=c_ndX=PC zOL~o@GbEiUX}6@aB)wMB*^tD@>c9s6&{jr()O=hW@n z_#;WLmo>?`am&p&-!}Q*_2=Yt8?M-*w&D2n-;YR6Th1qyBUior+fD!dk#z3QOiRj~ zYqzwwy#CmqOVrUgu||82{^Ta2Gb-}C!v&YGOLzb55hy!Wv!>V4`; zIO&$_uDIcU*Nkt=DqpwAnsQ;I3?$Z4@Fyni0?jESb z1C^NGcmLOJeFsjT1E`d<9U>%cwnz&-K6J@LS0aNwT!J$(vr0NV#XSPp!!9Qa^4@WFE6gXO>ni}v4) zanYA&?9y2!J}6F(Op?{hwjOub{PosxF_exF(rsm)BXci4XWvzq=tU;dM@D+J%!?eo zie*SBi#b^O&`e%hhD(|j+%BD5R;5>nTEXFy`4-K>!_s)`akDT!DwgfJ?64CrlQkSE zJ!GV>%w>n^?>c;vzvb`=${#PiXryO^zM|=tV_j;awAGz(LcYRn(iKNK-()MCzk9yU z*;~`q=I{G@+BwKD{{BU&j_l7DCn{g{w@CBSX6#lzFO*{^8a7X-=a>t z?9aSDkC@iOKh9^&^S3U^KXOU_;Y;#s3-eVctu3k}*Q#w-i&g1KG+nRSigY_CFU?ow zC+SA&FMRgu~NqNt#y5=p)S6%fM z<*TlHi}F=hzD4<}Yu}>$?Mw1i*S|&ORad}8`Nu8ES6u}cl~-K{7v-O{BwuwcTvT3l zHC&Yc$|d=#E8?Q^s%zq+eAQKPQNHTBxF}zBWn7f6x;8G#KW|CC>iW2-yy^x?(OWuexR~%2!=A7v-z2n~U;QSI$NG zs%z(>{M(o0tFE7m%B!xRi}LSUlCQdoE-J6OjxNf-Z%O|BOY$FBlK(eE@_%AU{!cB*|LG<9Kf5IV=a=L^wRNzpy0#pO)nR^OF4UEXjXyN&c2C zi$50%OY%!g@+(X7YfJJQOY&Pw^35gr_LBVWl6+@LzPBWQuq1!DBtKY^A1=v{mgFZ( z@(*5;f9R6@txNKcSdxF#lKf+qa)9VP!m-<0XjH0M3?WuGnb_p@8l zY0;BLEZL;=&%YS|-2KFB4CAYkA#+bV@40hZ=YIPRnO8At1w+N|y<6UTnEbbUt7KNC zkxhMvw5kgK(z{-E?ZX$mu%~QndHbF(TzuUvPw!J@(>JQEd*i+@JwAVp&IGM}S@zk9fSwXERzJzsuQ6)YHA{$Y1%&l~qi-h~%` z`n6YF^AEda!Sk21(x2M>+_{yD{_F-Rq+Y7ksfxSi`A5|T9dT~^&hz%Xu)CILwRX=l zwQ~RC>?bZ&J0)LGdRB_d!sdl$FOR$Yh21i$`0hq$O2VB%BuZn-}%f_vhl}V zu3kvqAMCAMyYHcUUn?)wHvQhCThEb~+iyQjfBB1N8BfZ>RxUmE0`+oD4n-EMtKiLN ze`WVmd#~KPrVh?+`_9{=0(q$>$6fx+Q&MF5^7+Tp)!(uAdD#T1`VE-#KT)-F1IpURTCH@@+=?w=J@FJ}ekxmv*|EZLj% z<>jG|oO#wPSG{!aP0w1j_AO`myHz1M{PR#1Z06xlKK!jc&pmvMQMu^!YyVO0i z3*C#51;k^OHVsby*UfiM#vug>f=W}a>rAD_2$_Q%|mtON+qZh z$l814HR%bYUdUPZ2iI>sN0y={_q@4$&hK3><)Sy-d(Et})JwH6dCM6O-F5fF7f4xk zq8?+k?>tr=wg0^P<=0X>XMbq)Jv&P^>TV;tIbxKvbE}Jl%=UPoq4vZk@_^S_C9;g zr?1@d*x%mwYWdRVsp|gbUbN*>b$M1_RGU$gZ@z0;(~GS3;;fvyz+O^rnl&#c>-?9C z_nm#lLuWkn!X63KJ@<@Z;^Iwp?Hspf?+2d0}h&Vzs97Id|PXt9yU<$Itn*$Nua|*;6$~y-QtZs~4Oo_vnVP<++Eid6PPXhZ*xz za;tnyESa$`_v-9cpxz~CfVu}fc&p?;yXRB8zjOXE#_9#f?ved_Q(_%7jdTL~$dU3Cyb7ZsUhjmt$^KkY)^)WhqudGD{>I{%=Qg_*( zzekoeeW6NAuH2$7O>a3bJwfCwP&Y7jsi_0<8+*>(|Ic@Czx`|K9<4q!e`=q3nY{e+ zqfb1l=F7`(oORgk&ph=5m&(h@^)J6(eKN?)Z|%u)kG$r*J+oX@c6QDl@<@1%dMU>- z-}Kq8%{PBu*>VU}QMpK8D__MvMZVg7-QLM%|8nui@2biph}G5A9qa2mWw!Z zzJ9d)D_?frrT%Oa&8*7fqjSy@_w2e>vRCCX*6OOfSld*uWd3fc9QWSGAHCa9S93+a zVJ`XG)^-K*{qdV`z3t|kCVQ^DZr@F}U3c|$S58j3`Ia}{e9INLU3c?M9b?N6-tf%D zfB4kR_doyU&s{sc-z$Kv$#>P&zpL^c^%wTY8stu4oPW}}Ynugmy}C`dXH`hN<&bk5 z^0n@puDtoi8?U?VwtZL0ae3gfFJJk|-SU<-RcKvuzI2cA5}AMnU}9++q%r#DevDn zdUHB&d$#OdyQCUsTcF-9Z`_g3+@>~fJ$>hN-sXJX`nJ_N3C)_eXE+gmd)LzPPBA`(yCB1vuavj-zhU^XW?wQ zdHrmvI!M>Lp(;_mGq0dkbr{l_Ye&!Cnbpwxsyb$CS*5J6rG=%~^ki2vvszi(xqWu1 zHs%Y;YGrNLnyQuQuBqdo-kDd+`kLAXwb=OvuIII~Yh(V_X@$yL*YjH0sm?`peyq<{ zx}I0cHdQIJl}^{Wo>$6hdVHtroXyNDWlhbT)!1xiUMZVugJv^l2XQ^GqD^&`t>?9} zOWg(5vzl06Rp-v^q?;`|uZRtGq|(DUufvVJA~ttryPDl-*0!s~Z)EkczP?Ru+;q2Q z6}^$w$lA`0><~>)gpIsHHq<_+>zq6vVEtD^E%kJsp6~- z)^}u=`u5ogxRF=LhPuMl6*@nH8(Mv+%9_>3bc45L^|8LDPR?!luCJ!&nA-Jh8@FY< zzP_4XK5FiK_onxz^bWGB>ODOu^Am7ezVAEI_2hfIsg{)1MYg1T*SBw1OHwELw%G}} zEw6{|>uQVhU0+uh{Oqco9jtBn&Trc`tC;zcw&(l4x?SEm+u+$dx92snt~Me)3Fce4 zJ+Fv0_14+xJAZ3-7Od^c4%Pg2usyGdRdqql&VuRT*q&F*hN}MAv6@{L+w*!^+o{$% zJvj5ZdBto~w+?j<%+HVQStYIQN{`L-Mm$?-UPqhi1etA-EL^I0M_x(W)o0m`yjpf_ zS8-kw>#O-T&1zytUK2ajVODpR=_iMJYhDxEcd0nv`E_;IPj@f7N$tpYeusAM&9*Yz z_qCmB7p8ZxS;g$gc7A=kcJrHWVz&2dJGC3!v}!i9y6+5XME zDmJrEf%(a{nbpMl4ponv`OdFzs7hDIa(FHU)2?hc);F^&b6&B#^4&;3BX;Gxu`OL#z8f3rgJoJj z)3az-zDwIx-R{bEX>C`!Vfjw1sax8ve8bl_=es;LjCfaePyQ(Q9=*A`YgkmQ?4OpOWdjWqR;-!}tf8J}uKXh|B&$ravRoSIIz3zO3?2q+gZkr)7GD4B)gbTk^{? z{eVojA1C7!2|=Hb=~XiQCz<|+O!vtEPpUG0Ri;nLw0FE={E1B8BhyQy)_zH*^50#f zECWD&Ri2|4r z&&%|ksv=G@jOS(gYMBmOhVed`UMbUW%JlOxJ>+D=ctNH&%k)I)ee?@5eL|+qQw-y4 zGCg0Whnj}*ahcvC)4!7G&&%|rSI9_5mSH?B)7Q)ND>D6*Orui`<8NeogG`UN4dV+k zeNd)q;Hu|k`Wl&zWKgarWO|iM|Eo-YSf=4C4ddG~y;`Q5U8!4{-XYU($@Ggdm0h2W z2W1&Q-TJM{a}t*&HC86_@AS{U*>wL+Ta44+wPIMGEEsoxxgg_$$^Y!-tXPpztjzSa zE&r-9!m7rjx6|L`>bi1gpLr#btj%>2*6(!eb}Rb_0d72~;LPhLBc z?oUgLLrLW(V`hIJa&$pz`zZU1QEn~Fl z@9)SMS^E60jHC70abCVBT{2&Pe7-%79D(;8o5!w<@AkrRdF;tpZ(ob^xG&?reRiD3 z0~xbR-(Fuj*52#q^M}%lRWJJ z!TKU2lKRQ#$8!GY+mpz+bNcZ+SjM0`?ufknAu=A_w)H$d)HoFDKTO7{``2yx{H^lj zLto$F@+?HJpChCLt$w_YlpeYNx-GB&qvUane!d4WV>&zW#N2 zq@$PLkOw{b`MgaY^yvGuUB=7Pw`Wrx1L^0-E*U>hKYxysvGk7Gm2dCMWL&*p+sxzR zWsJRT>v{Zg8Efz9jXXZlI8lyQ9-kz)&u^cc$0y5peERV|MVfN->p?ZxerYu?f12F( z^!k3KjNPa2@98p*-{-x&eqJSG`sv5_)iSo9etn)Hc?ZZjQ^*XKTE~} z>`wCSd992Ks4xF)86!~NpL1lqK>huDq?J}b|IU@hEB*R8Pwr(;Z{*v5zKk#Uc`skz z1v1v4e!MP}aR>F|b&-rgs9ztilko`k^YvmGoAB2*^X0!@#{1K+|4U@dLVf!#mGKMp z?Y~UMGSsif%Z1# zTV$+9{rzv1aUWk56FKd5?@8 zsV{H8u^;8{lh1DbdVIU_cGUm<@@cNG{~g9VF#iGL0o*U%X*`Jfc*uAN>wA~+F1-KU z#>1$O_ZW|0|K4jnisSW|@fgZKZaj|T|32e=a=i2Ud%}1^J`eNw{l@#{ddcG_jVH0Z z4;UXneSOgQAnxB!8BZDC9Omca)5g=7{~_Z;@WF?T594@z#P|sI=NaRp_&j;mcs8p) zV?}j-pN=wW7$1{Y)fIuH{P~!eEB&*@O!E|}=6NU1@|5RZnpaqmrv&%Xa-{`%%9bxJ zS6Ps!bokP8!uRjWQ+|DEIpO+u&urFrgxJa0i>e?i`0L7sf!>ATi3T#z?fkSC8pzU#f?1$p61^1hS) zuVXq^uwhK2EwfQxr_qXdQJrPes32NY=hrkUiWN&)R1ztwb80%TEKXEs(=@7x64iM$ zjnucY)EP95Y9d5+?o6Y)_)wiS)2JaM6RY!O8a2g=>P(qNEs>%+N2XC*oT$!@X=I8L z)p;?EEHR=wBc_opLR9C%H0p>C)mbo&x}rmM{HIY*Y^aX>G;&0S>X=U>SH?kBM|&E1 zqC|C^r%_*wsE+V78i)|pv7JV~_)s0yX*3ias^dA0Mq)#CB&SgzPpH%}oJM1DqB?rh zD3lIElPsEu8KW$Uj)z+98gVhLBmbDT7#VPUquSBer(&!W?f z%hQpyr`z%>5#p<}d9M~9z9x%aBRV`Ii_Q=mo|#2wiVSyW(Qa|!Sy^8R$@W!^06dt)~5jbgqxWzm~Ne79uLEz$;g zYZl!q`nxTQZZqDKj)*>8=ItWEH)r$SY`ixeC4D;YEuzA=X7k=ECcGny?hp~)nMHSs z2k*+FyF`O`XVKka!MA16+eCu*WYIn1zi{2sjdmxJ*FrJY*oL_P86bC+-MGuMsAIhSKjE_kj&P%?__;}imJFSU#8=sIm zoX>mM_&%w_dGsFRlTwHC=n>=lr4HxOdyOBEI-Ez38lRFnoJWrtpO!kDM~@qykvg15 z?=yZ->Tn)CVf>KP;XHc3@$aM#=h2hK4@(`+qYoILl{%b9A2fbM>Tn)CWqeNRa2`Ev z{HWC7Jo=FFV^W9n=)=a3OC8Rmj~M@6>Tn)CV|-rfa2|cs_=42oJbKpn38}+rv_+k#{H28zrz8@vg4`tEOD0vK`RYdA14f5l# zj%WkXHbmPI?Lf4NXeXjw68*buJCBvG~u%m*;s36h&++BfRR-`2+_sfd3#N^k}inPS&@2euJNi_G% zinu8E%Zjwb=nzK{wcE}Eit)Y zR-`3HU;8nLRuQcsT1T{jXd9yKh;|^_M6?spE{T3Qy8@1tXzrI4X^GLd`elfYmuT*n z6={jlOP+w}L_{YcI$5Im=h2F^#OO=W{jwr0G5WmI5WN!7>4;v1=+%f`gXj#2=6+d` zmYCcxE7B5^`(;I1VsgK%NK1@QND)jG4BRMH%c`3%Zjwbr$lqVtVm0YKJOuk=6+d`mKc5ByAeH%=sk!YLG)fkk0N>u(c_5TCsBTk zp1{2KBYG0i2M~P_(NlA4c>MM9(1lD57U2nqQ3txw>+{$d_Ow`qkMLS4jQx zYgts#mQsLU3aMXyJu6w3lJo1R0KXLENm72q3i2c=_e%kODZnoUd6J};Y)Le4sVT^l zBz>7CA`6j?sDr4BsE5cwse+g}RuBq{ex0e&gSlO%nskC$lfmje7!kS9rc z$rBNsgh=;G0e&gSlO%m9x?f~00nF3=QjjM}`ukpmNcT%Yo+Rld&yZ;Dmje7!fL{vm zO96f<$de>}ndczdgXmmD=OH>D(FGFaXO`}l0{l{tCrSF+b-xtkNs>PA5=6RR3i2dL zFL^nlD-bEa{6=NK_e(*ZB;|f7z%K=PlBC~vb-xtkNs_)y z-7f|Br2xMa;FkjYQjjM}xnBzKOF^C_<)4iO_@y9ElJsqP3nJYw1$mOBm%I~^?icAv zjd^cFr2C}+zZB$2lD>xf5b1s?$de?!r0$mj{8Er7Nx5GN@Jm6SB;|f7z%K=PlBBOe z_e(*ZBGO2I6y!;gevEX#6y!;g{yyC=1$mOB&-)-E-7f`s zlBAdX5F*_#1$mOBmwX11?w5i*Ny`0Fl&dTEi+n9wqTifdamCaxzm-M0UsO-^e0@c< zzZB8_QiNZM@JkVXDZ(#B_@xNH6s0Fj?w2C`Qk0%B`j+W_kpXNluY*YUOHq2l=u6T4 zQk0%B`aDmfxnGL#OA&r4N>7;FFGcu8^(NAn8DN>ZUy9NbMlU%*6d}_6QiNZM(i28s z%E5?qzZ9h>j9yarOHq2l=<{^H6ycX*+M8(pDN}@BittMjekn>%7<~=8Uy9NbMxUqq zr6@gN^m)2piqaECpSOuf_e&9eDZ(#B_@xNH6s0Fj?w2C`QiNZM#)(+_Nr-g66ycX5 z{8B{wOA&r4N>3PlZ*{*Er6-I&Pxng^ekn>%nA|T#_@xNH6ycX5{8EHpiqaECU%T#? zqV$B(=jnbaN>3Pl-USlnXO`}lBK%T>Uy9NbMqi5Vm!kB9(dX%YDZ(#B<8qX|0+I5| zZ)f*U-7iJ>rHJ;IBK%U6o-q2h=zb}}FGcvJC_Q2H_vwBqN>7-){iO)M6ycX5{8EHp zittMjeksB)Mfjx%zZ9h>jJ}<^UyATcQF_AYC3U|P;g_QHgwadteksB)MfjyCJz@0s z>3%7~FGcAIlRrNy!Y@Vmr3k+i;g=%(QiNZM(i2AC7TqsJ=?SCH)BRGEo-q16-7iJy z38T-`{Zf>kF#0^*FGcAIqtDa*Qk0%B`aIn)MfjyCJz?~cx?hU$OHq2l=p}W(6ycW= z{37F|$ou}|?20R;e)&=s>3%7}FY0@C`SYU^{8EBnO7M#sVJ>e~DZwu#_(i_QhmyKq zO7Keweo;fwV{8EBnRBvc~ znYv#}@Jq?i{Zf*iy!v+Peks8(CHSR;_LmacUrO*x3GFW>_@yL0dG)m)f#^ty=ASYp z_@xBDl;D>V{8Eyhy!sk+zm%jWuRc%rOG$e2>hpBJl%yxGK2P^cDfP=QXIH?nQgZ(M zs06>1;Fl8oQi5Mf@Jk7PDM?RWeOq+Dl;D>V{8EBnO7Kewekq~-r3Al}q$jVw_SYaf zL!x>6O9_4{!7nBFr3Al};Fl8oQj(s$`r38Bl%yxGK2P^cNqX|?XO`}l68utvUrO*x z3GFW>_@yL0dGr7AmEe~W{8Eyhy!v)3zkE46dvw2);Fl8oQi5Mf@Jk8pFD3Y;1izHv zmlE1vO7Keweks8(CHSQTzm(vY68utvUrO*x34STTFD2>8tJk33{!)TpO45^8FR8b` zl;D?=^yJN-AC=&j68utvUrN%GS6{>Zh;+Y{;Fl8oQi5Mf@Jk7PDZwu#_@#vQmlFI^ zLi^E48N%HaPw^`!!Kp{ zr3}B6;g>SnU&`={8aP*9gYK6y{8ENr%JNMl{e3+|x?jp@e<{N+W%#8Gzo?(p%G+Pc z@JktfDZ?-7+g$pV>FqCN_@xZLl;xX9`uh?@dizTmeksE*W%#8Gzm(yZGW=3T`%4+^ zFJ<_p48N4&moofPhF{8Pe<{N+WwgJP;g>SnU&`=HS-y#+*V!(K=KXieXn!fgFJ<_p z48N4&moofPhF{9?OIf~&q+ds;V9Q>C=u||fA=2Al%J54WeksE*WwgJP(f(3~U&`=H z8Gb3lFJ<_p48N4&monO4%J54W?Js5cr7Yh>%KN{R;g>S}Qifm3@JktfDZ?*i_@xZL zl;M}Md=tqremA>+UMbQ1sd^cHDZ?*i_@xZLl;M{${8ENr%J54WeksE*W%#8Gzm(yZ zGW=48U&`=H8Gb3lFJ<_p48N4&monO4%J54Wekr5S}Qifm3@JktfDWm8*mxpIyD-t3C2q<;BNS)}`=0>4z?mkRu% z#yHA95i0PDjNdQw=KXgo@Jj`LslYE4_@x5BRN$8i+FvU0O9g(Zz%LcFzo4z?mkORARp6Hj z{8E8mD)37MeyPAO75JqBzsT5Na-`>4z?mkRt+fnO@{O9g(Zz%Lc}r2@ZH;Fk*gQh{G8@Jj`LslYE4_@x5B zRN$8i{8CB%@|EoVsr#h@zf|Ct3j9)mUn=lR1%9c(FBSNu0>4z?mkRt+fnO@{O9g(Z zz%Lc}r2@ZH;Fk*gQh{G8@Jj`LslYE4_@x5BRN$8i{8E8mD)37MeyPAO75JqBzf|Ct z3j9)mUn=lR1%9c(FBSNu0>4z?mkRt+fnO@{O9g(Zz%Lc}r2@ZH;Fk*gQh{G8@Jj`L zslYE4_@x5BRN$8i{8E8ms_=`9-!FH}ug4>QiWftcz#rcUt}y^)b+~{9WT+m z|85n2slqQ+_@xTJRN4>QiWft@JkhbslqQ+_@xTJR8znFm+bzj z`=tuMRN4> zQiWft@JkhbslqQ+_@xTJRNzHTb0l zzsNY$D5>{X-kT-9L4|)ZmvI{8EEoYVb=9eyPDP zHTb0lztrHD8vIg&Uuy764SuP?FE#k32EWwcmm2(1gI{X!OAUUh!7nxVr3Sy$;FlWw zQbYSo4SuP?FE#k32EWwcmm2(1gI{X!OAUUh!7nxVr3Sy$;FlWwQiES=@JkJTslhKb z_@xHF)ZmvI{8EEoYVb=9eyPDPHTb0lztrHD8vIg&Uuy764SuP^FKS#m$N1XpimRu7 z`9HEq_e&jqslzXI_@xfN)Zv#p{GxsxBmY)W9e%09FLkuP)Zv#p{8EQs>hMb)eyPJR zb@)YXSMGv3{8EQs>hMb)eyPJRb@-(YztrKEI{Z?HU+VBn9ez=x8S7h}AkzE4)Zv#p z{8EQs>hMb)eyPJRb@-(YztrKEI{Z?HU+VBn9e%09FLn5(4!_jlmpc4XhhOUOOC8UT z>hMb)eyPJRb@-(YztrKEI{Z?HU+VBn9e%09FLn5(4!_jlmpc4XhhOUOOC5fx!!LFC zr4GN;;g>r6Qiosa@Jk(jslzXI_@xfN)Zv#p{8EQs>hMb)eyPJRb@-(YztrKEI{Z?H zU+Sq}{xG|L>VB!iFLn5(4!_jlmpc4XhhOUOOC5fx!!LFCr4GN;;g>r6Qiosa@Jk(j zslzXI_@xfN)Zv#p{8EQs>hMb)eyPJRb@-(YztrKEI{Z?HU+VBn9e%09FLn5(4!_jl zmpc4XhhOUOOC5fx!!LFCr4GN;;g>r6Qiosa@Jk(jslzXI_@xfN)Zv#p{8EQs>hMb) zeyPJRb@-(YztrKE2K*wwO)Z~sU!PrZjnpsS$Rgb@4fv%2zck>N2K>^1UmEaB1AbAz z?UjG}HsF^A{L+A58t_X4erdoj4fv%2zck<%wI%wt=+BQD@Jj=JX}~WH_@x2AG~ky8 z{L+A58t_X4erdoj4fsX<8iT$Mx?dXbO9Ossz%LE>r2)S*;Fkvc(tuwY@Jj=JX}~WH z_@x2AG~ky8{L+A58t_X4erdoj4fv%2zck>N2K>^1UmEaB1Ab}1FAeym0lzfhmj?XO zfL|K$O9Ossz%LE>MSeXG=Y;r2)S*;Fkvc(tuwY@Jj=J zX}~WH_@x2AG~ky8{L+A58t_X4erdoj4fv%2zcf<6{84uQ)cw+cUmEaB1Ab}1FAeym z0lzfhmj?XOfL|K$O9Ossz%LE>r2)S*;Fkvc(tuwY@Jj=JX}~WH_@x2AG~ky8{L+A5 z8t_X4erdoj4fv%2zck>N2K>^1UmEaB1Ab}1FAeym0lzfhmj?XOfL|K$O9Ossz%LE> zr2)S*;Fkvc(tuwY@Jj=JX}~WH_@x2AG~ky8{L+A58t_X4erdojO}V=A?;kZ&zx?s+ zic`O+>KNb5BHb@d_@xQIG~t&f{L+M9n(#{#erdul>X%9LCrwTGr3t?@;g=@-(u7}{ z@JkbZX~HjR-T7yK6YVce_@xQIG~t&f{L+M9n(#{#erdulP57k=zck^OCj8QbU(~Nj z>3eiAB7OXqCj8QbUz+es6MkvJFHQKR3BNSqmnQtugkPHQOA~%+!Y@tur3t?@;g=@- z(u7}{@JkbZX~Hi}_@xQIG~t&f{L+M9n(#{#erdulP57k=zck^OCj8QbUz+es6YVce z_@xQIG~t&f{L+M9n(#{#erdulP57k=zck^OCj8QbUz+es6MkvJFHQKR3BNSqmnQtu zgkPHQOA~%+rhfU8?Eb0yr3t?@;g=@-(u7}{@JkbZX~Hi}_@xQIG~t&f{L+M9n(#{# zerdulP57k=zck^OCj8QbUz+es6MkvJFHQKR3BNSqmnQtugkPHQOA~%+!Y@tur3t?@ z;g=@-(u7}{@JkbZX~Hi}_@xQIG~t&f{L+M9n(#{#erdulP57k=zck^OCj8QbUz+es z6MkvJFHQKR3BNSqmnQtugkM_lODpxuf16!#>UZHC<4?0l_e%?YkzYBNlAp{<>iu6@ z@JkDRX~8co_@xEEwBQ%@yXyIqrWX9tf?rzjOACH!!7nZNr3JsJwdJ4oE%>DczqH_& z7W~qJUs~`>3w~+AFD>|`1;4c5mlpief?rzjOACHczlN#rpYE3y{L+G7TJTE?erdrk zE%>DczqH_&7W~qJUs~`>3w~+AFD>|`1;4c5mlpief?rzjOACH!!7nZNr3JsV;FlKs z(t=-F@JkDRX~8co_@xEEwBVN({L+G7TJTE?erdrkE%>DczqH_&7W~qJUs~`>3w~+A zFD>|`1;4c5mlpief?rzjOACH!!7nZNr3JsV;FlKs(t=-F@JlQ8%b#U;Mcpqg_@xEE zwBVN({L+G7TJTE?erdrkE%>DczqH_&7W~qJUs~`>3w~+AFD>|`1;4c5mlpief?rzj zOACH!!7nZNr3JsV;FlKs(t=-F@JkDRX~8co_@xEEwBVN({L+G7TJTE?erdrkE%>Dc zzqH_&7W~qJUs~`>3w~+AFD>|`1;4c5mlpief?rzjOACH!!7nZNr3JsV;FlKs(w3_$ zZ+~g0e);p+71vJv^53&a_e&doX~QpVw7<0Bmp1&;hF{w7OB;S^!!K?4r47Hd;g>f2 z(uQB!@JkzhX~Qq-_X+aP_cr{}hF{w7OB;S^!!K?4r47Hd;g>f2(uQB!@JkzhX~QpV z_@xcMwBZ-^Yu@_a9*XENL|YLZjz}NBt_{Dm;g>f2(uQB!@JkzhX~QpV_@xcMwBeUF z{L+SB+VD#|^~-$xx;FgMhF{w7OB;S^!!K?4r47Hd;g>f2(uQB!@JkzhX~QpV_@xcM zwBeUF{L+SB+VD#oerdxmZTO`PzqH|(HvH0tU)u0X8-8iSFKzgx4ZpPEmp1&;hF{w7 zOB;S^!!K?4r47Hd;g@#mm%qsFpSoY#@JkzhX~QpV_@xcMwBeUF{L+SB+VD#oerdxm zZTO`PzqH|(HvH0tU)u0X8-8iSFKzgx4ZpPEmp1&;hF{w7OB;S^!!K?4r47Hd;g>f2 z(uQB!@JkzhX~QpV_@xcMwBeUF{L+SB+VD#oerdxmZTO`PzqH|(HvH0tU)u0X8-8iS zFKzgx4ZpPEmp1&;hF{w7OB;S^!!K?4#e`qX)Gz<%?20o}zx-tu>3%Wc7ZZLl;TIEr zG2s^zelg(}6Miw_7ZZLl;TIErG2s^zelg(}6Miw_7d0YY{)ukFFDCqA!Y?NLV!|&b z{9?i{Cj4T;FDCqA!Y?NLV!|&b{9?i{Cj4T;FDBYwOtin4Xn!%${$is2#e`o>_{D@@ zO!&owUrhMLgkMbf#e`o>_{D@@O!&owUre;WnDC1UznJig3BQ=|iwVD&@QVq*nDC1U zznJig3BQ=|iwVD&@QVq*nDC1UznJig3BQ=|iwVD&@QVq*nDC1UznJig3BQ=|iwVD& z@QVq*nDC1UznJig3BQ=|iwVD&@QVq*n5kd>D!YH`elg(}6Miw_7ZZLl;TIErG2s^z zelg(}6Miw_7ZZLl;TIErG2s^zelg(}6Miw_7ZZLl;TIErG2s^zelg(}6Miw_7ZZLl z;TIErG2s^zelg(}6Miw_7ZZLl;TIErG2s^zelg(}6Miw_7ZZLl;TIErG2s^zelg(} z6Miw_7ZZLl;TIErG2s^zelg(}6Miw_7ZZN5;1?_P%eQ7%oR#`z{{3mo(EVb;FBbe_ z!7mp4V!nm`RmygXQzJon=I1(V#6;s{9?l| zHvD44FE;#Q!!I`cV#6;s{9?l|HvD44FE;#Q!!I`cV#6=$S08h~*zk)Dzu54L4Zqm% ziw(cn@QV$<*zk)Dzu54L4Zqm%iw(cn@QV$<*zk)Dzu54L4Zqm%iw(cn@QV$<*zk)D zzu54L4Zqm%iw(cn@QV$<*zk)Dzu54L4Zqm%iw(cn@QV$<*zk)Dzu54L4Zqm%iw(cn z@QV$<*zk)Dzu54L4Zqm%iw(cn@QV$<*zk)Dzu54L4Zqm%iw(cn@QV$<*zk)Dzu54L z4Zqm%iw(cn@QV$<*zk)Dzu54L4Zql_U;Z|`f9ig*;TIczvEdgRezD;f8-B6j7aM-D z;TIczvEdgRezD;f8-B6j7aM-D;TIczvEdgRezD;f8-B6j7aM-D;TIczvEdgRezD;f z8-B6j7aM-D;TIczvEdgRezD;f8-B6j7aM-D;TIczvEdgRezD;f8-B6j7aM-D;TIcz zvEdgRezD;f8-B6j7aM-D;TIczvEdgRe(At3ozyRXH@o6GsbBs+i*&zq;FnJ7mtW6H z>iu^+@Jk1N>A)`?_@x8Cbl{f`{L+D6I`B&ee(At39r&dKzjWXi^*fKbUpnwh2Y%_m zFCF-$1HW|Omk#{WfnPfCO9y`Gz%L#6r31fo;Fk{k(t%$(@Jk1N>A)`?_@x8Cbl{f` z{L+D6I`B&ee(At39r&dKzjWZ24*b%AUpnwh2Y%_mFCF-$1HW|Omk#{WfnPfCO9y`G zz%L#6r31fo;Fk{k(t%$(@Jk1N>A)`?_@x8Cbl{f`{L+D6I`B&ee(At39r&dKzjWZ2 z4*b%AUpnwh2Y%_mFCF-$1HW|Omk#{WfnPfCO9y`Gz%L#6rIY&QAF{im?w1by(t%$( z@Jk1N>A)`?_@x8Cbl{f`{L+D6I`B&ee(At39r&dKzjWZ24*b%AUpnwh2Y%_mFCF-$ z1HW|Omk#{WfnPfCO9y`Gz%L#6r31fo;Fk{k(t%$(@Jk1N>A)`?_@x8Cbl{f`{L+D6 zI`B&ee(At39r)!tFTVKV+vV)MU(!1yJs|0wk{*=wkfe7>dbgy9CA~+|Ba+@L=}}3K zNqSt;`y@Rf>HU(Pl=J~fAC&Zzq^Bi)NYaNTeMHhTl0GWwSxFz0^l?d_ko0|$J}K$@ zC8-hiKPBnYl0G9z{o?NrNm9Q-r+ztCjcKlaMfP)&epJ$rN&0a~|6bDPC4E8CPe}Sn zNk1j&KS=s%Nk1d$XC?idq@S1cMM=*|`UOe9DCw6ZseX>XBI#Ep{hB1@nctA~o05J@ z(r-)pkCMJ5>C2Lym-IW5)GwT=-&|6^w4{D5ME!n&`qct8^0pcaSUtf~qgbkO_0(v3 zYDB27OZtYSKa%vvlD;YFPbB>}Nq;Iy_4@yFNvij;>OrUa^r)UZ>S?rkKBiiARXfw) zNK*epQf5<9Q+JyeB>khLf0Fb+B>l6bf06VZN&hP8MM+z>7@{Bj_s2W%YX^Sqz^@(n zwFAF);MWfP+JRp?@M{Nt?ZB@c__YJSc4c4k{@dNuuWJ9lBbMx@epNLwjdZ_u;nyzO z-@0gj>%y;H__YhacH!49{MvzMuU+`H z3%_>Z*Dn0pgZ*Dn0pg{r5Y&@M{--?ZU5J__YhacH!49{MvZ*Dn0pgZ*Dn0p zgAZJg-n$V!jOaax9zpb8M2{kR4AJ9=biZ`rmoEI$gG_(uH5T@Jknd=}ArIe(9xtQD#%M+e`hT^frxjzx3dj9{kdSUwZIM z4}R&vFFp9B2fy^-mmd7mgI{{^OAmhO!7n}dr3b(C;1~5<A^2O_@xKG z^x&5s{L+J8dhkmRe(Aw4J@};uzx3dj9{kdSUwZIM4}R&vFFp9B2fy^-mmd7mgI{{^ zOAmhO!7n}dr3b(C;Fli!(t}@m@JkPV>A^2O_@xKG^x&5s{L+J8dhkmRe(Aw4J+!~| z(Eip#`&$p~Z#}fX_0ay-L;G6~e(Aw4J@};uzx3dj9{kdSUwZIM4}R&vFFp9B2fy^- zmmd7mgI{{^OAmhO!7n}dr3b(C;Fli!(t}@m@JkPV>7o6tm$tu6|L3djrn+Bx@JkPV z>A^2O_@xKG^x&5s{L+J8dhkmRe(Aw4J@};uzx3dj9{kdSUwZIM4}R&vFFp9B2fy^- zmmd7mgI{{^OAmhO!7n}dr3b(C(Eip#`&$p~Z#}fX_0ay-L;G6~?QcD_zxB}m)Px{?A^2O_@xKG^x&5s{L+J8dhkmRe(Aw4 zJ@};uzx3c22YykX(T-?kDi$a8i)wLFesR!$+ksyk_{D)=9Qeh7UmW#erWO z_{D)=9Qeh7UmW#erXxUUI)U@QVY#IPi-Dzc}!V1HU-%ivzzn@QVY#IPi-D zzc}!V1HU-%ivzzn@QVY#IPi-Dzc}!V1HU-%ivzzn@QVY#IPi-Dzc}!V1HU-%ivzzn z@QVY#IPi-Dzc}!V1HU-%ivzzn@QVY#IPi-Dzc}!V1HU-%ivzzn@QVY#IPi-Dzc}!V z1HU-%ivzzn@QVY#IPi-Dzc}!V1HU-%ivzzn@QVY#IPi-Dzc}!V1HU-%ivzzn@QVY# zIPi-Dzc{I1RBQe8{;B)LfnOZ>#erWO_{D)=9Qeh7UmW#erWO_{D)=9Qeh7 zUmW#erWO_{D)=9Qeh7UmW#erWO_{D)=9Qeh7UmW#erWO z_{D)=9Qeh7UmW#erWO_{D)=9Qeh7UmW#erWO_{D)=9Qeh7UmW#erWO_{D`^+|)1fPkP0O>UtIXbgO>UtIXb zgO>UtIXbgO>UtIXbgO>UtIXbgO>UtIXbgO>UtIXbgO>UtIXbgI~PVFNN6^=cRrrW|98<$b(-zw7+<0fAQcK4}S6B7Y}~% z;1>^m@!%H^e(~TJ4}S6B7Y}~%;1>^m@!%H^e(~TJ4}S6B7Y}~%;1>^m@!%H^e(~TJ z4}S6B7Y}~%;1>^m@!%H^e(~TJ4}S6B7Y}~%;1>^m@!%H^e(~TJ4}S6B7Y}~%;1>^m z@!%H^e(~TJ4}S4dzo>qF%HC;=wN-{Nlkc9{l3L zFCP5j!7m>C;=wN-{Nlkc9{l3LFCP5j!7m>C;=wN-{Nlkc9{l3LFCP5j!7m>C;=wN- z{Nlkc9{l3LFCP5j!7pCwmr{2B)cxYYFCP5j!7m>C;=wN-{Nlkc9{l3LFCP5j!7m>C z;=wN-{Nlkc9{l3LFCP5j!7m>C;=wN-{Nlkc9{l3LFCP5j!7m>C;=wN-{Nlkc9{l3L zFCP5j!7m>C;=wN-{Nlkc9{l3LFCP5j!7m>C;=wN-{Nlkc9{l3LFCP5j!7m>C;=wN- z{Nlkc9{l3LFCP5j!7m>C(uZIAsb9*oE3TjVrIJOuU;6M%AAae>FMar>55M%`mp=T` zhhO^eOCNse!!LdKr4PUK;g>%A(uZIA@JkBBF5_@xiO^x>C2{L+VC`tVC1e(A$6 zefXshzx3gkKK#;$U;6M%AAae>FMar>55M%`mp=T`hhO^eOCNse!!LdKr4PUK;g>%A z(uZIA@JkBBF5_@xiO^wIv(hhO^eOCNse!!LdKr4PUK;g>%A(uZIA@JkBBF5 z_@xiO^x>C2{L+VC`tVC1e(A$6efXshzx3gkKK#;$U;6M%AAae>FMar>55M%`mp=T` zhhO^eOCNse!!LdKr4PUK;g>%A(og+T&F-JNU;6M%AAae>FMar>55M%`mp=T`hhO^e zOCNse!!LdKr4PUK;g>%A(uZIA@JkBBF5_@xiO^x>C2{L+VC`tVC1e(A$6efXsh zzx3gkKK#;$U;6M%AAae>FMar>55M%`mp=T`hhO^eOCNse!!LdKr4PUK;g>%A(uZIA z@JkBBF5_@xiO^x>C2{L+VC`tVC1e(A$6efVVnzYJ2p)Mi)QAoWW8Nx3^_+<#c4B?j{{4#`J zhVaV}ei_0qL-=I~zYO7*A^b9gUxx6@5PliLFGKic2)_*Bmm&NzgkOg6%MgAU!Y@Pk zWeC3v;g=!&GK61-@XHW>8Nx3^_+<#c4B?j{{4#`JhVaV}ei_0qL-=I~zYO7*A^b9g zUxx6@5PliLFGKic2)_*Bmm&NzgkOg6%MgAU!Y@PkWeC3v;g=!&GK61-@XHW>8Nx3^ z_+<#c4B?j{{4#`JhVaV}ei_0qL-=I~zYO7*A^b9gUxx6@5PliLFT>O?R(3bl{W64K zhVaV}ei_0qL-=I~zYO7*A^b9gUxx6@5PliLFGKic2)_*Bmm&NzgkOg6%MgAU!Y@Pk zWeC3v;g=!&GK61-@XHW>8Nx3^_+<#c4B?j{{4#`JhVaV}ei_0qL-=I~zYO7*A^b9g zUxx6@5PliLFGKic2)_*Bmm&NzgkOg6%MgAU!Y@PkWeC3v;g=!&GK61-@XHW>8Nx3k z_+^y(#hzVpqtq|OEYjOwM)1oBei^|pBlu+mzl`9Q5&SZOUq@ehJ{00DcMJmjHeV;Fkb?3E-CiehJ{00DcMJmjHeV;Fkb?3E-Ci zehJ{00DcMJmjHeV;Fkb?3E-CiehJ{00DcMJmjHeV;Fkb?3E-CiehJ{00DcMJmjHeV z;Fkb?3E-CiehJ{00DcMJmjHeV;Fkb?3E-CiehJ{00DcMJmjHeV;Fkb?3E-CiehJ{0 z0DcMJmjHel!!P61FYfG$8>fEpvPk#K7=9VUFJt&+48M%wmofY@hF`|;%NTwc!!Kj_ zWemTJ;g>P|GKOEq@XHu}8N)AQ_+<>gjNz9t{4$1L#_-D+ei_3rWB6qZzl`CRG5j)y zU&ipu7=9VUFJt&+48M%wmofY@hF`|;%NTwc!!Kj_WemTJ;g>P|GKOEq@XHu}8N)AQ z_+<>gjNz9t{4$1L#_-D+ei_3rWB6qZzl`CRG5j)yU&ipu7=9VUFJt&+48M%wmofY@ zhF`|;%NTwc!!Kj_WemTJ;g>P|GKOEq@XHu}8N)AQ_+<>gjNz9t{4$1L#_-D+ei_3r zWB6qZzl`CRG5j)4{nF3wpSoYh@XHu}8N)AQ_+<>gjNz9t{4$1L#_-D+ei_3rWB6qZ zzl`CRG5j)yU&ipu7=9VUFJt&+48M%wmofY@hF`|;%NTwc!!Kj_WemTJ;g>P|GKOEq z@XHu}8N)AQ_+<>gjNz9t{4$1L#_-D+ei_3rWB6qZzl`CRG5j)yU&ipu7=9VUFJt&+ z48M%wmofY@hF`|;%NTwc!!Kj_C4^tX)GveC6&I#{@v}(xO9;P&sb7X!Nqzjf5Pk{a zmk@pl;g=A83E`IzehJ~15Pk{amk@pl;g=A83E`IzehJ~15Pk{amk@pl;g=A83E`Iz zehJ~15Pk`biENuxd^$o&2)~5zO9;P&@Jk54gz!rUzl88h2)~5zO9;P&@Jk54gz!rU zzl88h2)~5zO9;P&@Jk54gz!rUzl88h2)~5zO9;P&@Jk54gz!rUzl88h2)~5zO9;P& z@Jk54gz!rUzl88h2)~5zO9;P&@Jk54gz!rUzl88h2)~5zO9;P&@Jk54gz!rUzl88h z2)~5zO9;P&@Jk54gz!rUzl88h2)~4>Uq;zoQTIy-zl88h2)~5zO9;P&@Jk54gz!rU zzl88h2)~5zO9;P&@Jk54gz!rUzl88h2)~5zO9;P&@Jk54gz!rUzl88h2)~5zO9;P& z@Jk54gz!rUzl88h2)~5zO9;P&@Jk54gz!rUzl88h2)~5zO9;P&@Jk54gz!rUzl88h z2)~5zO9;P&@Jk54gz!rUzl88h2)~4xU%o2$!2QCL8&Cw!zXa~1P-6b z5!AOVLKGuP5FLc*U_^%?Iuy}ih_)g+9MKVoj+99KD)RKKJ4zz;`^eMiXp}q#(JG=f zMC*t)5N$)W9nlU%n}~KI+9i?t4d>~09xIXhHRow`97?_n(eVCw!zXa~1P-6T;S)G~0*6oF z@Ch6~fx{Cw!zXa~1P-6T;S)G~0*6oF@Ch6~fx{Cw!zXa~1P-5M4p;ZqNba$@ zU!v46li3v)rGAOBNcT$wzeK5D=D&jx!7mZ~62UJK{1U-05&ROtFA@9_!7mZ~62UJK z{1U-05&ROtFG>Zu5+e8|f?p!|C4yff_$7j0BKReOUn2M=f?py-_e&(lQ{PVAFA>@i zBeWw%Xh)3Dju@dGF+w|Hgm%OT?T8WD5hJuCMrcQj(2f|P9Wg>XVuW_Y2seu?0h2!4s+mk54|;Fkz~iQtzAeu?0h z2!4s+mk54|;Fkz~iQtzAeu?0h2!4s+mk54|;Fkz~iQtzAeu?0h2!4s+mk54|;Fkz~ ziQtzAeu?0h2!4s+mk54|;Fkz~iQtzAeu?0h2!4s+mk54|;Fkz~iQtzAeu?0h2!4s+ zmk54|;Fkz~iQtzAeu?0h2!4s+7uBwp`z22OlFY8SIQ7dxS)}_VhF@Z|zr^rM48O$i zOANon@JkH8#PCZDzr^rM48O$iOANon@JkH8#PEx9K<1#|J41Gz%L2>lE5zs{F1;g3H*}4FA4mTz%L2> zlE5zs{F1;g3H*}4FA4mTz%L2>lE5zs{F1;g3H*}4FA4mTz%L2>lE5zs{F1;g3H*}4 zFA4mTz%L2>lE5zs{F1;g3H*}4FA4mTz%L2>lE5zs{F1;g3H*}4FA4mTz%L2>lE5zs z{F1;g3H*}4FA4mTz%L2>lE5zs{BjWda!~4*t+OlcpwutFBPG<6rh_mJ<3aGt|0L}$ zqa5k`Gck|t#LN)bkU@+sW~ob6VwT#>UN3ve%=T+$W?nGF3~{pPwH3csZAOA5cF@JkB6r0`1$zohU>3csZA zOA5cF@JkB6r0`1$za;01-20aleo5h%6n;tJmlS?U;g=MCN#U0ieo5h%6n;tJmlS?U z;g=MCN#U0ieo5h%6n;tJmlS?U;g=MCN#U0ieo5h%6n;tJmlS?U;g=MCN#U0ieo5h% z6n;tJmlS?U;g=MCN#U0ieo5h%6n;tJmlS?U;g=MCN#U0ieo5h%6n;tJmlS?U;g=MC zN#U0ieo5h%6n;tJmlS?U;g=MCN#U0ieo5h%6n;tJmlS?U;g=MCN#U0ieo5h%6n;tJ zm(Ow_$7^B()cBfU()y`jbGCEC5>Ow z_$7^B()cBfU()y`jbGCEB{{qG?w2%vN#mC^eo5n(G=53rmo$D!5g^e#zjM41USrmkfT%;Fk=3 z$>5g^e#zjM41USrmkfT%;Fk=3$>5g^e#zjM41USrmkfT%;Fk=3$>5g^e#zjM41USr zmkfT%;Fk=3$>5g^e#zjM41USrmkfT%;Fk=3$>5g^e#zjM41USrmkfT%;Fk=3$>5g^ ze#zjM41USrmkfT%;Fk=3$>5g^e#zjM41USrmkfT%;Fk=3$>5g^e#zjM41USrmkfT% z;Fk=3$>5jF)i2fC`uXUW41USrmkfT%;Fk=3$>5g^e#zjM41USrmkfT%;Fk=3$>5g^ ze#zjM41USrmkfT%;Fk=3$>5g^e#zjM41USrmkfT%;Fk=3$>5g^e#zjM41USrmkfT% z;Fk=3$>5g^e#zjM41USrmkfT%;Fk=3$>5g^e#zjM41USrmkfT%;Fk=3$>5g^e#zjM z41USrmkfT%;Fsi@`MY1TSHC>HIpVTcztnE&(Jxv2lEp7s{F22lS^Sd4FIoJO#V=X> zlEp7s{F22lS^Sd4FIoJO#V=X>l3YQ2_e&PPWbsQDzhv=C7QbZiOBTOm@kEnA ze#zmN9Dd2+mmGe{;g=kK$>EnAeo5|ma`#IPzvS>s4!`8^OAf!}@JkNAs z4!`8^OAf!}@JkNAs4!`8^OAf!}@JkNAs4!`8^OAf!}@JkNA zs4!`8CetFmZUvl^*hhK8|C5K;f_$7y5a`+{OUvl^*hhK8|C5K;f_$7y5 za`+{OUvl^*hhK8|C5K;f_$7y5a`+{OUvl^*hhK8|C5K;f_$7y5a`+{OUvl^*hhK8| zC5K;f_$7y5a`+{OUvgK!v~KI?qhE6PC5K;f_$7y5a`+{OUvl^*hhK8|C5K;f_$7y5 za`+{OUvl^*hhK8|C5K;f_$7y5a`+{OUvl^*hhK8|C5K;f_$7y5a`+{OUvl^*hhK8| zC5K;f_$7y5a`+{OUvl^*hhK8|C5K;f_$7y5a`+{OUvl^*hhK8|C5K;f_$7y5a`+{O zUvl^*hhK8|C5K;f_$7y5l6w)}{gS`>rTylJ%U}KS0k`z%mpp#Ss$>Wzie#zsP zJbuaJmpp#Ss$>Wzie#zsPJbuaJmppz+?$UPmOCG=E@k<`R3)A zOCG=E@k<`R3)AOCG=E@k<`R3)AOCG=E@k<`R3)AOCG=E@k<`R3)AOCG=E@k<`R3)AOCG=E z@k<`R3)AOCG=E@k<`R3)AOCG=E@k<`R3)AOCG=E@k<`RX*)K{e1LG9>3)AOCG=E@k<`R3)AOCG=E z@k<`R3)AOCG=E@k<`R3)AOCG=E@k<`R3)AOCG=E@k<`R3)AOCG=E@k<`R3)AOCG=E@k<`R z3)AOCG=E@k?^wC z;+GC;+GofzZCIH5x*4iOA)^m@kUn=;ef?q25rGj57_@#nhD)^;>Uy|n|-~Cd-FBSY!!7mm3 zQo%13{8GU$75q}cFBSY!!7mm3Qo%13{8GU$75q}cFBSY!!7mm3Qo%13{8GU$75q}c zFBSY!!7mm3Qo%13{8GU$75q}cFBSY!!7mm3Qo%13{8GU$75q}cFBSY!!7mm3Qo%13 z{8GU$75q}cFBSY!!7mm3Qo%13{8GU$75q}cFBSY!!7mm3Qo%13{8GU$75q}cFBSY! z!7mm3Qo%13{8GU$75q}cFBSY!!7mm3Qn~tNc3VFm{Zhd%75q}cFBSY!!7mm3Qo%13 z{8GU$75q}cFBSY!!7mm3Qo%13{8GU$75q}cFBSY!!7mm3Qo%13{8GU$75q}cFBSY! z!7mm3Qo%13{8GU$75q}cFBSY!!7mm3Qo%13{8GU$75q}cFBSY!!7mm3Qo%13{8GU$ z75q}cFBSY!!7mm3Qo%13{8GU$75q}cFBSY!#V^&XU*>O)xa!p}i(7j1OBKIV@kGw-tTBu{Hfo*$Du^&q(qdvf>S za>6 zHt}rZ*~PPu=Mc{^o>M&McrNk0 z#PhN7d|W&qAI~Sm^NI0%Qaqm=&!@!msquVTJf9xVXTYK{e>9#y7SHFz^T*@)6Y>1Xc>Yv8e>$Gejpy^?`TTgkAf7Lb=ZoU`;&{F! zo-d8(%i{U+c)lW@uZ-ub;(13r$__c~(tN68w zU#s}FieIbvwTfS>__c~(tN68wU#s}FieIbvwTfS>__c~(tN68wU#s}F`sy7IJw+A2 zR`F{UzgF>U6~9*TYZbp%@oN>oR`F{UzgF>U6~9*TYZbp%@oN>oR`F{UzgF>U6~9*T zYZbp%@oN>oR`F{UzgF>U6~9*T>l1!`di8Gc*DqN=l4I=Y>es&>zv6Xz^y?FTeZsF# z`1J|DKH=9V{Q87npYZDwetp8PPx$o-zdqsDC;a+^U!U;n6MlWduTS{(3BNw!*C+h? zgkPWV>l1!`!mm&G^$EW|z52+9Bkt+dN0E}}rpI5*H($SxAtlfBy6;P#ka17R{ig3J zxqIV1CHF$Qr{vB8_mo_xcTdS#@As6PL-zBx&n0l1!`dKK`ePvi8{w|}LOeGzF! znv)i!C22)klQyJnoPOo@x$NTftGBd|)34pqAx^)3OUF3<+%28rbpL9eNf*)!>0?PB zNBa0U-M_OwAx^(>`}01LSAG)dlS!XK`c%@V#pyS1AM?}M_Zg(mBz;z#5{bQDKW~1$ zuC1TVEB^rL50d^6=?};0FWf$tKf=C08mIgB%O7Lk=aBw*oc`kNqx^|D{iR#_lX3dX zxAdpt^jB`_Psi#0_50j7{ngvP&tu=`$LY6j`@VpEUr72Q(ifAyg!HAPFC%?9=_^QI z8K=K?`&__@#zlYWSswUuyJkHTt(2 z{acOxtw#S=qkpT>zt!m9YV>b4`nMYWTaEs$M*mi$f2+~I)#%@9^lvr#w;KIhjsC4h z|5l@atI@yJ=-+DeZ#DY28vR?1{;fv;R-=Eb(ZAJRJ^H0~?cb92==J*f=$9J(OO5`e zM*mWyf2q;G)aYMo^e;8~mm2*`jsB%Z|5BrWsnNgG=wE8|FE#p?8vRR+{-s9$Qlo#V z(ZAH_UuyI(HTstt{Y#DhrAGf!qkpNKdj@II)16+mpXo_ z_@#kg8u+DwUmEzOfnOT_@#kg8u%r7XX5Uc27YPamj-@m;Fkt|Y2cRzere#B z27YPamj-@m;Fkt|Y2cRzere#B27YPamj-@m;Fkt|Y2cRzere#B27YPamj-@m;Fkt| zY2cRzere#B27YPamj-@m(7!bBO9Q_&@Jj=~H1JCUzclbm1HUxzO9Q_&@Jj=~H1JCU zzclbm1HUxzO9Q_&@Jj=~H1JCUzclbm1HUxzO9Q_&@Jj=~H1JCUzclbm1HUxzO9Q_& z@Jj=~H1JCUzclbm1HUw`eo4;KdA)u<`lW$i8u+DwUmEzOfnOT_@#kg8u+Dw zUmEzOfnOT_@#kg8u+DwUmEzOfnOT_@#kg8u+DwUmEzOfnOT z_@#kg8u+DwUmEzOfnOT_@#kg8u+DwUmEzOfnOT_@#kg8u+DwUmEzO zfnOT_@#kg8u+DwUmEzOiC>ymza;0xB}ZKI>X+o~xYy~?FHQW?#4kX+oq;@9ivqhFf%rHNmf_@#+on)s!OUz+%(iC>!d zrHNmf_@#+on)s!OUz+%(iC>!drHNmf_@#+on)s!OUz+%(iC>!drHNmf_@#+on)s!O zUz+%(iC>!drHNmf_@#+on)s!OUz+%(iC>!drHNmf_@#+on)s!OUz+%(iC>!drHNmf z_@#+on)s!OUz+%(iC>!drHNmf_@#+oTKJ`P^-FRde{#gNu6{|*=zpCa{nElOE&S5L zFD?Ai!Y?iS(!wt-{L;cNE&S5LFD?Ai!Y?iS(!wt-{L;cNE&S5LFD?Ai!Y?iS(!wt- z{L;cNE&S5LFD?Ai!Y?iS(!wt-{L;cNE&S5LFD?Ai!Y?iS(!wt-{L;cNE&S5LFD?Ai z!Y?iS(!wt-{L;cNE&S5LFD?Ai!Y?iS(!wt-{L;cNE&S5LFD?Ai!Y?iS(!wt-{L;cN zE&S5LFD?Ai!Y?iS(!wt-{L;cNE&S5LFD?Ai!Y?iS(!wt-{L;cNE&S5LFD?Ai!Y?iS z(!wt-{L;cNE&S5LFD?Ai!Y?iS(z^O3xf<&A`uXUW7Jg~rmll3$;g=SEY2lX^ere&C z7Jg~rmll3$;g=SEY2lX^ere&C7Jg~rmll3$;g=SEY2lX^ere&C7Jg~rmll3$;g=SE zY2lX^ere&C7Jg~rmll3$;g=SEY2lX^ere&C7Jg~rmll3$;g=SEY2lX^ere&C7Jg~r zmll3$;g=SEY2lX^ere&C7Jg~rmll3$;g>dkXEM?Re(B(s4u0w2mkxgE;Fk`5>EM?Re(B(s4u0w2mkxgE;Fk`5>EM^-3fsG1I{2l7 zUpn}ugI_xMrGsBO_@#qiI{2l7Upn}ugI_xMrGsBO_@#qiI{2l7Upn}ugI_xMrGsBO z_@#qiI{2l7Upn}ugI_xMrGsBO_@#qiI{2l7Upn}ugI_xMrGsBO_@#qiI{2l7Upn}u zgI_xMrGsBO_@#qiI{2l7Upn}ugI_xMrGsBO_@#qiI{2l7Upn}ugI_xMrGsBO_@#qi zI{2l7Upn}ugI_xMrGsBO_@#qiI{2l7Upn}ugI_vVza)2^dA)u<`lW+kI{2l7Upn}u zgI_xMrGsBO_@#qiI{2l7Upn}ugI_xMrGsBO_@#qiI{2l7Upn}ugI_xMrGsBO_@#qi zI{2l7Upn}ugI_xMrGsBO_@#qiI{2l7Upn}ugI_xMrGsBO_@#qiI{2l7Upn}ugI_xM zrGsBO_@#qiI{2l7Upn}ugI_xMrGsBO_@#qiI{2l7Upn}ui(k4|zkJ4_@#?qy7;AwU%L3Ei(k6_@#?qy7;AwU%L3Ei(k6$ZMA`lX9sy7;AwU%L3E zi(k6_@#?qy7;AwU%L3Ei(k6_@#?qy7;AwU%L3Ei(k6_@#?q zy7;AwU%L3Ei(k6_@#?qy7;AwU%L3Ei(k6_@#?qy7;AwU%L3Ei(k6< zrHfy>_@#?qy7;AwU%L3Ei(k6_@#?qy7;AwU%L3EhhKVEzx@6;M_ljfm(RYX zN5Ay&OAo*F@JkQB^zcg$zx41+55M&AOAo*F@JkQB^zcg$zx41+55M&AOL7;pyI*?v zrH5a7_@#$mdibS>UwZhZhhKX5rH5a7_@#$mdibS>UwZhZhhKX5rH5a7_@#$mdibS> zUwZhZhhKX5rH5a7_@#$mdibS>UwZhZhhKX5rH5a7_@#$mdibS>UwZhZhhKX5rH5a7 z_@#$mdibS>UwZhZhhKX5rH5a7_@#$mdibS>UwZhZhhKX5rH5a7_@#$mdibS>UwZhZ zhhKX5rH5a7_@#$mdibS>UwZhZhhKX5rH5a7_@#$mdRM!Eo9^e(B?vK7Q%rmp*>!Eo9^e(B?vK7Q%rmp*>! zEo9^e(B?vK7Q%rmp*>!Eo9^e(B?vK7Q%rmp*>!Eo9^e(B?v zK7Q%rmp*>!Eo9^e(B?vK7Q%rmp*>!Eo9^e(7KR@~->u_VG&}zx44- zAHVeROCP`V@k<}S^zlm{zx44-AHVeROCP`V@k<}S^zlm{zx44-AHVeROCP`V@k<}S z^zlm{zx44-AHVeROCP`V@k<}S^zlm{zx44-AHVeROCP`V@k<}S^sjzNo=EU|{e1LG zAHVeROCP`V@k<}S^zlm{zx44-AHVeROCP`V@k<}S^zlm{zx44-AHVeROCP`V@k<}S z^zlm{zx44-AHVeROCP`V@k<}S^zlm{zx44-AHVeROCP`V@k<}S^zlm{zx44-AHVeR zOCP`V@k<}S^zlm{zx44-AHVeROCP`V@k<}S^zlm{zx44-AHVeROCP`V@yh_e46c4j zp8t^?af7R0k|%+@PLF;W;Fke@8Q_-zei`7G0e%_amjQkm;Fke@8Q_-zei`7G0e%_a zmjQkm;Fke@8Q_-zei`7G0e%_amjQkm;Fke@8Q_-zei`7G0e%_amjQkm;Fke@8Q_-z zei`7G0e%_amjQkm;Fke@8Q_-zei`7G0e%_amjQkm;Fke@8Q_-zei`7G0sYGWzYOrp z0KW|I%K*O&@XG+d4DibUzYOrp0KW|I%K*O&@XG+d4DibUzYOrp0KW|I%K*O&@XG+d z4DibUzYOrp0KW|I%K*O&@XG+d4DibUzYOrp0KW|I%K*O&@XG+d4Did~>X+mxO0UX+o1WyujYy!s`1dfDsr=$9dW8RC~Aei`DIA$}R+mmz)`;+G+Q8RC~Aei`DIA$}R+ zmmz)`;+G+Q8RC~Aei`DIA$}R+mmz)`;+G+Q8RC~Aei`DIA$}R+mmz)`;+G+Q8RC~A zei`DIA$}R+mmz)`;+G+Q8RC~Aei`DIA$}R+mmz)`;+G+Q8RC~Aei`DIA$}RszYOuq z5WfuZ%MiZ|@yigu4DrhlzYOuq5WfuZ%MiZ|@yigu4DrhlzYOuq5WfuZ%MiZ|@yigu z4DrhlzYOuq5WfuZ%MiZ|@yigu4DrhlzYOuq5WfuZ%MiZ|@yigu4DrhlzYMQ_NuK=p zdi{L#%MiZ|@yigu4DrhlzYOuq5WfuZ%MiZ|@yigu4DrhlzYOuq5WfuZ%MiZ|@yigu z4DrhlzYOuq5WfuZ%MiZ|@yigu4DrhlzYOuq5WfuZ%MiZ|@yigu4DrhlzYOuq5WfuZ z%MiZ|@yigu4DrhlzYOuq5WfuZ%MiZ|@yigu4DrhlzYOuq5WfuZ%MiZ|@yigu4Drhd zzl^SaNuINs9C4$oU;cLdir4AUFC+Xi!Y?EIGQuw-{4&BXBm6SLFC+Xi!Y?EIGQuw- z{4&BXBm6SLFC+Xi!Y?EIGQuw-{4&BXBm6SLFC+Xi!Y?EIGQuw-{4&BXBm6SLFC+Xi z!Y?EIGQuw-{4&BXBm6SLFC+Xi!Y?EIGQuw-{4&BXBm6SLFC+Xi!Y?EIGQuw-{4&BX zBm6SLFC+Xi!Y?EIGQuw-{4&BXBm6SLFC+Xi!Y?EIGQuw-{4&BXBm6SLFC+Xi!Y?EI zGQuw-{4&BXBm6SLFC+Xi!Y?EIGQuw-{4&BXBm6SLFC+Xi!Y?EIGQuw-{4&BXqpM$% zCsw~+KOg-v!Y?EIGQuw-{4&BXBm6SLFC+Xi!Y?EIGQuw-{4&BXBm6SLFC+Xi!Y?EI zGQuw-{4&BXBm6SLFC+Xi!Y?EIGQuw-{4&BXBm6SLFC+Xi!Y?EIGQuw-{4&BXBm6SL zFC+Xi!Y?EIGQuw-{4&BXBm6SLFC+Xi!Y?EIGQuw-{4&BXBm6SLFC+Xi!Y?EIGQuw- z{4&Nb1WrANO_+^4$CirE7Unclvf?p>1WrANO_+^4$CirE7Unclvf?p>1 zWrANO_+^4$CirE7Unclvf?p>1WrANO_+^4$CirE7Unclvf?p>1WrANO_+@hS%NN|% z&qu#Z@XG|hOz_JDzfADU1iwu1%LKnn@XG|hOz_JDzfADU1iwu1%LKnn@XG|hOz_JD zzfADU1iwu1%LKnn@XG|hOz_JDzfADU1iwu1%LKnn@XG|hOz_JDzfADU1iwu1%LKnn z@XG|hOz_JDzfADU1iwu1%LKnn@XG|hOz_JDzfADU1iwu1%LKnn@XG|hOz_L(=9j+_ zuYq6v``+!<=e+xGzxV&2|K9uEKR8~6U%mRNSMQAf|LWEAyM55BWLxl-ZPT}G3*WLW zdds%iTei*LvTgB}ZOgZ8TfJr5`YqcwZ`rne%eLKHw(Z}t?eLau$G2=dy=B|^E!!?{ z+4l05Z6EuVZ6EiRZ6E)ZZJ+R#ZJ+p-ZJ+d(ZJ+#>ZJ+X%ZJ+vhLeRrALQ9Kaf{`5b1+SA42+2(ua{gob-4ffM*>3jKiOC z_%jZF#^KL6{27No=SPt~n)ETG6e&&0kg}v4DNibpilkDUe*X5g zEyw8>ZmGg6tE4AVjg&m!{{EenJT3N~l4q~oQ;U?`7yQ02xy$A~CHJhlr{oS0zj*sR zlj|ve>6VhK6Yj4}&h@*eW-|Ft^nG}$wak?KzA^RfIj5H@LNK4X+ zv?gsx+c^Eo?QgV;)34srK2E=OONTi9`Yj#f^mDg#iqrk?ekNT=FQktpeH`iI<8=Sd z`h+CrDCehKkQh+jhd z65^K-zl8WD#4jO!3GqvaUqbv6;+GJ=g!m=IFCl&j@k@wbLi`fqmk_^%_$9*u3iLi`fqmk_^%_$9MOVLk%`H9pCBiQe=f6bwCBiQeeu?l)gkK{365*E!zeM;Y!Y>hi ziSSE=Un2Yx;g{rGgM0rH;g<-%MEE7bFA;u;@JobWBK#8Jmk7T^_$9(G5q^pAON3t{ z{1V}p2){)5CBiQeeu?l)gkK{365*E!zeM;Y!Y>hiiSSE=Un2Yx;g<-%MEE75e~Iu* zgkK{365*E!zeM;Y!Y>hiiSSE=Un2Yx;g<-%MEE7bFA;u;@JobWBK#8Jmk7T^_$9(G z5q^pAON3t{{1V}p2){)5CBiQeeu?l)gkK{365*E!zeM;Y!Y>hiiLQS6+S~g1=$8n; zMEE7bFA;u;@JobWBK#8Jmk7T^_$9(G5q^pAON3t{{1V}p2){)5CBiQeeu?l)gkK{3 z65*E!zeM;Y!Y>hiiSSE=Un2Yx;g<-%MEE7bFA;u;@JobWBK#8Jmk7T^_$9(G5q^pA zON3t{{1V}p2){)5CBiQeeu?l)gkK{365*E!zeM;Y!Y>hiNzU!Q_b;=nU%u|m5jVT~ zUuO7ahF@m*Wrkm7_+^G)X82`>UuO7ahF@m*Wrkm7_+^G) zX82`>UuO7ahF@m*Wrkm7_+^G)X82`>UuO7ahF@m*Wrkm7_+>`_GQ%%3{4&EYGyF2c zFEjiy!!I-ZGQ%%3{4&EYGyF2cFEjiy!!I-ZGQ%%3{4&EYGyF2cFEjiy!!I-ZGQ%%3 z{4&EYGyF2cFEjiy!!I-ZGQ%%3{4&EYGyF2cFEjiy!!I-ZGQ0Za8*c08qhDtDWrkm7 z_+^G)X82`>UuO7ahF@m*Wrkm7_+^G)X82`>UuO7ahF@m*Wrkm7_+^G)X82`>UuO7a zhF@m*Wrkm7_+^G)X82`>UuO7ahF@m*Wrkm7_+^G)X82`>UuO7ahF@m*Wrkm7_+^G) zX82`>UuO7ahF@m*Wrkm7_+^G)X82`>UuO7ahF@m*Wrkm7_+^G)lIzg!ewknW@{Mnf zxcSvD-*iilewpK!IsMBVzs&K=9KX!*%N)PV@yi^)%<;<{zs&K=9KX!*%N)PV@yi^) zB-eA?{W8ZdbNn*LFLV4d$1ijIGRH4-{4&QcbNn*LFLV4d$1ijIGRH4-{4&QcbNn*L zFLV4d$1ijIGRH4-{4&QcbNn*LFLV4d$1ijIGRH4-{4&QcbNn*LFLU~rIewYrmpOi! z}0>3Qq%L2bF@XG?fEbz+$zbx>}0>3Qq z%L2b7SD@bgvcNA3{Ib9=3;eRcFAMy#z%L8@vcNA3{Ib9=3;eRcFAMy#z%L8@vcNA3 z{Ib9=3;eRcFAMy#z%L8@vcNA3{Ib9=3;eRcFAMy#z%L8@vcNA3{Ib9=3;eRcFAMy# zz%L8@vcNA3{Ib9=3;eRcFAMy#z%L8@vcNA3{Ib9=3;eRcFAMy#z%L8@vcNA3{Ib9= z3;eRcFAMy#z%L8@vcNA3{Ib9=3;eRcFAMy#z%L8@vcNA3{Ib9=3;eRU`sLeh>*u3i z7Wid>Ul#affnOH*Wr1H7_+^1#7Wid>Ul#affnOH*Wr1H7_+^1#7Wid>Ul#affnOH* zWr1H7_+^1#7Wid>Ul#affnOH*Wr1H7_+^1#7Wid>Ul#affnOH*Wr1H7_+^1#7Wid> zUl#affnOH*Wr1H7_+^1#7Wid>Ul#affnOH*Wr1H7_+^1#7Wid>Ul#affnSpQ``rDq zy!z$a-yCtvt6!p9di2W@zbtwGXo+8z_+^P-miT3fUzYe~iC>oZWr<&w_+^P-miT3f zUzYe~iC>a?X59U<#4k(yvcxY-{IbL^OZ>9LFH8Kg#4k(yvcxY-{IbL^OZ>9LFH8Kg z#4k(yvcxY-{IbL^OZ>9LFH8Kg#4k(yvcxY-{IbL^OZ>9LFH8Kg#4k(yvcxY-{IbL^ zOZ>9LFH8Kg#4k(yvcxY-{IbL^OZ>9LFH8Kg#4k(yvcxY-{IbL^OZ>9LFH8Kg#4k(y zvcxY-{IbL^OZ>9LFH8Kg#4k(yvcxY-{IbL^OZ>9LFH8Kg#4k(yvcxY-{Ib0IoZWr<&w_+^P-miT3fUzYe~iC>oZWr<&w_+^P-miT3f zUzYe~iC>oZWr<&w_+^P-miT3fUzYe~iC>oZWr<&w_+^P-miT3fUzYe~iC>oZWr<&w z_+^P-miT3fUzYe~iC>oZWr<&w_+^P-miT3fUzYe~iC>oZWr<&w_+^P-miT3fUy^$f z-u<$=`sF*{9C53wU%u;>9{sYyFDv}A!Y?cQvcfMb{IbF?EBvy;FDv}A!Y?cQvcfMb z{IbF?EBvy;FUeiL?tWR}mlb|l;g=PDS>cxzep%s{6@FRamlb|l;g=PDS>cxzep%s{ z6@FRamlb|l;g=PDS>cxzep%s{6@FRamlb|l;g=PDS>cxzep%s{6@FRamlb|l;g=QX zzpU`f3csxI%L>1&@XHFntnkYUzpU`f3csxI%L>1&@XHFntnkYUzpU`f3csxI%L>1& z@XHFntnkYUzpU`f3csxI%L>1&@XHFntnkYUzpU`f3csxI%L>1&@XHFntnkYUzpSo) z`R?2L`RJDwep%s{6@FRamlb|l;g=PDS>cxzep%s{6@FRamlb|l;g=PDS>cxzep%s{ z6@FRamlb|l;g=PDS>cxzep%s{6@FRamlb|l;g=PDS>cxzep%s{6@FRamlb|l;g=PD zS>cxzep%s{6@FRamlb|l;g=PDS>cxzep%s{6@FRamlb|l;g=PDS>cxzep%s{6@FRa zm*l?5cfYK!e)*m^N8I}Am&q+X`elt@*7#+OU)K0#jbGOIWsP6f_+^b>*7#+OU)K0# zjbGOIWsP6f_+^b>lKYb0{j$a{Yy7gtFKhg=#xHC9vc@lK{IbR`Yy7gtFKhg=#xHC9 zvc@lK{IbR`Yy7gtFKhg=#xHC9vc@lK{IbR`Yy7gtFKhg=#xHC9vc@lK{IbR`Yy7gt zFKhg=#xHC9vc@lK{IbR`Yy7gtFKhg=#xHC9vc@lK{IbR`Yy7gtFKhg=#xHC9vc@lK z{IbR`Yy7gtFKhg=#xHC9vc@lK{IbR`Yy7gtFKhg=#xHC9vc@lK{IbR`Yy7gtFKhg= zzWU{RZ|moyU)K0#jbGOIWsP6f_+^b>*7#+OU)K0#jbGOIWsP6f_+^b>*7#+OU)K0# zjbGOIWsP6f_+^b>*7#+OU)K0#jbGOIWsP6f_+^b>*7#+OU)K0#jbGOIWsP6f_+^b> z*7#+OU)K0#jbGOIWsP6f_+^b>*7#+OU)K0#jbGOIWsP6f_+^b>*7#+OU)K0#jbGOI zWsP5wXFS~fvbp-@``#RJo2y^G|CS#8vcWGK{IbC>8~n1tFB|-_!7m&9vcWGK{IbC> z8~n1tFB|-_!7m&9vcWIOoz(As+2EHAe%auc4Sw0+mkoZ|;Fk@4+2EHAe%auc4Sw0+ zmkoZ|;Fk@4+2EHAe%auc4Sw0+mkoZ|;Fk@4+2EHAe%auc4Sw0+mkoZ|;Fk@4+2EHA ze%auc4euXq@XH3jZ1BqlzijZ!2ET0Z%Lcz}@XH3jZ1BqlzijZ!2ET0Z%Lcz}@XH3j zZ1BqlzijZ!2ET0Z%Lcz}@XH3jZ1BqlzijZ!2ET0Z%Lcz}@XH3jZ1BqlzijZ!2ET0Z z%Lcz}u73G}+xq$FmkoZ|;Fk@4+2EHAe%auc4Sw0+mkoZ|;Fk@4+2EHAe%auc4Sw0+ zmkoZ|;Fk@4+2EHAe%auc4Sw0+mkoZ|;Fk@4+2EHAe%auc4Sw0+mkoZ|;Fk@4+2EHA ze%auc4Sw0+mkoZ|;Fk@4+2EHAe%auc4Sw0+mkoZ|;Fk@4+2EHAe%auc4Sw0+mkoZ| z;Fk@4+2EJtc~p15Y_ER#!8b?T_Ue}(x}`_IZ1Kw$zijc#7Qbxq%NDU$*#Vi(j_*Ws6_7_+^VU$*#V zi(j_*Ws6_7_+^VU$*#Vi(j_*Ws6_7_+^VU$*#Vi(j_*Ws6_7_+@+b z%intEJKy;=@ptpr#`AUYBzFc#u5L}Pw@a?FORf}2&RtK=SWnKnOwI#K&R$5~PfgxM zP2LGey2<1>>cseo?315P$?=jLB|jX`kHqt%@%&gkKOWCd#PgH!{8T)DCZ0bV&!3Cu z&&TuA@%&6YKO4`_#q$rx^YiiiLOj11&o9OE%klh5Jii*xuf_B0@%%j;dVK!X z7Qb%s>lVLm@#_}9Zt?3Dzi#pC7Qb%s>lVLm@#_}9Zt?3Dzi#pC7Qb%s>lVLm@#_}9 zZt?3Dzi#pC7Qb%s>lVLm@#_}9Zt?3DziwYWKL2Wa^=q;!y#B6x^y?PCZt?3Dzi#pC z7Qb%s>lVLm@#_}9Zt?3Dzi#pC7Qb%s>lVLm@#_}9Zt?3Dzi#pC7Qb%s>lVLm@#_}9 zZt?3Dzi#pC7Qb#^y@Q|gUqkv@($~f5w{I)T*R$^%;`BSWec#BwZ;I3J-u8Vn`@V(r zt)y=weLLwpNZ(2NF4A|Cz9&w>F1y2GzK z{JMMfk$h$!Mfzyc$B-VM-?_uDJN&xCuRHv@!>>F1y2GzK{JO)hJN&xCuRHv@!>>F1 zy2GzK{JNum+u@fTe%axd9e&y2mmPlD;g=nL+2NNRe%axd9e&y2mmPlD;g=nL+2NNR ze%axd9e&y2mmPlD;g=nL+2NNRe%axd9e&y2mmPlD;g=nL+2NNRe%axd9e&y2mmPlD z;g=nL+2NNRe%axd9e&we{gV79^LqV!^ve#v?C{GDzwGeK4!`X1%MQQn@XHRr?C{GD zzwGeK4!`X1%MQQn@XHRr?C{GDzwGeK4!`X1%MQQn@XHRr?C{GDzwGeK4!`X1%Z~nS zNB_2?f7{W&?dacj^lv-*w;lc4j{a>&|F)xl+tI)6=-+nqZ#(+89sS#m{%uG9wxfUB z(ZB8J-*)tGJNmaB{o9WIZAbsMqkr4czwPMXcJyz_bKdWM*47I%O1b%@yi~+?D5MUzwGhL9>47IOY(f>yI=PB zWshI>_+^h@_V{IwU-tNAk6-rqWshI>_+?N3wx@sF)4%QM-}d-rk6-rqWshI>_+^h@ z_V{IwU-tNAk6-rqWshI>_+^h@_V{IwU-tNAk6-rqWshI>_+^h@_V{IwU-tNAk6-rq zWshI>_+^h@_V{IwU-tNAk6-rqWshI>_+^h@_V{IwU-tNAk6-rqWshI>_+^h@_V{Iw zU-tNAk6-rqWshI>_+^h@_V{IwU-tNAk6-rqWshI>_+@|fOVYl+UOylGvd1rb{IbU{ zd;GG;FMIs5$1i*Qvd1rb{IbU{d;GG;FMIs5$1i*Qvd1rb{IbU{d;GG;FMIs5$1i*Q zvd1rb{IbU{d;GG;FMIs5$1i*Qvd1rb{IbU{d;GG;FMIs5$1i*Qvd1rb{IbU{d;GG; zFMIs5$1i*Qvd1rb{IbU{d;GG;FMIs5$1i*Qvd1rb{IbU{d;D_1FNdpNe(KE;cewf` zdDkO3{tmAm{c^xB2mErtF9-Z`z%K{X$$F=7>99 z{c^sgN535L%MrgE@yijv9P!H$zZ~()5x*Sq%MrgE@yijv9P!H$zZ~()5x*Sq%MrgE z@yijv9P!H$zZ~()5x*Sq%MrgE@yijv9P!H$zZ~()5x*Sq%MrgE@yijv9P!H$zZ~() z5x*Sq%MrgE@yijv9P!H$zZ~()5x*Sq%MrgE@yijv9P!H$zZ~()5x*Sq%MrgE@yijv z9P!H$zZ~()5x*Sq%MrgE@yijv9P!H$zZ~()5x*Sq%MrgE@yijv9P!H$zZ~()5x*Sq z%MrgE@yijv9P!H$zZ~()5x*Sq%MrgE@yijv9P!H$zZ|cA`SZ8+^U*Iy{Bp!ENBnZc zFGu`x#4ktua>Or3{Bp!ENBnZcFGu`x#4ktua>Or3{Bp!ENBnZcFGu`x#4ktua>Or3 z{Bp!ENBnZcFGu`x#4ktua>Or3{Bp!ENBnZcFGu`x#4ktua>Or3{Bp!ENBnZcFGu`x z#4ktua>Or3{Bp!ENBnZcFGu`x#4ktua>Or3{Bp!ENBnZcFDLwRy80zKuQX{~PFKGq zXSTjhkA6AfmlJ+D;g=JBIpLQRemUWn6Mi}2mlJ+D;g=JBIpLQRemUWn6Mi}2mlJ+D z;g=JBIpLQRemUWn6Mi}2mlJ+D;g=JBIpLQRemUWn6Mi}2mlJ+D;g=JBIpLQRemUWn z6Mi}2mlJ+D;g=JBIpLQRemUWn6Mi}2mlJ+D;g=JBIpLQRemUWn6Mi}2mlJ+D;g=JB zIpLQRemUWn6Mi}2mlJ+D;g=JBIpLQRemUWn6Mi}2mlJ+D;g=JBIpLQRemUWn6Mi}2 zmlJ+D;g=JBIpLQRemUWn6Mi}2mlJ+D;g=JBIpLQRemPzJlANLcdi{L#%L%`n@XHCm zobbyDznt*P3BR21%L%`n@XHCmobbyDznt*P3BR21%L%`n@XHCmobbyDznt*P3BR21 z%L%`n@XHCmobbyDznt*P3BR21%L%`n@XHCmobbyDznt*P3BR21%L%`n@XHCmobbyD zznt*P3BR21%L%`n@XHCmobbyDznt*P3BR21%L%`n@XHCmobbyTznrgrNv?-Uj=1yH zFUgfLuhXMn&iLhwU(WdDj9_~ndW&iLhwU(WdDj9_~ndW&iLhw zU(WdDj9_~ndW&iLhwU(WdDj9_~ndW&iLhwU(WdDj9 z_~ndW&iLhwU(WdDj9_~ndW&iLhwU(WdDj9_~ndW&iLhwU(WdD zj9_~ndW&iLhwU(WdDj9_~ndW&iLhwU(WdDj9_~ndW z&iLhwU(WdDj9_~ndW&iLhwU(WdDj9SHC1z6~10SAN_L1FK7I6 z#xH05a>g%b{Bp)GXZ&);FK7I6#xH05a>g%b{Bp)GXZ&);FK7I6#xH05a>g%b{Bp)G zXZ&);FK7I6#xH05a>g%b{Bp)GXZ&);FK7I6#xH05a>g%b{Bp)GXZ&);FK7I6#xH05 za>g%b{Bp)GXZ&);FK7I6#xH05a>g%b{Bp)GXZ&);FK7I6#xH05a=|Z`t6!39c#|XU za`j7cHSg>6=$8wAxm^A7d-2D5{mS=@f8PJ}ExlKq;t%p>-+PnZCr&?e+xNb4`q^80 zKVJF%yz&Eh_~n9MF8JkwUoQCNf?qE9<$_->_~n9MF8JkwUoQCNf?qE9 z<$_->_~n9MF8JkwUoQCNa`nqE-o7LI@%O|p-O_;XkRfRlr(eFka?HL7>6sLerg6F- zMEq+{^S3|Y6XNt6xAcj;@{>rP zO!^ekr;_~n9MF8JkwUoQCN zf?qE9<$_->_~n9MF8JkwUoQCNf?qE9<$_->_~n9MF8JkwUoQCNf?qE9<$_->_~n9M zF8JkwUoQCNf?qE9<$_->_~n9MF8JkwUoQCNf?qE9<$_->_~n9MF8JkwUoQCNf?qE9 z<$_->_~n9MF8JkwUoQCNf?qE9<$_->_~j)&((l(Fy~L|Yyh6V@;$E(P$==eVUtaLb z3;oLr{mTpe%M1O>3;oLr{mTpe%M1O>3;oLr{mTpe%M1O>3;oLr{mTpe%M1NWvXMsfPmxTIDLj5J7{*q9CNvOXh z)L#BcYdytFvu(v4rf|LoJQUsC*%;+GV^r1&MpFDZUW@k@$d zQv8zQmlVIG_$9?JDSk=uONw7o{1R7x=YC1?ONw7o{F36A6u+eSCB-i(eo665ieFOv zlH!*Xzohsj#V;v-N%2dHUsC*%;+GV^r1&MpFDZUW@k@$dQv8zQmlVIG_$9?JDSk=u zONw7o{F36A6u+eSCB-i(eo665ieFOvlH!*Xzohsj#V;v-N%2dHUsC*%;+GV^r1&Mp zFDZUW@k@$dQv8zQmlVIG_$9?JDSk=uONw7o{F36A6u+eSCB-i(eo665ieFOvlH!+i z!LlHr#Ozhw9&!!H?r$?!{tUo!lX z;g<}*WcVe+FByKx@JohYGW?R^mkhsT_$9+H8Ggy|ONL)E{F339jQuYee#!7lhF>!L zlHr#Ozhw9&!!H?r$?!{tUo!lX;g<}*WcVe+FByKx@JohYGW?R^mkhsT_$9+H8Ggy| zONL)E{F33948LUfCBrWne#!7lhF>!LlHr#Ozhw9&!!Oy!FTZ}4KX?6-;g<}*WcVe+ zFByKx@JohYGW?R^mkhsT_$9+H8Ggy|ONL)E{F33948LUfCBrWne#!7lhF>!LlHr#O zzhw9&!!H?r$?!{tUo!lX;g<}*WcVe+FByKx@JohYGW?R^mkhsT_$9+H8Ggy|ONL)E z{F33948LUfCBrWne#!7lhF>!LlHr#Ozhw9&!!J30$v1w9=hH{Og zzvTEO$1gd4$?;2$Uvm7CgzvTEO$1gd4$?;2$Uvm7CgzvTEO$1gd4$?;2$Uvm7CgzvTEO z$1gd4$?;2$Uvm7CgzvTEO$1gd4$?;2$Uvm7C|!6K7np@k{)Mo$aSxzZCeTz%K=UDey~yUkdzE;Fkiw z6!@jUF9m)n@JoST3j9*wmjb^O_$BTMJoih1UkdzE;Fkiw6!@jUF9m)n@JoST3j9*w zmjb^O_@%%v1%4^;OMzbs{8HeT0>2darNA!*ekt%vfnN&zQs9>YzZCeTz%K=UDey~y zUkdzE;Fp5uM+JT<@JoST3j9*wmjb^O_@%%v1%4^;OMzbs{8HeT0>2darNA!*ekt%v zfnN&zQs9>YzZCeTz%K=UDey~yUkdzE;Fkiw6!@jUF9m)n@JoST3j9*wmjb^O_@%%v z#l|o3+sU^1bJs5gekt%vfnN&zQs9>YzZCeTz%K=UDey~yUkdzE;Fkiw6!@jUF9m)n z@JoST3j9*wmjb^O_@%%v1%4^;OMzbs{8HeT0>2darNA!*ekt%vfnN&zQs9>YzZCeT zz%K=UDey~yUkdzE;Fkiw6!@jUF9m)n@JoST3j9*wmjb^O_@%%v1%4^;OMzbs{8HkV za^si3eRsx{8^8R<*{5Bvi{p%|Hh$^OKJEIY z!Y>tmsqjmMUn=}k;g<@(RQRRBFBN{N@JoeXD*RI6mkPgB_@%-x@x9A)zf}08!Y>tm zsqjmMUn=}k;g<@(RQRRBFBN{N@JoeXD*RI6mkPgB_@%-x6@IDkONC!5{8HhU3cpnN zrNS>2eyQ+FgtmsqjmMUn=}k;g<@(RQRRBFBN{N@JoeXD*RI6 zmkPgB_@%-x6@IDkONC!5{8HhU3cpnNrNS>2eyQ+FgtmsqjmM zUn=}k;g<@(RQRRBFBN{N@JqGvOZ+DIZ8qJlzf}08!Y>tmsqjmMUn=}k;g<@(RQRRB zFBN{N@JoeXD*RI6mkPgB_@%-x6@IDkONC!5{8HhU3cpnNrNS>2eyQ+FgtmsqjmMUn=}k;g<@(RQRRBFBN{N@JoeXD*RI6mkPgB_@%-x6@IDkONC!5 z{8HhU3cpnNrNS>2eyQ+FjbG}GU;fVB8CP%o@}I-si1V-J`;Th;Qsb8zzts4p#xFH~ zsqssVUuyhPwFExIt@k@wFExIt@k@wFExIt@k@wFExIt z@k@wFExIt@k@_1Gp^bA<>P0ccIz(Y4J;oUt0Xq;+Gb`wD_gPFYz?abHB9srNu8T zerfSbi(gv&(&CpEzqI(J#V;*>Y4J;oUt0Xq;+Gb`wD_gPFD-s)@k@(eTKv-DmlnUY z_@%`!Eq-b7ON(Dx{LY4J;oUt0Xq;+Gb` zwD_gPFD-s)@k@(eTKv-DmlnUY8^8R6v;4X1mlnUY_@%`!Eq-b7ON(Dx{LY4J;oUt0Xq;+Gb`wD_gPFD-s)@k@(eTKv-D zmlnUY_@%`!Eq-b7ON(Dx{LY4J;o zUt0Xq;+Gb`wD_gPFD-uQ@JqMx%V+P-xNhT@?>YOl>z59{boiyiFCBjA@JokZI{eb% zmkz&l_@%=y9e(NXONU=N{LF`U3UpoBK z;g=4-boiyiFCBjA@JokZI{eb%mkz&l_@%=y9e(NXONU=N{LF`U3UpoBK;g=4-boiyiFCBjA@JokZI{eb%mkz&l_@%=y z-NrBf@GO7s`lZ7!9e(NXONU=N{LF`U3UpoBK;g=4-boiyiFCBjA@JokZI{eb%mkz&l_@%=y9e(NXONU=N{LF`U3UpoBK;g=4-boiyiFCBjA@JokZdi>IF z{PK_P&bWT#m;W99M%@3>v;U>XFFk(g@k@_idi>Jkmma_L_@&1$J$~u&OOIcA{L z9>4VXrN=Kle(CW`k6(KH(&LvNzx4Q}$1gp8>G4aCUwZt~Jkmma_L_@&1$J$~u&OOIcA{L9>4VXrN=Kle(CW`k6(KH(&LvNzx4Q}$1gp8 z>G4aCUwZt~Jkmma_L_@&1$J$~u&OOIcA{L9>4VX zrN=Kle(CW`k6(KH(&LvNzx4Q}$1gp8>G4aCUwZt~Jkmma_L_@&1$J$~u&OOIcA{L9>4VXrN=Kle(CW`k6(KH(&LvN zzx4Q}$1gp8>G4aCUwZt~Jkmma_L_@&1$J$~u&OOIcA z{L9>4VXrN=Kle(CW`k6(KH(&LvNzx4Q}Kl96Ph8+0OM^CPO-y@%S$@BU7l1E+{ zX7ROazjp1p@awf}?>TwJwfJY_eg15^&!5fr`LpH1pG83p;m^*$t7+I+>z~}s4#UP; z|McwBZmnp*S_9S^u-1UJ2COw;tpRHdSZlyq1J)X_)_}DJtTkY*0c#CdYrt9q)*7(Z zfVBp!HDIj)YYkXyz*+;=8nD)YwT5fE-_s88>eH@?XQ>*#6C3zl`{0#4jU$ z8S%@AUq<{g;+GM>jQC~5FC%^#@ym!`M*K43ml3~=_+`W|BYqk2%ZOh_{4(N~5xjQC~5FC%^#@ym!`M*K43 zml3~=_+`W|BYqk2%ZOh_{4(N~5xjQC~5FC%^#@ym!`M*K43ml3~=_+`W|BYqk2%ZOh_{4(N~5x*u3tv{GUAsJzl`{0#4jU$8S%@AUq<{g;+GM>jQC~5FC%^# z@ym!`M*K43ml3~=_+`W|BYqk2%ZOh_{4(N~5xjQC~5FC%^#@ym!`M*K43ml3~=_+`W|BYqk2%ZOh_{4(N~ z5xo3#BFaPrHjGH!o`RrZ4Og!tF@XLf>Cj2ttmkGa2_+`Q`6MmWS%YnknefYmUncxA;g<=&O!#HOFB5*5 z@XLf>Cj2ttmkGa2_+`Q`6MmWS%Y-xfZFsj|`igkL87GU1mAzfAaL!Y>nknefYmUncxA;g<=&O!#HO zFB5*5@XLf>Cj2ttmkGa2_+`Q`6MmWS%YnknefYmUncxA;g<=&O!#HOFB5*5@XLf>Cj2ttmkGa2 z_+`Q`6MmWS%YnknefYmUncxA z;g<=&O!#HOFB5*5@XLf>Cj2ttmkGa2_+`Q`6MmWS%Y6f6x6gZ~XGF@6Nb+YW)GUJySzs&e$#xFB|neoevUuOI=JN{;bVjLz_JsKK<3Z9$Yql`44A*^R@iV*M(32@$BDy8UOC}eA?arvf!5m zzbyD=!7mGbS@6q(Ul#nb;FkrzEcj)?FAIKI@XLZ<7W}f{mj%Bp_+`N_3w~Mf%Yt7P z{IcMe1-~r#Wx+2Cep&F#f?pQ=vf!5mzbyD=!7mGbS@6q(Ul#nb;FkrzEcj)?FAIKI z@XLZiLh?1rfYp`!Obs_~X}4UbX$r=GW)K zk6#PFyL0l3*Is<`d4U=y|LapPzxlCG{*R~M^`YPTRC@dRv+w@!PyEowpZ$$G{s+F{ z+DTsj&F_7A^5}E#3(4SmNO(_$pHGLBd?PHo;+LV^42k@ykd(t0c89}}BK)6x zCS038i2sbCefpTtzW%|X#c-dvRA_JC7uZSo7wZDM9XjpF&~i7zt?EYj=i{N>ZiK*Y zUQLTV66AX4u; zcf)#iGw6>GYwtjRVTkq4$xj^<)>j)=96>ij$2}QBy25sPQCP{`Ir-IN0{W&y0X-4I zOD@d0-}=z&NeA1{@BZ*B`bVGpBjLUmf4(_%_fz55sD(XU`Qos=S~t|Mhqih;6piA@ zib)|2Etp(lbnWfNmxMLmx{%I?dJHBe)7?>ZF@gTzv&lza`ZND+I!&SnX5UN0LUY}K zzc-}#8eIG;(Le-nOqRzbMoU*JWyTzMSRBL?m{j~FsZ_&3O>hxEK^6#CKPaPB7R~g)P?47P3uPB@^ z3H9f7OR|`FV@S5r?MqCK*iL(I=&uQn^4HxHPTT3$-T8ccOMP<)C?tjZuYn#7y9w5j za2rrulHCqJuebxhG&~l#bMni_jHfqW98dS}z_=cI`l`C|wPBydy70~u@M(v}63OM4 z9S3LQ>%zv5J14(#OzVB){?>c`0q&g!Ul#VF+&TG+#{~G;#Q-B6V>RN|*_ew(l$&7; z-oJcu_*QnX9bX?d$*fBwr|YFSF``V~d+AwwFt9gVdqW6pO=TyRn;uF?UmhO1t!t}o zNLw_;sc^p<*z@SbuL#fo)-6}=4e7B>o_MLa< zWGw&Q-YKPAS(|-Tcs#q#z2OPr*1f%9(EIOxx)|*7ch!UQ^Q*(N<8@Zs^~XaB z?rXxM>~-yUD7bh))Y==_-uuMYhUe^SbrPWz?-LI}yI&U`_^-=#@m>(`t2ZtH^NPmZ z*N43a>jK-}pst6B5~oPKyT;n~ZdezK4j1c=j~#k=^9|u~(Ygt79!w;8T;bomTc~+o zXv0{vITYk>sU}F`{sw+i0P?!KX%SXZ?+iEhG_={<03*!5UgC4|-G z{X=?lD0kmE`S>wF`U-&*N7(yA`hDhLFt*Eqr*7XEcBR}o`NT1Se5HYG@1FO23~_NJ z?FMt8O#Dq@OU#{<_p^mcqY;qgQ6QP@~Z`k+{SLv}S*Hu5FV&klf&m|vfA>pyG zeP~@_E7p)=LcRA1+@UT#SonKOm<4MS!#0?Q*qLt)Q+nMp<+P>FpDjJaFy9t(&${AE zESEkRl4$JG%RQ=p+x};~Zx4mu=Nr!DAJ6YCoxUSfo!4de_&D`eNT#utd)f9mnBBi6 zY_?lh1=a@`30tQgdF0x)7li9`!u7&%y(nBS z4%bV<_0n*?EL@)(uFnhC%ft2g;d({5UKy@02-mB^^@ZX3qHz6=aD8#OULCG43D;}F z^=P=hG+eI@*XzRdf8&0w|NrB+MGI_P6xnvAIp*8Lj_Gw-d1q*zg?8E7#ony^9bxPC zx@l}!@rdVGw!Mi< z>0TYZH>_UQRSfP8>q-az^{`f3w=jqsg5u3$yXyNuXtV2K5?p>)&Vi-q6JeCB8*Tf7 zi`^NkrpHc(El&1!>yzO>w+_AM52#|oi0hc$kPeTsgEi6jg-x#O(#CGtaa~Y*3ykj% zykEB#-tINoK2*P43+)Z&J45wt-H_i6CZ4e$(?s0bak;IGvHSK0cOztx79WoYq3EwmfN-kJAw$ivUC+v1>pDzwgfL%X~$ z{62QwZdlJFt4Elu?Y3A~d45~g_s+d%!_Lxm*~);ngZy@Av*X{%*e=ochIT77|Jw4{ z7BcsiUmx6odq-E?yt6Kx_;@nD`E#Y=Bq8OkQ^ILD@m?6y=bFIwB!M)Da-9<5_}Si^ zkKdL00NQ2Y-IH}47Bf-|D5is3L9n|i;Bb08@T4jaFP^Szn`p~Z5quzoV@|pl(5r9l zK04deQAOCsx-J`?rp35VGLD_?9dEaV9z4hP?)E6djbL3ix)@f}`IUxNg|~s%J+HbL z+NlxFwSKwQ+nb^4@QU)fr!W^oJa4_&!KeEKuPDqWygR*aUOpK{?deNfap!o>%sf2q z_TFaV7j>^&0iNsgbcV*q+q1@noa-TwnA793EAE|&;Y7px2HwTNZBTpX z+K0oL9P8fVJe_NY+h%vv?0u#CcZZ`u*4<*x+a?k@*7de66*mz+v0?M}HHXW+MXsSILf;8cp5}pWIcHSEEmVmZpR%6=KI3gEbCW(yE~4L zE1Nm2_e}op4@bnTll#TZyK&R~cD1vc03L+90|nXN6V9tymzTEhgKZy(Y)O3U0V!a& z3-`WC^n1gRIqL%2-aMk2;u9{@z=K=pTlU@ke;}ONvo2AdJ`;>$ipzxKO4hrrbYQd1 z?+eEVT~%0@Emy}9?4F_i`@=a#>lO?#VaCn5yMXgmtCcC?2g6}X>so5Na*11#B1__v z`M5Vd=BmT@y4^0^JJA0?IMr$0n)&nv__#ob+n8e={h{1m{$Mz2YF*j-@nD3wHr~xr z7rXDM)cHfBiz%MlOOyDWH+F_1N;w#BevG>sg48u;=TW3yX=mh1MA>F z98ULI*D^6LJsaBQMrfVw0ZWHF>d1iNAuH=vCXa^%8FwbcU>@SiYWD1)1u z(RGF0_M_n>ymfnCE(W!xxO3n^_D8~@eCrnAyIptLXU2OI=10S+fa}6JUrgPv+a5%^ zJwW+bIF@kjSUO$zuIaFY)wmxErz5UQox5H35L4%mhXWhewptWZ5|TnZAZLrW{bmh0N>A?`c-HFQFcC=-xT_C&D?a>mG948`LqQ>0)v?m{va(j(uG>(6=vRZud`ZD|VM{u>))5 zKN-%ST~`jeH>@>ncA%>8Q{gb&bz>|p-{U@xi`{x?1-P3U4g~e5!kN75q;(op^r+7k zj(-w!Ah4ef#{;h${JZax#(Uy<(c`k?Z12qcnQ&V1y1V24;MR<`19!)t4M!-io1c+} zaSK#j%3i-}+5cQP%X!@^!slX*q3tXGA3G%u=C+>?M@+99dl!pEal~!+gG8Sl8(e%t zYwwcw7s83x>oVNEwXJwtkLQBKH<}Lxw_CkAa8v(uIDUKGgYSDovn3A&x0~q>cI%%G z=Yg-wb@8S2_})n@fNvAZQ=8xKhIM$&^sYlYw|_AlO}_3G{h6@2i333`0@6Az9;*N!}@dK#Qb&1^i&uZ*>i=&{*`cm|GFFbX>j-B&*cL=Alg44 ozExn|Slg{%96Qo>Gkr{^d)AY`8ou1%W#M3y-xlw79uvg>1CcQjO8@`> literal 0 HcmV?d00001 diff --git "a/testcase/od/\345\257\204\345\224\256\345\200\237\345\207\272\345\215\225.py" "b/testcase/od/\345\257\204\345\224\256\345\200\237\345\207\272\345\215\225.py" new file mode 100644 index 0000000..05ab6f1 --- /dev/null +++ "b/testcase/od/\345\257\204\345\224\256\345\200\237\345\207\272\345\215\225.py" @@ -0,0 +1,306 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) + + +def create_salesorder(type=1): + try: + import time + pro_path = get_pro_path() + start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + # 切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + # chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + # actions = ActionChains(chrome) + # actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + # chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + 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(4) + 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")]')) + #获取订单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "订单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(4) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + + + # sleep(2) + # 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('国药集团北京') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[2]').click() + # chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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('杨春刚') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:员工编码,员工名称"]').send_keys( + Keys.ENTER) + chrome.find_element_by_xpath( + '(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[1]').click() + + #客户信息页签 + 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('1451') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客户名称,收货地址号,收货地址信息,地址名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="0b570c63f68dfcc5a40d6a06f6aef07e4"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').click() + #仓库信息页签 + 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('103356') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:仓库编码,仓库名称"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('//div[@class="multiple-header string_col" and text()="103356"]/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"])[4]').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="模糊检索:仓库编码,仓库名称"])[2]').send_keys('103503') + chrome.find_element_by_xpath('(//input[@placeholder="模糊检索:仓库编码,仓库名称"])[2]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath( + '//div[@class="multiple-header string_col" and text()="103503"]/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"])[5]').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('杨春刚') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + # chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[4]').click() + # #其他信息页签 + # chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + # chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,件包数"]').send_keys( + '10006179') + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,件包数"]').send_keys( + Keys.ENTER) + chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(3) + # 滚动条右拉 + chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 1000"); + element = chrome.find_element_by_xpath('//td[@colid="col_159"]') + element.click() + sleep(3) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_xpath('(//div[@class="el-input el-input--fullScreenSize el-input--prefix el-input--suffix dataDialog awsui-input dataDialog"]/div/span/span)[2]').click() + # chrome.find_element_by_xpath('//div[@class="el-input el-input--fullScreenSize el-input--prefix el-input--suffix dataDialog awsui-input dataDialog"]/div/input').send_keys('23072800OP0237') + chrome.find_element_by_xpath('(//div[text()="合格品"])[3]').click() + sleep(1) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[9]').click() + sleep(1) + chrome.find_element_by_xpath('//td[@colid="col_160"]').click() + sleep(1) + chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 1500"); + sleep(1) + element=chrome.find_element_by_xpath('//td[@colid="col_165"]') + element.click() + sleep(3) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + sleep(1) + chrome.find_element_by_xpath('//td[@colid="col_166"]').click() + sleep(1) + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + # element = chrome.find_element_by_xpath('//td[@colid="col_197"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # element = chrome.find_element_by_xpath('//td[@colid="col_198"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # lock = threading.Lock() + # lock.acquire() + #方案一============================开始 + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + chrome.find_element_by_xpath('//span[text()="提交"]').click() + # sleep(3) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + while True: + m2=get_time_m() #循环获取当前的分 + sleep(10) + if (m2==m1): + chrome.find_element_by_xpath('//span[text()="提交"]').click() + # sleep(3) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + break + #方案二===============结束 + # lock.release() + sleep(2) + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + # chrome.switch_to.default_content() + # chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(20) + while True: + try: + if chrome.find_element_by_xpath('//span[text()="%s"]'%orderno).is_displayed()==True: + print('//span[text()="%s"]'%orderno) + break + except: + continue + print('寄售借出单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+str(end - start) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + # t.join() + +def start1(): + count = 5 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\345\257\204\345\224\256\347\224\263\350\257\267\345\215\225.py" "b/testcase/od/\345\257\204\345\224\256\347\224\263\350\257\267\345\215\225.py" new file mode 100644 index 0000000..e7aa543 --- /dev/null +++ "b/testcase/od/\345\257\204\345\224\256\347\224\263\350\257\267\345\215\225.py" @@ -0,0 +1,352 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) + + +def create_salesorder(type=1): + try: + import time + pro_path = get_pro_path() + start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + # 切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + # chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + # actions = ActionChains(chrome) + # actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + # chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + 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(2) + chrome.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + #获取订单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "寄售申请单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(2) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + + + # sleep(2) + # 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('国药集团北京') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[2]').click() + # chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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('杨春刚') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:员工编码,员工名称"]').send_keys( + Keys.ENTER) + chrome.find_element_by_xpath( + '(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[1]').click() + + #客户信息页签 + 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('1451') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客户名称,收货地址号,收货地址信息,地址名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="0b570c63f68dfcc5a40d6a06f6aef07e4"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').click() + # #仓库信息页签 + # 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('103356') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:仓库编码,仓库名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//div[@class="multiple-header string_col" and text()="103356"]/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"])[4]').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="模糊检索:仓库编码,仓库名称"])[2]').send_keys('103503') + # chrome.find_element_by_xpath('(//input[@placeholder="模糊检索:仓库编码,仓库名称"])[2]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath( + # '//div[@class="multiple-header string_col" and text()="103503"]/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"])[5]').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('杨春刚') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + # chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[4]').click() + # #其他信息页签 + # chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + # chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号"]').send_keys( + '10006179') + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号"]').send_keys( + Keys.ENTER) + chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[3]').click() + sleep(3) + # 滚动条右拉 + chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 800"); + sleep(3) + element = chrome.find_element_by_xpath('//td[@colid="col_113"]') + element.click() + sleep(3) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + sleep(1) + chrome.find_element_by_xpath('//td[@colid="col_114"]').click() + sleep(1) + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 1500"); + # sleep(1) + # element=chrome.find_element_by_xpath('//td[@colid="col_165"]') + # element.click() + # sleep(3) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + # chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + sleep(1) + # chrome.find_element_by_xpath('//td[@colid="col_166"]').click() + sleep(1) + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + # element = chrome.find_element_by_xpath('//td[@colid="col_197"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # element = chrome.find_element_by_xpath('//td[@colid="col_198"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # lock = threading.Lock() + # lock.acquire() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + sleep(1) + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + sleep(1) + + chrome.switch_to.default_content() + sleep(1) + chrome.find_element_by_xpath('//span[@class="awsui-tabs-icon close"]').click() + 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('(//input[@class="el-input__inner"])[2]').send_keys(orderno) + sleep(2) + chrome.find_element_by_xpath('(//input[@class="el-input__inner"])[2]').send_keys(Keys.ENTER) + sleep(2) + chrome.find_element_by_xpath('//td[@class="vxe-body--column col_19 col--center col--last col--ellipsis dw-click-cell"]/div/span').click() + sleep(2) + chrome.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + sleep(2) + # 点击自动配货按钮 + chrome.find_element_by_xpath('//button[text()="自动配货"]').click() + sleep(2) + chrome.find_element_by_xpath('//span[text()="分配批次"]').click() + sleep(2) + # chrome.execute_script( + # 'document.getElementsByClassName("body")[0].scrollTop = "300";') + # # 滚动条右拉 + # chrome.execute_script( + # "document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 1200") + # + # element = chrome.find_element_by_xpath('(//td[@colid="col_124"])[1]') + # element.click() + # sleep(2) + # chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # sleep(2) + # chrome.find_element_by_xpath('//td[@colid="col_125"]').click() + # sleep(1) + + #方案一============================开始 + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + chrome.find_element_by_xpath('//span[text()="提交"]').click() + # sleep(3) + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + while True: + m2=get_time_m() #循环获取当前的分 + sleep(10) + if (m2==m1): + chrome.find_element_by_xpath('//span[text()="提交"]').click() + # sleep(3) + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + break + #方案二===============结束 + while True: + try: + if chrome.find_element_by_xpath('//p[text()="流程结束"]').is_displayed()==True: + # print('流程结束') + break + # else: + # print('共享任务创建成功的元素没有出现') + except: + continue + # lock.release() + # sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + chrome.switch_to.default_content() + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(20) + while True: + try: + if chrome.find_element_by_xpath('(//span[text()="%s"])[1]'%orderno).is_displayed()==True: + print('//span[text()="%s"]'%orderno) + break + except: + continue + print('寄售申请单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+str(end - start) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + # t.join() + +def start1(): + count = 5 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\345\272\223\345\255\230\351\242\204\345\215\240\350\276\271\347\225\214\346\265\213\350\257\225/\345\272\223\345\255\230\351\242\204\345\215\240\350\276\271\347\225\214\346\265\213\350\257\225.py" "b/testcase/od/\345\272\223\345\255\230\351\242\204\345\215\240\350\276\271\347\225\214\346\265\213\350\257\225/\345\272\223\345\255\230\351\242\204\345\215\240\350\276\271\347\225\214\346\265\213\350\257\225.py" new file mode 100644 index 0000000..9120786 --- /dev/null +++ "b/testcase/od/\345\272\223\345\255\230\351\242\204\345\215\240\350\276\271\347\225\214\346\265\213\350\257\225/\345\272\223\345\255\230\351\242\204\345\215\240\350\276\271\347\225\214\346\265\213\350\257\225.py" @@ -0,0 +1,47 @@ +import threading +import time +from airtest.core.api import * +from selenium import webdriver +from selenium.webdriver.common.keys import Keys +from airtest_selenium.proxy import * +def job3(): + print("这是一个需要执行的任务。。。。。") + create_salesorder(2) + print("当前线程的个数:", threading.active_count() ) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) +def job1(): + print("这是一个需要执行的任务。。。。。") + create_salesorder1(2) + print("当前线程的个数:", threading.active_count() ) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + from testcase.od.库存预占边界测试.销售订单1 import * + from testcase.od.库存预占边界测试.调拨出库单1 import * + # t1 = threading.Thread(target=create_salesorder,name="job1") + # t2 = threading.Thread(target=create_salesorder1,name="job2") + # t1.start() + # t2.start() + count = 4 #4个人下单,只有3个商品 + # semaphore = threading.Semaphore(value=1) + for i in range(count): + if i<2: + t = threading.Thread(target=job3) + t.start() + if i>=2: + t = threading.Thread(target=job1) + t.start() + # t.join() + print(threading.active_count()) + # sleep(30) + # sys.exit(0) + + + # print("程序执行结束.....") + # for i in range(10): + # from testcase.od.销售订单 import * + # start1() + + diff --git "a/testcase/od/\345\272\223\345\255\230\351\242\204\345\215\240\350\276\271\347\225\214\346\265\213\350\257\225/\350\260\203\346\213\250\345\207\272\345\272\223\345\215\2251.py" "b/testcase/od/\345\272\223\345\255\230\351\242\204\345\215\240\350\276\271\347\225\214\346\265\213\350\257\225/\350\260\203\346\213\250\345\207\272\345\272\223\345\215\2251.py" new file mode 100644 index 0000000..1f61487 --- /dev/null +++ "b/testcase/od/\345\272\223\345\255\230\351\242\204\345\215\240\350\276\271\347\225\214\346\265\213\350\257\225/\350\260\203\346\213\250\345\207\272\345\272\223\345\215\2251.py" @@ -0,0 +1,276 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder1(1) + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) + + +def create_salesorder1(type=2): + import time + start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + # chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + # 切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + allot_link = chrome.find_element_by_xpath('//span[text()="调拨出库单"]') + chrome.execute_script("arguments[0].click();", allot_link) + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + sleep(4) + 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")]')) + #获取调拨出库单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "调拨出库订单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(4) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + print(chrome.find_element_by_xpath('//div[text()="公司名称 "]').text) + + + sleep(2) + 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('国药集团北京') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + sleep(2) + chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + + chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys('北京强生非') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys(Keys.ENTER) + # # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + # btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]') + # chrome.execute_script("arguments[0].click();", btn_div) + # chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').click() + # 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"])[4]').click() + #业务员名称 + sleep(1) + 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('杨春刚') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,部门名称,部门编码,部门类型"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[2]').click() + #仓库信息页签 + 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="模糊检索:调拨出库仓库名称,调拨出库仓库编码,是否WMS仓"]').send_keys('北京强生非') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:调拨出库仓库名称,调拨出库仓库编码,是否WMS仓"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="08374712eb9413253c6281062de2ab877"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//span[@class="ensureBtn"])[3]/button').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="模糊检索:调拨入库仓库名称,调拨入库仓库编码,是否WMS"]').send_keys('北京公司-上海库') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:调拨入库仓库名称,调拨入库仓库编码,是否WMS"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div = chrome.find_element_by_xpath('//span/input[@type="radio" and @value="0ae6dc5623cc2f6295808997a06ecb492"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//span[@class="ensureBtn"])[4]/button').click() + + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品全称,规格型号,主计量单位,采购计量单位,厂家物料编码,存储条件,存储条件说明,生产企业编码,行类型,件包数,产品备注,产品描述,商品性质,是否免备案"]').send_keys( + '10176773') + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品全称,规格型号,主计量单位,采购计量单位,厂家物料编码,存储条件,存储条件说明,生产企业编码,行类型,件包数,产品备注,产品描述,商品性质,是否免备案"]').send_keys( + Keys.ENTER) + sleep(1) + chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(3) + element=chrome.find_element_by_xpath('//td[@colid="col_108"]') + element.click() + sleep(3) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + sleep(4) + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + # element = chrome.find_element_by_xpath('//td[@colid="col_197"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # element = chrome.find_element_by_xpath('//td[@colid="col_198"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # lock = threading.Lock() + # lock.acquire() + #方案一============================开始 + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + print('调拨计划提交时间',m1) + while True: + m2=get_time_m() #循环获取当前的分 + # sleep(30) + if (m2==m1): + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + #方案二===============结束 + # lock.release() + sleep(5) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini awsui-button awsui-button--primary"]//span[text()="确定"]').click() + chrome.switch_to.default_content() + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(20) + while True: + try: + if chrome.find_element_by_xpath('(//span[text()="%s"])[2]'%orderno).is_displayed()==True: + print('//span[text()="%s"]'%orderno) + break + except: + continue + print('调拨出库单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + time1=end - start + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+',耗时'+str(time1) + now = get_time() + pro_path = get_pro_path() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + pro_path = get_pro_path() + + try: + for i in range(1): + t = threading.Thread(target=job) + t.start() + # t.join() + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + # imgInfo = getErrorPhoto(chrome) + # imgName = imgInfo[0] + # image_path = imgInfo[1] + # print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) + + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\345\272\223\345\255\230\351\242\204\345\215\240\350\276\271\347\225\214\346\265\213\350\257\225/\351\224\200\345\224\256\350\256\242\345\215\2251.py" "b/testcase/od/\345\272\223\345\255\230\351\242\204\345\215\240\350\276\271\347\225\214\346\265\213\350\257\225/\351\224\200\345\224\256\350\256\242\345\215\2251.py" new file mode 100644 index 0000000..a97d621 --- /dev/null +++ "b/testcase/od/\345\272\223\345\255\230\351\242\204\345\215\240\350\276\271\347\225\214\346\265\213\350\257\225/\351\224\200\345\224\256\350\256\242\345\215\2251.py" @@ -0,0 +1,268 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) + + +def create_salesorder(type=2): + try: + import time + pro_path = get_pro_path() + start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + # chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + #切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + # chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + # actions = ActionChains(chrome) + # actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + # chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + 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(4) + 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")]')) + #获取订单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "销售订单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(4) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + + + sleep(2) + 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('国药集团北京') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + + chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys('北京强生非') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').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"])[4]').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('杨春刚') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[4]').click() + #其他信息页签 + chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + '10176773') + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + Keys.ENTER) + sleep(1) + chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(2) + element=chrome.find_element_by_xpath('//td[@colid="col_177"]') + element.click() + sleep(2) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # chrome.find_element_by_xpath('//td[@colid="col_177"]/div/div').send_keys('1') + sleep(1) + chrome.find_element_by_xpath('//td[@colid="col_178"]').click() + sleep(4) + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + element = chrome.find_element_by_xpath('//td[@colid="col_197"]') + element.click() + sleep(2) + chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + sleep(2) + element = chrome.find_element_by_xpath('//td[@colid="col_198"]') + element.click() + sleep(2) + chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + sleep(2) + # lock = threading.Lock() + # lock.acquire() + #方案一============================开始 + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=2) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + print('销售订单计划提交时间的分钟',m1) + while True: + m2=get_time_m() #循环获取当前的分 + # sleep(30) + if (m2==m1): + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + #方案二===============结束 + # lock.release() + sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini awsui-button awsui-button--primary"]//span[text()="确定"]').click() + # chrome.switch_to.default_content() + # chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(20) + while True: + try: + if chrome.find_element_by_xpath('//span[text()="%s"]'%orderno).is_displayed()==True: + print('//span[text()="%s"]'%orderno) + break + except: + continue + print('销售订单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+str(end - start) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + +def start1(): + count = 1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\346\211\213\346\234\257\345\200\237\345\207\272\345\215\225.py" "b/testcase/od/\346\211\213\346\234\257\345\200\237\345\207\272\345\215\225.py" new file mode 100644 index 0000000..469f004 --- /dev/null +++ "b/testcase/od/\346\211\213\346\234\257\345\200\237\345\207\272\345\215\225.py" @@ -0,0 +1,316 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) + + +def create_salesorder(type=1): + try: + import time + pro_path = get_pro_path() + start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + # 切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + # chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + # actions = ActionChains(chrome) + # actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + # chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + 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(2) + chrome.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + #获取订单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "借出单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(2) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + sleep(2) + # 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('国药集团北京') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + # chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + # chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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('chenshuheng') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:员工编码,员工名称,部门编码,部门名称"]').send_keys( + Keys.ENTER) + chrome.find_element_by_xpath( + '(//div[text()="chenshuheng"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[1]').click() + + #手术类型 + chrome.find_element_by_xpath('(//input[@placeholder="请选择" and @type="text"])').click() + sleep(1) + chrome.find_element_by_xpath('//li[text()="初次手术"]').click() + sleep(1) + #手术种类 + chrome.find_element_by_xpath('(//input[@placeholder="请选择" and @type="text"])[2]').click() + sleep(1) + chrome.find_element_by_xpath('//li[text()="髋关节"]').click() + sleep(1) + chrome.find_element_by_xpath('//label[text()="手术日期 "]/following-sibling::div/div').click() + sleep(1) + chrome.find_element_by_xpath('//div[ @class ="el-date-table-cell"] // span[text()="31"]').click() + + #客户信息页签 + 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('北京大学第三医院') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客户名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="083165b4f865526823ef04a27fa9cd7c1"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').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('北京大学第三医院') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客商名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div = chrome.find_element_by_xpath( + '//span/input[@type="radio" and @value="0c4d395678c596b20aa6c2a2fef3483d4"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').click() + + # 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"])[4]').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('杨春刚') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + # chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[4]').click() + # #其他信息页签 + # chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + # chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,存储条件"]').send_keys( + '10214724') + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,存储条件"]').send_keys( + Keys.ENTER) + sleep(1) + chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[4]').click() + sleep(3) + # 滚动条右拉 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + + element=chrome.find_element_by_xpath('//td[@colid="col_89"]') + element.click() + sleep(2) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + sleep(2) + chrome.find_element_by_xpath('//td[@colid="col_90"]').click() + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + # element = chrome.find_element_by_xpath('//td[@colid="col_197"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # element = chrome.find_element_by_xpath('//td[@colid="col_198"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # lock = threading.Lock() + # lock.acquire() + #方案一============================开始 + # if user_count<=5: + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + while True: + m2=get_time_m() #循环获取当前的分 + # sleep(60) + if (m2==m1): + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + #方案二===============结束 + # lock.release() + while True: + try: + if chrome.find_element_by_xpath('//p[text()="共享任务创建成功"]').is_displayed() == True: + # print('订单完成了') + break + except: + continue + sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + # chrome.switch_to.default_content() + # chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(20) + while True: + try: + if chrome.find_element_by_xpath('//span[text()="%s"]'%orderno).is_displayed()==True: + print('//span[text()="%s"]'%orderno) + break + except: + continue + print('手术借出单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+str(end - start) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + +def start1(): + count = 5 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\346\211\213\346\234\257\345\200\237\345\207\272\345\215\225\345\271\266\345\217\221/\346\211\213\346\234\257\345\200\237\345\207\272\345\215\225.py" "b/testcase/od/\346\211\213\346\234\257\345\200\237\345\207\272\345\215\225\345\271\266\345\217\221/\346\211\213\346\234\257\345\200\237\345\207\272\345\215\225.py" new file mode 100644 index 0000000..72db3ae --- /dev/null +++ "b/testcase/od/\346\211\213\346\234\257\345\200\237\345\207\272\345\215\225\345\271\266\345\217\221/\346\211\213\346\234\257\345\200\237\345\207\272\345\215\225.py" @@ -0,0 +1,316 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) + + +def create_salesorder(type=1): + try: + import time + pro_path = get_pro_path() + start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + # 切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + # chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + # actions = ActionChains(chrome) + # actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + # chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + 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(2) + chrome.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + #获取订单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "借出单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(2) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + sleep(2) + # 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('国药集团北京') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + # chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + # chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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('chenshuheng') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:员工编码,员工名称,部门编码,部门名称"]').send_keys( + Keys.ENTER) + chrome.find_element_by_xpath( + '(//div[text()="chenshuheng"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[1]').click() + + #手术类型 + chrome.find_element_by_xpath('(//input[@placeholder="请选择" and @type="text"])').click() + sleep(1) + chrome.find_element_by_xpath('//li[text()="初次手术"]').click() + sleep(1) + #手术种类 + chrome.find_element_by_xpath('(//input[@placeholder="请选择" and @type="text"])[2]').click() + sleep(1) + chrome.find_element_by_xpath('//li[text()="髋关节"]').click() + sleep(1) + chrome.find_element_by_xpath('//label[text()="手术日期 "]/following-sibling::div/div').click() + sleep(1) + chrome.find_element_by_xpath('//div[ @class ="el-date-table-cell"] // span[text()="31"]').click() + + #客户信息页签 + 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('北京大学第三医院') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客户名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="083165b4f865526823ef04a27fa9cd7c1"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').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('北京大学第三医院') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客商名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div = chrome.find_element_by_xpath( + '//span/input[@type="radio" and @value="0c4d395678c596b20aa6c2a2fef3483d4"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').click() + + # 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"])[4]').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('杨春刚') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + # chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[4]').click() + # #其他信息页签 + # chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + # chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,存储条件"]').send_keys( + '10176773') + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,厂家物料编码,存储条件"]').send_keys( + Keys.ENTER) + sleep(1) + chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[4]').click() + sleep(3) + # 滚动条右拉 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + + element=chrome.find_element_by_xpath('//td[@colid="col_89"]') + element.click() + sleep(2) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + sleep(2) + chrome.find_element_by_xpath('//td[@colid="col_90"]').click() + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + # element = chrome.find_element_by_xpath('//td[@colid="col_197"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # element = chrome.find_element_by_xpath('//td[@colid="col_198"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # lock = threading.Lock() + # lock.acquire() + #方案一============================开始 + # if user_count<=5: + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + while True: + m2=get_time_m() #循环获取当前的分 + # sleep(60) + if (m2==m1): + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + #方案二===============结束 + # lock.release() + while True: + try: + if chrome.find_element_by_xpath('//p[text()="共享任务创建成功"]').is_displayed() == True: + # print('订单完成了') + break + except: + continue + sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + # chrome.switch_to.default_content() + # chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(20) + while True: + try: + if chrome.find_element_by_xpath('//span[text()="%s"]'%orderno).is_displayed()==True: + print('//span[text()="%s"]'%orderno) + break + except: + continue + print('手术借出单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+str(end - start) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=4 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + +def start1(): + count = 5 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\346\211\213\346\234\257\350\257\267\351\242\206\345\215\225.py" "b/testcase/od/\346\211\213\346\234\257\350\257\267\351\242\206\345\215\225.py" new file mode 100644 index 0000000..69b4efc --- /dev/null +++ "b/testcase/od/\346\211\213\346\234\257\350\257\267\351\242\206\345\215\225.py" @@ -0,0 +1,348 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) + + +def create_salesorder(type=1): + try: + import time + pro_path = get_pro_path() + start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + # 切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + # chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + # actions = ActionChains(chrome) + # actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + # chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + 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(2) + chrome.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + #获取订单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "请领单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(2) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + sleep(2) + # 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('国药集团北京') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + # chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + # chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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('chenshuheng') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:员工编码,员工名称,部门编码,部门名称"]').send_keys( + Keys.ENTER) + chrome.find_element_by_xpath( + '(//div[text()="chenshuheng"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[1]').click() + + #手术类型 + chrome.find_element_by_xpath('(//input[@placeholder="请选择" and @type="text"])').click() + sleep(1) + chrome.find_element_by_xpath('//li[text()="初次手术"]').click() + sleep(1) + #手术种类 + chrome.find_element_by_xpath('(//input[@placeholder="请选择" and @type="text"])[2]').click() + sleep(1) + chrome.find_element_by_xpath('//li[text()="髋关节"]').click() + sleep(1) + chrome.find_element_by_xpath('//label[text()="手术日期 "]/following-sibling::div/div').click() + sleep(1) + chrome.find_element_by_xpath('//div[ @class ="el-date-table-cell"] // span[text()="31"]').click() + + #客户信息页签 + 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('北京大学第三医院') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客户名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="02f94bb93be972567166f428524aa3b43"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').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('北京大学第三医院') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客商名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div = chrome.find_element_by_xpath( + '//span/input[@type="radio" and @value="0c4d395678c596b20aa6c2a2fef3483d4"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[4]').click() + + # 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"])[4]').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('杨春刚') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + # chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[4]').click() + # #其他信息页签 + # chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + # chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称"]').send_keys( + '10214724') + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称"]').send_keys( + Keys.ENTER) + sleep(1) + chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[4]').click() + sleep(3) + # 滚动条右拉 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + + element=chrome.find_element_by_xpath('//td[@colid="col_75"]') + element.click() + sleep(2) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + sleep(2) + chrome.find_element_by_xpath('//td[@colid="col_76"]').click() + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + # element = chrome.find_element_by_xpath('//td[@colid="col_197"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # element = chrome.find_element_by_xpath('//td[@colid="col_198"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # lock = threading.Lock() + # lock.acquire() + #方案一============================开始 + # if user_count<=5: + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + while True: + m2=get_time_m() #循环获取当前的分 + # sleep(60) + if (m2==m1): + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + #方案二===============结束 + # lock.release() + while True: + try: + if chrome.find_element_by_xpath('//p[text()="共享任务创建成功"]').is_displayed() == True: + # print('订单完成了') + break + except: + continue + # sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').click() + # chrome.switch_to.default_content() + # chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(20) + while True: + try: + if chrome.find_element_by_xpath('//span[text()="%s"]'%orderno).is_displayed()==True: + print('//span[text()="%s"]'%orderno) + break + except: + continue + #进入手术配货单 + chrome.switch_to.default_content() + sleep(3) + chrome.find_element_by_xpath('//span[@class="awsui-tabs-icon close"]').click() + sleep(1) + 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('//label[text()="请领单号"]/parent::div/div/div/div/input').send_keys(orderno) + sleep(1) + chrome.find_element_by_xpath('//label[text()="请领单号"]/parent::div/div/div/div/input').send_keys(Keys.ENTER) + sleep(1) + # chrome.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + sleep(1) + # text1 = chrome.find_element_by_xpath('(//span[text()="QLD23082800037B"])[2]').text + # print(text1) + chrome.find_element_by_xpath('//span[text()="%s"]//parent::div/parent::td//preceding-sibling::td[1]/div/span'%orderno).click() + # element = chrome.find_element_by_xpath('(//span[@class="vxe-checkbox--icon vxe-checkbox--unchecked-icon"])[2]') + # chrome.execute_script("arguments[0].click();", element) + sleep(1) + chrome.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + sleep(1) + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + while True: + try: + if chrome.find_element_by_xpath('//p[text()="流程结束"]').is_displayed() == True: + # print('订单完成了') + break + except: + continue + # chrome.find_element_by_xpath('//span[text()="批量提交"]').click() + sleep(1) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]/span[text()="确定"]').click() + print('手术请领单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+str(end - start) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + +def start1(): + count = 5 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\347\273\217\351\224\200\345\224\256\350\246\201\350\264\247\351\205\215\350\264\247.py" "b/testcase/od/\347\273\217\351\224\200\345\224\256\350\246\201\350\264\247\351\205\215\350\264\247.py" new file mode 100644 index 0000000..f784c97 --- /dev/null +++ "b/testcase/od/\347\273\217\351\224\200\345\224\256\350\246\201\350\264\247\351\205\215\350\264\247.py" @@ -0,0 +1,359 @@ +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 selenium.webdriver.support.select import Select + +from mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) +#配货函数 +def match_goods(chrome,orderno,type): + chrome.switch_to.default_content() + sleep(1) + element=chrome.find_element_by_xpath('//span[@class="awsui-tabs-icon close"]') + chrome.execute_script("arguments[0].click();", element) + sleep(1) + 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.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + sleep(2) + # chrome.find_element_by_class_name('select2-selection select2-selection--single').click() + # chrome.execute_script("document.getElementById('select2-purchasingCoOptSelect-container').click()") + # element = chrome.find_element_by_xpath('//b[@role="presentation"]') + # chrome.execute_script("arguments[0].click();", element) + s = Select(chrome.find_element_by_id('purchasingCoOptSelect')) + s.select_by_index(0) + sleep(2) + # chrome.find_element_by_xpath('//li[text()="北京大学第三医院(3)"]').click() + # sleep(1) + chrome.find_element_by_xpath('//span[text()="%s"]'%orderno).click() + sleep(4) + # 点击自动填充按钮 + chrome.find_element_by_xpath('//button[text()="自动填充"]').click() + # sleep(6) + while True: + try: + chrome.find_element_by_xpath('//button[text()="提交"]').click() + break + except: + continue + sleep(2) + # chrome.find_element_by_xpath('//a[text()="确认"]').click() + sleep(1) + + # 方案一============================开始 + if type == 1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + start = time.clock() + print('提交订单开始时间', start) + chrome.find_element_by_xpath('//a[text()="确认"]').click() + break + # 方案一============================结束 + # 方案二===============开始 + if type == 2: + m = get_time_m() # 当前时间的分钟 + m1 = get_submit_time(m) # 计划提交时间的分钟 + print('销售订单计划提交时间的分钟', m1) + while True: + m2 = get_time_m() # 循环获取当前的分 + # sleep(30) + if (m2 == m1): + start = time.clock() + chrome.find_element_by_xpath('//a[text()="确认"]').click() + break + # 方案二===============结束 + while True: + try: + if chrome.find_element_by_xpath('//div[text()="提交成功"]').is_displayed() == True: + # print('订单完成了') + break + # else: + # print('共享任务创建成功的元素没有出现') + except: + continue + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + return str(end - start) +def create_salesorder(type=1): + try: + import time + pro_path = get_pro_path() + start = time.clock() + print('开始时间',start) + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + # chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + #切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + 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(4) + 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")]')) + # 获取订单号 + + orderno = chrome.find_element_by_xpath('//div[text() = "要货申请单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(4) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + print(chrome.find_element_by_xpath('//div[text()="要货申请单号 "]').text) + + + sleep(2) + #客户名称 + 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('北京大学') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:客户编码,客户名称,收货地址,产品线名称,产品线编码"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + + chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + + #详细信息 + 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('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="012001f8d35054875d6157d4715404319"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').click() + sleep(1) + + #业务员名称 + 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('chenshuheng') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,部门编码,部门类型编码"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//div[text()="chenshuheng"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[3]').click() + # #其他信息页签 + # chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + # chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,采购计量单位,销售计量单位,生产厂家编码"]').send_keys( + '10006179') + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,采购计量单位,销售计量单位,生产厂家编码"]').send_keys( + Keys.ENTER) + sleep(1) + chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[4]').click() + sleep(2) + element=chrome.find_element_by_xpath('//td[@colid="col_93"]') + element.click() + sleep(2) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # chrome.find_element_by_xpath('//td[@colid="col_177"]/div/div').send_keys('1') + sleep(1) + chrome.find_element_by_xpath('//td[@colid="col_94"]').click() + sleep(4) + # #滚动条右拉 + # # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + # chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + # element = chrome.find_element_by_xpath('//td[@colid="col_197"]') + # element.click() + # sleep(2) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # element = chrome.find_element_by_xpath('//td[@colid="col_198"]') + # element.click() + # sleep(2) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # lock = threading.Lock() + # lock.acquire() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + + while True: + try: + if chrome.find_element_by_xpath('//p[text()="共享任务创建成功"]').is_displayed()==True: + # print('订单完成了') + break + # else: + # print('共享任务创建成功的元素没有出现') + except: + continue + # lock.release() + # sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini awsui-button awsui-button--primary"]//span[text()="确定"]').click() + # chrome.switch_to.default_content() + # chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(20) + # while True: + # try: + # if chrome.find_element_by_xpath('//span[text()="%s"]' % orderno).is_displayed() == True: + # print('//span[text()="%s"]' % orderno) + # break + # except: + # continue + while True: + try: + # if chrome.find_element_by_xpath('(//span[text()="%s"])[2]'%orderno).is_displayed()==True: + if chrome.find_element_by_xpath( + '//span[text() = "1"]/ancestor-or-self::td/following-sibling::td/div/span').is_displayed() == True: + # print('aaaaaaaaaaaaaaaaaaaaaaaa', chrome.find_element_by_xpath( + # '//span[text() = "1"]/ancestor-or-self::td/following-sibling::td/div/span').text) + break + except: + continue + print('经销售要货申请单创建完成') + #审批 + chrome.switch_to.default_content() + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + sleep(2) + chrome.find_element_by_xpath( + '//span[text() = "%s"]'%orderno).click() + chrome.switch_to.frame(chrome.find_element_by_xpath('//iframe[contains(@name,"awsui-dialog-iframe")]')) + + chrome.find_element_by_xpath('//span[text()="审核通过"]').click() + sleep(1) + chrome.find_element_by_xpath('//textarea[@placeholder="意见留言"]').send_keys('3333') + sleep(1) + chrome.find_element_by_xpath('//span[text()="发送"]').click() + while True: + try: + if chrome.find_element_by_xpath('//p[text()="共享任务创建成功"]').is_displayed() == True: + # print('订单完成了') + break + # else: + # print('共享任务创建成功的元素没有出现') + except: + continue + time1=match_goods(chrome, orderno,type) + # end = time.clock() + # print(start, end) + print('CPU执行时间: ', time1) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+str(time1) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + +def start1(): + count = 1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\350\260\203\346\213\250\345\207\272\345\272\223\345\215\225.py" "b/testcase/od/\350\260\203\346\213\250\345\207\272\345\272\223\345\215\225.py" new file mode 100644 index 0000000..1346df1 --- /dev/null +++ "b/testcase/od/\350\260\203\346\213\250\345\207\272\345\272\223\345\215\225.py" @@ -0,0 +1,286 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder1(1) + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) + + +def create_salesorder1(type=2): + import time + start = time.clock() + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + # chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + # 切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + allot_link = chrome.find_element_by_xpath('//span[text()="调拨出库单"]') + chrome.execute_script("arguments[0].click();", allot_link) + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + sleep(4) + 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")]')) + #获取调拨出库单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "调拨出库订单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(4) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + print(chrome.find_element_by_xpath('//div[text()="公司名称 "]').text) + + + sleep(2) + 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('国药集团北京') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + sleep(2) + chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + + chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys('北京强生非') + # chrome.find_element_by_xpath('//input[@placeholder="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys(Keys.ENTER) + # # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + # btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]') + # chrome.execute_script("arguments[0].click();", btn_div) + # chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').click() + # 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"])[4]').click() + #业务员名称 + sleep(1) + 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('杨春刚') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,部门名称,部门编码,部门类型"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[2]').click() + #仓库信息页签 + 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="模糊检索:调拨出库仓库名称,调拨出库仓库编码,是否WMS仓"]').send_keys('北京强生非') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:调拨出库仓库名称,调拨出库仓库编码,是否WMS仓"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="08374712eb9413253c6281062de2ab877"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//span[@class="ensureBtn"])[3]/button').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="模糊检索:调拨入库仓库名称,调拨入库仓库编码,是否WMS"]').send_keys('北京公司-宁波仓') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:调拨入库仓库名称,调拨入库仓库编码,是否WMS"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div = chrome.find_element_by_xpath('//span/input[@type="radio" and @value="0e455e227177d35f275908320e3e32fe9"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//span[@class="ensureBtn"])[4]/button').click() + + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品全称,规格型号,主计量单位,采购计量单位,厂家物料编码,存储条件,存储条件说明,生产企业编码,行类型,件包数,产品备注,产品描述,商品性质,是否免备案"]').send_keys( + '10006179') + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品全称,规格型号,主计量单位,采购计量单位,厂家物料编码,存储条件,存储条件说明,生产企业编码,行类型,件包数,产品备注,产品描述,商品性质,是否免备案"]').send_keys( + Keys.ENTER) + sleep(1) + chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(3) + element=chrome.find_element_by_xpath('//td[@colid="col_108"]') + element.click() + sleep(3) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + sleep(4) + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + # element = chrome.find_element_by_xpath('//td[@colid="col_197"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # element = chrome.find_element_by_xpath('//td[@colid="col_198"]') + # element.click() + # sleep(6) + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + # sleep(2) + # lock = threading.Lock() + # lock.acquire() + #方案一============================开始 + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + print('调拨计划提交时间',m1) + while True: + m2=get_time_m() #循环获取当前的分 + # sleep(30) + if (m2==m1): + start = time.clock() + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + #方案二===============结束 + while True: + try: + if chrome.find_element_by_xpath('//p[text()="共享任务创建成功"]').is_displayed() == True: + # print('订单完成了') + break + except: + continue + # lock.release() + # sleep(5) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini awsui-button awsui-button--primary"]//span[text()="确定"]').click() + chrome.switch_to.default_content() + chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(20) + while True: + try: + if chrome.find_element_by_xpath('(//span[text()="%s"])[2]'%orderno).is_displayed()==True: + print('//span[text()="%s"]'%orderno) + break + except: + continue + print('调拨出库单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + time1=end - start + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+',耗时'+str(time1) + now = get_time() + pro_path = get_pro_path() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + pro_path = get_pro_path() + + try: + for i in range(1): + t = threading.Thread(target=job) + t.start() + # t.join() + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + # imgInfo = getErrorPhoto(chrome) + # imgName = imgInfo[0] + # image_path = imgInfo[1] + # print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) + + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git "a/testcase/od/\351\224\200\345\224\256\350\256\242\345\215\225.py" "b/testcase/od/\351\224\200\345\224\256\350\256\242\345\215\225.py" new file mode 100644 index 0000000..49562d3 --- /dev/null +++ "b/testcase/od/\351\224\200\345\224\256\350\256\242\345\215\225.py" @@ -0,0 +1,281 @@ +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 mail1 import send_email1 +from public.tools import * + + + + +# chrome = webdriver.Chrome(chrome_options=opt) + +def job(): + print("这是一个需要执行的任务。。。。。") + create_salesorder() + print("当前线程的个数:", threading.active_count()) + time.sleep(1) + print("当前线程的信息:", threading.current_thread()) + + +def create_salesorder(type=1,username="admin",password="Gyxc1234"): + try: + import time + pro_path = get_pro_path() + start = time.clock() + print('开始时间',start) + # caps = DesiredCapabilities().CHROME + # caps["pageLoadStrategy"] = "normal" # complete + # caps["pageLoadStrategy"] = "eager" # interactive + # caps["pageLoadStrategy"] = "none" + # chrome = webdriver.Chrome(desired_capabilities=caps) + opt = ChromeOptions() # 创建 Chrome 参数对象 + # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + opt.add_argument('--start-maximized') + opt.add_argument('--window-size=1280x1024') + # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) + chrome = WebChrome(chrome_options=opt) + # chrome=webdriver.Chrome() + chrome.implicitly_wait(20) + chrome.get("http://10.17.65.200:8088/portal/") + # chrome.get("http://10.17.65.207:8088/uat/r/w") + sleep(2) + chrome.implicitly_wait(30) + # chrome.maximize_window() + chrome.find_element_by_id('input1').clear() + chrome.find_element_by_id('input1').send_keys('admin') + chrome.find_element_by_id('input2').clear() + chrome.find_element_by_id('input2').send_keys('Gyxc1234') + 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 + #切换所属公司 + chrome.find_element_by_class_name('changeCom').click() + sleep(1) + chrome.find_element_by_xpath('//span[text()="国药集团北京医疗器械有限公司"]/following-sibling::button').click() + sleep(1) + chrome.find_element_by_xpath('// button[text() = "确定"]').click() + sleep(1) + # chrome.find_element_by_xpath('//div[text()="销售管理"]').click() + # actions = ActionChains(chrome) + # actions.move_to_element(chrome.find_element_by_xpath('//div[text()="销售业务"]')).perform() + # chrome.find_element_by_xpath('//span[text()="销售订单"]').click() + 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(4) + 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")]')) + #获取订单号 + + orderno=chrome.find_element_by_xpath('//div[text() = "销售订单号 "]/following-sibling::div/span').text + print(orderno) + # chrome.switch_to.default_content() + sleep(4) + # while True: + # try: + # if chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').is_displayed(): + # print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + # break + # except: + # continue + print(chrome.find_element_by_xpath('//div[text()="订单公司名称 "]').text) + + + sleep(2) + 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('国药集团北京') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:公司名称,公司编码"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//span[@class="el-radio__inner"])[1]').click() + + chrome.find_element_by_xpath('//span[@class="ensureBtn"]/button').click() + chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini"]').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="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys('北京强生非') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:仓库编码,仓库名称,是否传WMS,所属公司名称"]').send_keys(Keys.ENTER) + # chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]').click() + btn_div= chrome.find_element_by_xpath('//span/input[@type="radio" and @value="03105272b49986351ef7eb2930b5454de"]') + chrome.execute_script("arguments[0].click();", btn_div) + chrome.find_element_by_xpath('(//button[@class="el-button el-button--primary el-button--default"])[3]').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"])[4]').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('杨春刚') + chrome.find_element_by_xpath('//input[@placeholder="模糊检索:业务员名称,业务员编码,业务部门名称,业务部门编码,部门类型编码"]').send_keys(Keys.ENTER) + chrome.find_element_by_xpath('(//div[text()="杨春刚"])[3]/ancestor-or-self::td/preceding-sibling::td/div/label/span/span').click() + chrome.find_element_by_xpath('(//span[@class="ensureBtn"]/button[1])[4]').click() + #其他信息页签 + chrome.find_element_by_xpath('//div[text()="其他信息"]').click() + chrome.find_element_by_xpath('//div[@cid="AWSUI.SwitchButton"]//div/div/div/div/span[1]').click() + # 子表信息录入 + chrome.find_element_by_xpath('//div[text()="主体信息"]').click() + chrome.find_element_by_xpath('//span[text()="添加商品"]').click() + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + '10006179') + chrome.find_element_by_xpath( + '//input[@placeholder="模糊检索:商品编码,商品名称,规格型号,主计量单位,销售计量单位,厂家物料编码,存储条件说明,生产企业编码,供应商编码,行类型,商品性质,批发价,进口/国产/港澳台,件包数,产品备注,是否免备案,产品描述"]').send_keys( + Keys.ENTER) + sleep(1) + chrome.find_element_by_xpath('(//span[@class="el-checkbox__inner"])[4]').click() + chrome.find_element_by_xpath('(//div[@class="el-dialog__body"]/div[2]/span/button[1]/span)[5]').click() + sleep(2) + element=chrome.find_element_by_xpath('//td[@colid="col_177"]') + element.click() + sleep(2) + # element.send_keys("1") + # chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='1'") + chrome.find_element_by_class_name('awsui-input-number-right').send_keys('1') + # chrome.find_element_by_xpath('//td[@colid="col_177"]/div/div').send_keys('1') + sleep(1) + chrome.find_element_by_xpath('//td[@colid="col_178"]').click() + sleep(4) + #滚动条右拉 + # document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 5000 + chrome.execute_script("document.getElementsByClassName('vxe-table--footer-wrapper body--wrapper')[0].scrollLeft = 2000"); + element = chrome.find_element_by_xpath('//td[@colid="col_197"]') + element.click() + sleep(2) + chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + sleep(2) + element = chrome.find_element_by_xpath('//td[@colid="col_198"]') + element.click() + sleep(2) + chrome.execute_script("document.getElementsByClassName('awsui-input-number-right')[0].value='8'") + sleep(2) + # lock = threading.Lock() + # lock.acquire() + #方案一============================开始 + if type==1: + import datetime + now = datetime.datetime.now() + one_minutes_later = now + datetime.timedelta(minutes=1) + now = now.strftime('%Y-%m-%d %H:%M') + one_minutes_later = one_minutes_later.strftime('%Y-%m-%d %H:%M') + # print('bbbbbbbb'+one_minutes_later) + while True: + now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') + # print('变化的时间' + now) + if now == one_minutes_later: + print('时间到了') + start = time.clock() + print('提交订单开始时间',start) + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + # 方案一============================结束 + #方案二===============开始 + if type==2: + m=get_time_m() #当前时间的分钟 + m1=get_submit_time(m)#计划提交时间的分钟 + print('销售订单计划提交时间的分钟',m1) + while True: + m2=get_time_m() #循环获取当前的分 + # sleep(30) + if (m2==m1): + chrome.find_element_by_xpath('//span[text()="提交"]').click() + break + #方案二===============结束 + # lock.release() + sleep(2) + # chrome.find_element_by_xpath('//button[@class="el-button el-button--primary el-button--mini awsui-button awsui-button--primary"]//span[text()="确定"]').click() + # chrome.switch_to.default_content() + # chrome.switch_to.frame(chrome.find_element_by_xpath('(//iframe[@class="metro-main-frame"])[2]')) + # sleep(20) + # while True: + # try: + # if chrome.find_element_by_xpath('//span[text()="%s"]' % orderno).is_displayed() == True: + # print('//span[text()="%s"]' % orderno) + # break + # except: + # continue + while True: + try: + # if chrome.find_element_by_xpath('(//span[text()="%s"])[2]'%orderno).is_displayed()==True: + if chrome.find_element_by_xpath( + '//span[text() = "1"]/ancestor-or-self::td/following-sibling::td/div/span').is_displayed() == True: + print('aaaaaaaaaaaaaaaaaaaaaaaa', chrome.find_element_by_xpath( + '//span[text() = "1"]/ancestor-or-self::td/following-sibling::td/div/span').text) + break + except: + continue + print('销售订单创建完成') + end = time.clock() + print(start, end) + print('CPU执行时间: ', end - start) + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + info=orderno+'执行耗时'+str(end - start) + now = get_time() + writeFile_append(pro_path + '/logs/catalina.out', info) + send_email1(image_path, info) + except Exception as e: + print('出现异常') + # 将日志写入到文件中单独存储 + pro_path = get_pro_path() + traceback.print_exc() + imgInfo = getErrorPhoto(chrome) + imgName = imgInfo[0] + image_path = imgInfo[1] + print(imgName, image_path) + print(repr(e)) + info = repr(e) + now = get_time() + writeFile_append(pro_path + '/logs/logerror%s.txt' % now, info) + # send_email1(image_path, info) +if __name__ == "__main__": + # 创建多线程时, 需要制定该线程执行的任务.name线程名字 target目标函数名 + # t1 = threading.Thread(target=job,name="job1") + # t2 = threading.Thread(target=job,name="job2") + # t1.start() + # t2.start() + # opt = ChromeOptions() # 创建 Chrome 参数对象 + # # opt.headless = True # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.headless = False # 把 Chrome 设置成无界面模式,windows/Linux 皆可 + # opt.add_argument('--start-maximized') + # opt.add_argument('--window-size=1280x1024') + # # chrome = Chrome(options=opt) # 创建无界面对象 + # chrome = WebChrome(chrome_options=opt) # airtest中的类 + + count=1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + +def start1(): + count = 1 + for i in range(count): + t = threading.Thread(target=job) + t.start() + t.join() + + # print(threading.active_count()) + # print("程序执行结束.....") + # create_salesorder() diff --git a/testcase/test_scene1/__init__.py b/testcase/test_scene1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/testcase/test_scene1/scene1_mainflow.py b/testcase/test_scene1/scene1_mainflow.py new file mode 100644 index 0000000..d17c5da --- /dev/null +++ b/testcase/test_scene1/scene1_mainflow.py @@ -0,0 +1,101 @@ +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 -- GitLab