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()
