• 自动添加菜品,加入运行中遇到的异常,生成日志文件...<工作中场景...>


    很弱智的小脚本,记录下。也许以后看到会笑,因为太幼稚或者证明曾经也努力过。so...

    这次厉害了,厉害了....

    from selenium import webdriver
    # 导入封装的Logger
    from com.learn_logging.logs_test import Logger
    # 显示等待
    from selenium.webdriver.support.wait import WebDriverWait
    # 鼠标事件
    from selenium.webdriver.common.action_chains import ActionChains
    # 生成随机数字
    import random
    # 所有异常类
    from selenium.common.exceptions import *
    # 键盘模块
    from selenium.webdriver.common.keys import Keys
    import time
    
     
    
    from selenium import webdriver
    # 导入日志模块
    from com.learn_logging.logs_test import Logger
    #显示等待
    from selenium.webdriver.support.wait import WebDriverWait
    # 鼠标事件
    from selenium.webdriver.common.action_chains import ActionChains
    # 随机价格
    import random
    # 所有异常
    from selenium.common.exceptions import *
    # 键盘模块
    from selenium.webdriver.common.keys import Keys
    import time
    
    
    class Item:
        def __init__(self):
            # 初始化browser
            self.browser = webdriver.Chrome()
            self.url = 'http://xxxxxxxxxxx/login.jsp'
            self.browser.get(self.url)
            self.browser.implicitly_wait(10)
            self.browser.maximize_window()
    
        def Clear(self):
            # 清空输入框
            self.browser.find_element_by_id('tenentid').clear()
            self.browser.find_element_by_id('loginUserName').clear()
            self.browser.find_element_by_id('password').clear()
    
        def Loggin(self, tenant, username, password):
            # 参数化商户号、用户名、密码
            self.browser.find_element_by_id('tenentid').send_keys(tenant)
            self.browser.find_element_by_id('loginUserName').send_keys(username)
            self.browser.find_element_by_id('password').send_keys(password)
            self.browser.find_element_by_id('login').click()
    
        def Check(self):
            # 检查登录是否成功
            t = WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
                "//ul[@id='first_nav']/a[2]").get_attribute('text').strip())
            if t == '源数据管理':
                Logger().log().info('登录成功^_^')
            else:
                Logger().log().info('登录失败T_T')
    
        def Go_item(self):
            # 点击源数据管理
            WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
                "//ul[@id='first_nav']/a[2]/span")).click()
            # 点击运营资料设置
            WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
                "//div[@id='_f2001']/a/span/span")).click()
            # 鼠标事件,调用封装函数
            self.Find_element(time.time())
    
        def Random_add_item(self):
            # 切换iframe
            self.browser.switch_to_frame('iframe2167')
            WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
                "//ul[@id='menu_tree']/li/ul/li/ul/li/div/span[5]")).click()
            WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
                "//*[@id='_add']/span/span[1]")).click()
            try:
                file_name = 'item_names.txt'
                with open(file_name, encoding='gbk') as f_obj:
                    for date in f_obj:
                        price = random.randint(1, 10)
                        date = date.strip()
                        # 菜品名称
                        n = WebDriverWait(self.browser, 10, 1).until(lambda x:x.find_element_by_xpath(
                            "//*[@id='ff']/table/tbody/tr[1]/td[6]/span/textarea"))
                        n.clear()
                        n.send_keys(Keys.BACKSPACE)
                        n.send_keys(date)
                        # 菜品价格
                        WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
                            "//*[@id='tt123']/div[1]/div[3]/ul/li[2]/a/span[1]")).click()
                        # 判断是否已经存在菜品价格数据
                        price_type = self.browser.find_element_by_xpath('//*[@id="datagrid-row-r4-2-0"]/td[7]/div').text
                        if price_type == '有效':
                            # 编辑 //*[@id="datagrid-row-r4-2-0"]/td[7]/div
                            WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
                                "//*[@id='datagrid-row-r4-2-0']/td[3]/div/div/span[1]")).click()
                            self.browser.find_element_by_xpath(
                                "//*[@id='datagrid-row-r4-2-0']/td[5]/div/table/tbody/tr/td/span/input[1]").clear()
                            WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
                                "//*[@id='datagrid-row-r4-2-0']/td[4]/div/table/tbody/tr/td/span/input[1]")).send_keys('')
                            self.browser.find_element_by_xpath(
                                "//*[@id='datagrid-row-r4-2-0']/td[5]/div/table/tbody/tr/td/span/input[1]").send_keys(price)
                        else:
                            # 新增
                            WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
                                "//*[@id='edit_add1']/span/span[1]")).click()
                            WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
                                "//*[@id='datagrid-row-r4-2-0']/td[4]/div/table/tbody/tr/td/span/input[1]")).send_keys('')
                            WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
                                "//*[@id='datagrid-row-r4-2-0']/td[5]/div/table/tbody/tr/td/span/input[1]")).send_keys(price)
                        # 保存价格
                        WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
                                "//*[@id='datagrid-row-r4-2-0']/td[3]/div/div/span")).click()
                        # 保存并继续
                        self.browser.find_element_by_xpath("//*[@id='btn_save_goon']/span/span").click()
                        # 菜品名称已经存在异常提示
                        time.sleep(2)
                        item_name = self.browser.find_element_by_xpath('/html/body/div[26]/div[2]')
                        # y1 = item_name.is_displayed()
                        if item_name.text == '菜品名称已存在!':
                            Logger().log().critical('保存菜品失败,原因:%s' % item_name.text)
                            Logger().log().critical('保存失败的菜品名称是:%s' % date)
                            y1 = item_name.is_displayed()
                            if y1:
                                # 关闭错误提示
                                self.browser.find_element_by_xpath('/html/body/div[26]/div[1]/div[2]/a').click()
                                continue
                            else:
                                continue
                        # 保存成功提示框
                        WebDriverWait(self.browser, 10, 1).until(lambda x: x.find_element_by_xpath(
                                "//*[contains(text(),'确定')]")).click()
            except FileNotFoundError as e:
                Logger().log().critical('文件没有找到%s' % e)
            except UnicodeDecodeError as e:
                Logger().log().critical('Unicode解码错误:%s' % e)
    
        def Find_element(self,starTime):
            # 加入时间判断,避免死循环
            intervalTime = 10
            now = time.time()
            if now - starTime > intervalTime:
                return
            element = self.browser.find_element_by_xpath("//ul[@id='third_nav_a']/li[3]/a/span")
            ActionChains(self.browser).move_to_element(element).perform()
            time.sleep(2)
            element1 = self.browser.find_element_by_xpath("//div[@id='_t2043']/a[3]/span")
            ActionChains(self.browser).move_to_element(element1).perform()
            y = element1.is_displayed()
            Logger().log().info('界面元素是否可见?%s' % y)
            try:
                if y:
                    WebDriverWait(self.browser, 10, 1).until(lambda x:x.find_element_by_xpath(
                        "//div[@id='_t2043']/a[3]/span")).click()
                    # element1.click()
                else:
                    # 回调
                    self.Find_element(starTime)
            except ElementNotVisibleException as e:
                Logger().log().critical('鼠标事件点击失败:%s' % e)
    
        def Quit(self):
            self.browser.quit()
    
        def Run(self):
            self.Clear()
            self.Loggin('xx', 'xx', 'xx')
            self.Check()
            self.Go_item()
            self.Random_add_item()
            self.Quit()
            return self.browser
    
    if __name__ == '__main__':
        Item().Run()


    愿你走出半生,归来仍是少年!
  • 相关阅读:
    值得收藏的146条经典民间偏方[转]
    删除暴风文件夹内的stormliv.exe
    【转】VLAN技术浅谈
    [转载]双击.dsw文件时另开VC6.0,而不会关掉原来已打开的项目的解决办法(转载)
    JVM系列1:Java内存区域
    并发系列3:Lock锁以及核心类AQS
    并发系列1:并发基础知识
    JVM系列2:垃圾收集器与内存分配策略
    JVM系列3:类加载机制
    源码解析之AQS源码解析
  • 原文地址:https://www.cnblogs.com/changqing8023/p/7118713.html
Copyright © 2020-2023  润新知