zoukankan      html  css  js  c++  java
  • webdriver xpath frame alert window

    1、公共接口1

    utils.py

    # -*-encoding:utf-8 -*-
    
    import logging
    import time
    import json
    import traceback
    from datetime import date
    import os
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as ec
    from selenium.webdriver.support.ui import WebDriverWait
    
    
    class Util:
        def __init__(self):
            self.driver = None
            self.timeout = 10
            self.path = self.json_read()
    
        def log(self, level='info', name='testlog'):
    
            """
            定义日志相关内容;
            :return:None;
            """
            logger = logging.getLogger()
            if level.lower().strip() == 'info':
                logger.setLevel(logging.INFO)
            elif level.lower().strip() == 'debug':
                logger.setLevel(logging.DEBUG)
            elif level.lower().strip() == 'error':
                logger.setLevel(logging.ERROR)
            elif level.lower().strip() == 'warn':
                logger.setLevel(logging.WARN)
            else:
                logger.setLevel(logging.INFO)
            timestruct = date.today().strftime('%Y-%m-%d')
            lastname = '{}-{}'.format(timestruct, name)
            filename = os.path.join('../restrant/log/', lastname)
            fh = logging.FileHandler(filename)
            fh.setLevel(logging.DEBUG)  # 输出到file的log等级的开关
            formatter = logging.Formatter("%(asctime)s %(levelname)s :%(message)s")
            fh.setFormatter(formatter)
            logger.addHandler(fh)
            ch = logging.StreamHandler()
            ch.setLevel(logging.DEBUG)  # 输出到file的log等级的开关
            ch.setFormatter(logging.Formatter("%(asctime)s %(levelname)s :%(message)s"))
            logger.addHandler(ch)
    
        def json_read(self):
            """
            读取配置文件中的xpath 相关信息;
            :return:
            """
            with open('xpath.json', 'r') as f:
                return json.load(f)
    
        def wait_frame_change_to(self, driver, locator, timeout=10):
            """
            等待frame出现并进入;
            :param driver:  浏览器驱动;
            :param locator:  tuple(By,value);
            :param timeout: 等待frame 的超时时间,默认10s;
            :return:
            """
            try:
                WebDriverWait(driver, timeout).until(
                    ec.frame_to_be_available_and_switch_to_it(locator))
                logging.info('frame to switch to:{}'.format(locator))
                return True
            except Exception as msg:
                logging.debug(msg)
                logging.debug('switch to frame {} failed'.format(locator))
                logging.error(traceback.format_exc())
                return False
    
        def wait_element_apper(self, driver, locator, timeout=10):
            """
            等待某个元素出现;
            :param driver: 浏览器驱动;
            :param locator: tuple(By,value);
            :param timeout:等元素出现超时时间,默认10s;
            :return:
            """
            try:
                WebDriverWait(driver, timeout).until(
                    ec.presence_of_element_located(locator))
                logging.debug('appear {} failed'.format(locator))
                return True
            except Exception as msg:
                logging.debug(msg)
                logging.debug('wait element:{} failed'.format(locator))
                logging.error(traceback.format_exc())
                return False
    
        def wait_element_apper_and_click(self, driver, locator, timeout=10):
            """
            等待某个元素出现;
            :param driver: 浏览器驱动;
            :param locator: tuple(By,value);
            :param timeout:等元素出现超时时间,默认10s;
            :return:
            """
            try:
                WebDriverWait(driver, timeout).until(
                    ec.presence_of_element_located(locator))
                driver.find_element(locator[0], locator[1]).click()
                logging.debug('wait element:{} appear and click'.format(locator))
    
            except Exception as msg:
                logging.debug(msg)
                logging.debug('wait element: {} and click failed'.format(locator))
                logging.error(traceback.format_exc())
    
        def wait_element_and_ccs(self, driver, locator, value='', timeout=10):
            """
            等待元素出现,将其内容清空并填写内容;
            :param driver: 当前浏览器操作对象;
            :param locator: 元素定位的方法与定位使用的值:(By,value);
            :param value: 设置的元素值;
            :param timeout: 等待元素的超时时间;
            :return:
            """
            try:
                WebDriverWait(driver, timeout).until(
                    ec.presence_of_element_located(locator))
                driver.find_element(locator[0], locator[1]).click()
                driver.find_element(locator[0], locator[1]).clear()
                driver.find_element(locator[0], locator[1]).send_keys(value)
                logging.info('send keys:{}'.format(value))
                logging.debug('find element locator:{} 
     send keys:{}'.format(locator, value))
            except Exception as msg:
                logging.info('find element or send keys error')
                logging.debug(msg)
                logging.error(traceback.format_exc())
    
        def wait_url_is(self, driver, url, timeout=20):
            """
            检查当前的url是否为想要的url;
            :param driver: 操作的浏览器对象;
            :param url: 期望的url 地址;
            :param timeout: 等待的时间;
            :return: True 如果相等,False 不相等或出错;
            """
            try:
                WebDriverWait(driver, timeout=timeout).until(ec.url_to_be(url))
                logging.info('Current url is :{}'.format(driver.current_url))
                return True
            except Exception as msg:
                logging.error(traceback.format_exc())
                logging.info('current url :{} 
     expect url:{}'.format(driver.current_url, url))
                logging.info('{}'.format(msg))
                return False
    
        def open_browser(self, type='ff'):
            """
            打开浏览器;
            :param type: 浏览器类型,ff:firefox,chrome:chrome;chrome 暂时不支持;
            :return: 浏览器对象;
            """
            if type == 'ff':
                logging.info('open browser:{}'.format('firefox'))
                self.driver = webdriver.Firefox()
            else:
                logging.info("can not support {}".format(type))
            return self.driver
    
        def close_browser(self):
            """
            关闭浏览器;
            :return: None;
            """
            try:
                self.driver.close()
                self.driver.quit()
                logging.info('close browser')
            except Exception as msg:
                logging.error(msg)
    
        def login(self, host=None, username='', password=''):
            """
            登录AC;
            :param host: AC的登录地址,如ip 或主机名等;
            :param username: 登录使用的用户名;
            :param password: 登录使用的密码;
            :return: 登录成功返回True,否则返回False;
            """
            if host is None:
                logging.error('host error')
            else:
                self.driver.get("{}{}".format('http://', host))
                self.driver.maximize_window()
    
                self.wait_element_and_ccs(self.driver, (By.NAME, self.path['login']['name_username']), username)
                self.wait_element_and_ccs(self.driver, (By.NAME, self.path['login']['name_password']), password)
                self.wait_element_apper_and_click(self.driver, (By.XPATH, self.path['login']['xp_submit']))
                logging.info('click login button')
                login_result = self.wait_url_is(self.driver, 'http://{}/main.shtml'.format(host))
                logging.info('Login AC {} result: {}'.format(host, login_result))
                return login_result
    
        def enter_ap_system_view(self):
            """
            进入到AP管理页面;
            :return:  进入成功返回True,否则返回False;
            """
            self.wait_frame_change_to(self.driver, (By.XPATH, self.path['frame']['fr_up']))
            self.wait_element_apper_and_click(self.driver, (By.XPATH, self.path['device']['xp_device']))
            self.driver.switch_to.default_content()
            self.wait_frame_change_to(self.driver, (By.XPATH, self.path['frame']['fr_main']))
            logging.info('click link Wide Area AP Management button')
            self.wait_element_apper_and_click(self.driver, (By.XPATH, self.path['device']['xp_waam']))
            get_content = self.driver.find_element_by_xpath(self.path['device']['xp_link_menu_list']).text
            self.driver.switch_to.default_content()
    
            enter_result = True if 'AP List' in get_content else False
            logging.info('Enter Wide Area AP Management:{}'.format(enter_result))
            return enter_result
    
        def alert_confirm_cancel(self, confirm=True):
            """
            对弹窗进行确认或取消,指导所有确认信息消失;
            :param text:
            :return:
            """
            try:
                while ec.alert_is_present()(self.driver):
                    result = ec.alert_is_present()(self.driver)
                    logging.info('tips content:{}'.format(result.text))
                    (result.accept() and logging.info('click confirm')) if confirm else (
                            result.dismiss() and logging.info('click cancel'))
                    time.sleep(2)
            except Exception:
                logging.info('alert window over ')
    
        def get_all_ap_info(self):
            """
            获得当前所有AP的信息列表;
            每行记录为列表的一个元素,元素存储格式为字典;
            :return: AP 信息的列表;
            """
            path = self.path['ap_list']
            self.driver.switch_to.frame('main')
            ele_all = self.driver.find_elements_by_xpath(path['xpath_button_refresh'])
            for ele in ele_all:
                if ele.text == 'Refresh':
                    ele.click()
                    logging.info('click refresh button')
                    break
            time.sleep(5)
            eles = self.driver.find_elements_by_xpath(path['list_xpath'])
    
            if len(eles) != 0:
                begin = path['begin']
                medium = path['medium']
                end = path['end']
                list_ap_info = []
                for index, ele in enumerate(eles):
                    dict_values = {}
                    xpath_ap_serial = "{}{}{}{}{}".format(begin, index + 1, medium, 14,
                                                          end)
                    xpath_ap_version = "{}{}{}{}{}".format(begin, index + 1, medium, 13,
                                                           end)
                    xpath_ap_capwap = "{}{}{}{}{}".format(begin, index + 1, medium, 12,
                                                          end)
                    xpath_ap_users = "{}{}{}{}{}".format(begin, index + 1, medium, 9,
                                                         end)
                    xpath_ap_template = "{}{}{}{}{}".format(begin, index + 1, medium, 7,
                                                            end)
                    xpath_ap_map = "{}{}{}{}{}".format(begin, index + 1, medium, 6,
                                                       end)
                    xpath_ap_mac = "{}{}{}{}{}".format(begin, index + 1, medium, 5,
                                                       end)
                    xpath_ap_ip = "{}{}{}{}{}".format(begin, index + 1, medium, 4,
                                                      end)
                    xpath_ap_name = "{}{}{}{}{}".format(begin, index + 1, medium, 3,
                                                        end)
                    xpath_ap_type = "{}{}{}{}{}".format(begin, index + 1, medium, 2,
                                                        end)
    
                    xpath_ap_state = "{}{}{}{}{}".format(begin, index + 1, medium, 8,
                                                         end)
                    ele_ap_state = self.driver.find_element_by_xpath(xpath_ap_state)
                    ele_ap_type = self.driver.find_element_by_xpath(xpath_ap_type)
                    ele_ap_name = self.driver.find_element_by_xpath(xpath_ap_name)
                    ele_ap_ip = self.driver.find_element_by_xpath(xpath_ap_ip)
                    ele_ap_mac = self.driver.find_element_by_xpath(xpath_ap_mac)
                    ele_ap_map = self.driver.find_element_by_xpath(xpath_ap_map)
                    ele_ap_template = self.driver.find_element_by_xpath(xpath_ap_template)
                    ele_ap_user = self.driver.find_element_by_xpath(xpath_ap_users)
                    ele_ap_capwap = self.driver.find_element_by_xpath(xpath_ap_capwap)
                    ele_ap_version = self.driver.find_element_by_xpath(xpath_ap_version)
                    ele_ap_serial = self.driver.find_element_by_xpath(xpath_ap_serial)
    
                    dict_values['status'] = ele_ap_state.text.strip()
                    dict_values['type'] = ele_ap_type.text
                    dict_values['name'] = ele_ap_name.text
                    dict_values['ip'] = ele_ap_ip.text
                    dict_values['mac'] = ele_ap_mac.text
                    dict_values['map'] = ele_ap_map.text
                    dict_values['template'] = ele_ap_template.text
                    dict_values['users'] = ele_ap_user.text
                    dict_values['capwap'] = ele_ap_capwap.text
                    dict_values['version'] = ele_ap_version.text
                    dict_values['serial'] = ele_ap_serial.text
                    list_ap_info.append(dict_values)
            self.driver.switch_to.default_content()
            return list_ap_info

    2、查找元素使用方法

    xpath.json
    {
      "login": {
        "name_username": "adm_name",
        "name_password": "adm_pwd",
        "xp_submit": "//a[@href='javascript:before_submit(Config);']/img"
      },
      "frame": {
        "fr_up": "//frame[@name='up']",
        "fr_main": "//frame[@name='main']",
        "fr_left": "//frame[@name='left']"
      },
      "device": {
        "xp_device": "//a[@id='EquipmentManagement']",
        "xp_waam": "//table[@class='box']/tbody/tr[2]/td[3]/a",
        "xp_link_menu_list": "//div[@id='top_path' and @name='top_path']"
      },
      "firmware": {
        "xp_fw_bt": "//div[@id='sidebar']//li/a[@id='Firmware']",
        "xp_ftp_ip": "//input[@id='ftp_ip']",
        "xp_ftp_username": "//input[@id='ftp_username']",
        "xp_ftp_password": "//input[@id='ftp_password']",
        "xp_ftp_filename": "//input[@id='ftp_filename']",
        "xp_ftp_apply": "//table[@class='box']//tr//td/a/span[text()='Apply']",
        "xp_auto_upgrade_en": "//table[@class='box']//tr//td/label/input[@name='auto_upgrade' and @value='Disabled']",
        "xp_auto_upgrade_dis": "//table[@class='box']//tr//td/label/input[@name='auto_upgrade' and @value='Enabled']"
      },
      "ap_list": {
        "xpath_label_ap_list": "//div[@id='sidebar']//a[@id='APList']",
        "xpath_radio_device_all": "//form[@id='Config']//tr/th/input[@name='dev_all']",
        "common_xpath": "//form[@id='Config']//table[@id='results']/tbody//tr/td[",
        "xpath_radio_ap_select": "//form[@id='Config']//table[@id='results']/tbody//tr[{}]/td[1]",
        "xpath_bt_reboot": "//form[@id='Config']//table[@class='box']//a/span[text()='Reboot']",
        "xpath_button_refresh": "//table[@class='title']//table[@class='box']//td/a/span",
        "xpath_bt_upgrade": "//table[@class='box']//td/a/span[text()='Upgrade']",
        "xpath_bt_apply_setting": "//table[@class='box']//td/a/span[text()='Apply SetLtings']",
        "list_xpath": "//form[@id='Config']//table[@id='results']/tbody//tr/td[5]",
        "begin": "//form[@id='Config']//table[@id='results']/tbody/tr[",
        "medium": "]/td[",
        "end": "]"
      },
      "upgr_win": {
        "xp_rd_ftp": "//input[@value='ftp']",
        "xp_bt_apply": "//p/a[@id='apply']/img[@name='Image4']"
      }
    }

    3、操作方法

    upgrade.py
    # -*-encoding:utf-8 -*-
    
    import logging
    import time
    import traceback
    
    from selenium.webdriver.common.by import By
    
    from restrant.utils import Util
    
    
    class Upgrade:
        def __init__(self):
            self.util = Util()
            self.browser_type = 'ff'
            self.driver = self.util.open_browser()
            self.timeout = 5
            self.path = self.util.path
    
        def firmware_set(self, ip, username, password, file, auto_upgrade=False):
            """
            对FTP服务器进行配置;
            :param ip: ftp 服务器ip;
            :param username: ftp 用户名;
            :param password: ftp 密码;
            :param file: ftp 文件名’
            :param auto_upgrade: 是否自动升级;
            :return:None;
            """
            self.util.wait_frame_change_to(self.driver, (By.XPATH, self.path['frame']['fr_left']))
            self.driver.find_element_by_xpath(self.path['firmware']['xp_fw_bt']).click()
            self.driver.switch_to.default_content()
            time.sleep(2)
    
            self.util.wait_frame_change_to(self.driver, (By.XPATH, self.path['frame']['fr_main']))
            self.util.wait_element_apper(self.driver, (By.XPATH, self.path['firmware']['xp_ftp_ip']))
    
            ele_ip = self.driver.find_element_by_xpath(self.path['firmware']['xp_ftp_ip'])
            ele_username = self.driver.find_element_by_xpath(self.path['firmware']['xp_ftp_username'])
            ele_password = self.driver.find_element_by_xpath(self.path['firmware']['xp_ftp_password'])
            ele_file = self.driver.find_element_by_xpath(self.path['firmware']['xp_ftp_filename'])
            ele_ip.click()
            ele_ip.clear()
            ele_ip.send_keys(ip)
            logging.info('send ip:{}'.format(ip))
            ele_username.click()
            ele_username.clear()
            ele_username.send_keys(username)
            logging.info('send username:{}'.format(username))
            ele_password.click()
            ele_password.clear()
            ele_password.send_keys(password)
            logging.info('send password:{}'.format(password))
            # 暂时未实现文件上传,使用的时候,请讲升级文件上传到FTP服务器;
            ele_file.click()
            ele_file.clear()
            ele_file.send_keys(file)
            logging.info('set file name:{}'.format(file))
    
            if not auto_upgrade:
                self.driver.find_element_by_xpath(self.path['firmware']['xp_auto_upgrade_en']).click()
            else:
                self.driver.find_element_by_xpath(self.path['firmware']['xp_auto_upgrade_dis']).click()
            logging.info('set auto upgrade:{}'.format(auto_upgrade))
            self.driver.find_element_by_xpath(self.path['firmware']['xp_ftp_apply']).click()
            logging.info('Apply setting')
            self.driver.switch_to.default_content()
    
        def ap_select(self, ap_all=False, type='mac', value=[]):
            """
            选择AP;
            :param ap_all:
            :param type:
            :param value:
            :return:
            """
            self.util.wait_frame_change_to(self.driver, (By.XPATH, self.path['frame']['fr_left']))
            self.util.wait_element_apper_and_click(self.driver, (By.XPATH, self.path['ap_list']['xpath_label_ap_list']))
            self.driver.switch_to.default_content()
            self.util.wait_frame_change_to(self.driver, (By.XPATH, self.path['frame']['fr_main']))
            time.sleep(5)
            result = None
            path = self.path['ap_list']
            if ap_all:
                logging.info('select all ap')
                self.util.wait_element_apper_and_click(self.driver, (By.XPATH, path['xpath_radio_device_all']))
            else:
                if type == 'mac':
                    xpath_value = path['common_xpath'] + "5]"
                    logging.info('select type: mac')
                elif type == 'ip':
                    xpath_value = path['common_xpath'] + "4]"
                    logging.info('select type: ip')
                elif type == 'name':
                    xpath_value = path['common_xpath'] + "3]"
                    logging.info('select type: name')
                else:
                    logging.error('not support')
    
                ele = self.util.wait_element_apper(self.driver, (By.XPATH, xpath_value))
                if ele:
                    count = self.driver.find_elements_by_xpath(xpath_value)
                    for index, ele_value in enumerate(count):
                        logging.info('get current index and value:{} {}'.format(index, ele_value.text))
                        for sub_v in value:
                            if ele_value.text == sub_v:
                                xpath_radio_ap_select = path['xpath_radio_ap_select'].format(index + 1)
                                logging.info('get expect value: {}'.format(sub_v))
                                ele_exp = self.driver.find_element_by_xpath(xpath_radio_ap_select)
                                self.driver.execute_script("arguments[0].scrollIntoView(false);", ele_exp)
                                ele_exp.click()
                                result = True
                                logging.info('Select ap succeed')
                                continue
                else:
                    logging.error('Find element error ,select ap failed')
            self.driver.switch_to.default_content()
            return result
    
        def ap_reboot(self):
            """
            对AP进行重启;
            :return: None;
            """
            path = self.path['ap_list']
            logging.info('click ap reboot button')
            self.driver.find_element_by_xpath(path['xpath_bt_reboot']).click()
            time.sleep(5)
            self.util.alert_confirm_cancel(confirm=True)
            self.driver.switch_to.default_content()
    
        def ap_apply_upgrade(self):
            """
            对AP进行FTP方式升级;
            :return:
            """
    
            logging.info('upgrade method execute')
            self.util.wait_frame_change_to(self.driver, (By.XPATH, self.path['frame']['fr_main']))
            self.util.wait_element_apper_and_click(self.driver, (By.XPATH, self.path['ap_list']['xpath_bt_upgrade']))
            logging.info('click up grade button')
            time.sleep(10)
            app = False
            for win_appear in range(10):
                win_size = len(self.driver.window_handles)
                if win_size > 1:
                    app = True
                    logging.info('window upgrade window appeared')
                    break
                else:
                    logging.info('sleep 1s to wait upgrade window appear')
                    time.sleep(1)
            if app:
                origin_window = self.driver.current_window_handle
                logging.info('origin window:{}'.format(origin_window))
                for win in self.driver.window_handles:
    
                    if origin_window != win:
                        self.driver.switch_to.window(win)
                        logging.info('switch to upgrade window:{}'.format(win))
    
                logging.info('select ftp mode')
                self.util.wait_element_apper_and_click(self.driver, (By.XPATH, self.path['upgr_win']['xp_rd_ftp']))
                logging.info('apply set')
                self.driver.find_element_by_xpath(self.path['upgr_win']['xp_bt_apply']).click()
                self.util.alert_confirm_cancel(True)
                self.driver.switch_to.window(origin_window)
                logging.info('switch to origin window')
                self.driver.switch_to.default_content()
            else:
                logging.info('upgrade  windows not appear')
    
        def get_ap_state_version(self, type='mac', value=[]):
            """
            获取AP的状态与版本号;
            :param type: 获取AP 的方式,mac,ip,name;
            :param value: 获取指定AP的集合;
            :return: AP的状态与版本号的字典,如:{{mac value:state:Online,version:1.0a.021.212}{....}}
            """
            aps_info = self.util.get_all_ap_info()
    
            logging.info('Get all ap info:{}'.format(aps_info))
            get_ap_dict = {}
    
            if len(aps_info) == 0:
                logging.error('get all ap info is none')
            else:
                if type == 'mac':
                    for index, sub_v in enumerate(value):
                        logging.info('get {} ap {} state and version'.format(index + 1, sub_v))
                        find = False
                        for ap_info in aps_info:
                            if sub_v == ap_info['mac']:
                                dict_state_version = {}
                                dict_state_version['state'] = ap_info['status']
                                dict_state_version['version'] = ap_info['version']
                                logging.info(
                                    'get ap mac: {} status and version:{},{}'.format(sub_v, dict_state_version['state'],
                                                                                     dict_state_version['version']))
                                get_ap_dict[sub_v] = dict_state_version
                                find = True
                                break
                        if not find:
                            get_ap_dict[sub_v] = {}
                            logging.info("can't find ap by mac:{}".format(sub_v))
                elif type == 'ip':
                    for index, sub_v in enumerate(value):
                        logging.info('get {} ap {} state and version'.format(index + 1, sub_v))
                        find = False
                        for ap_info in aps_info:
                            if sub_v == ap_info['ip']:
                                dict_state_version = {}
                                dict_state_version['state'] = ap_info['status']
                                dict_state_version['version'] = ap_info['version']
                                logging.info(
                                    'get ap ip: {} status and version:{},{}'.format(sub_v, dict_state_version['state'],
                                                                                    dict_state_version['version']))
                                get_ap_dict[sub_v] = dict_state_version
                                find = True
                                break
                        if not find:
                            get_ap_dict[sub_v] = {}
                            logging.info("can't find ap by ip:{}".format(sub_v))
                elif type == 'name':
                    for index, sub_v in enumerate(value):
                        logging.info('get {} ap {} state and version'.format(index + 1, sub_v))
                        find = False
                        for ap_info in aps_info:
                            if sub_v == ap_info['name']:
                                dict_state_version = {}
                                dict_state_version['state'] = ap_info['status']
                                dict_state_version['version'] = ap_info['version']
                                logging.info(
                                    'get ap name: {} status and version:{},{}'.format(sub_v, dict_state_version['state'],
                                                                                      dict_state_version['version']))
                                get_ap_dict[sub_v] = dict_state_version
                                find = True
                                break
                        if not find:
                            get_ap_dict[sub_v] = {}
                            logging.info("can't find ap by name:{}".format(sub_v))
                else:
                    logging.error('not support type to find ap: {}'.format(type))
            print(get_ap_dict)
            return get_ap_dict
    
        def test_version_and_state(self, type='mac', value=[], state=['Online'], version='1.0a.021.212'):
            """
            统计AP升级成功与失败的个数;
            :param type: 获取AP 的方式,mac,ip,name;
            :param value: 获取指定AP的集合;
            :param state: 可接受的AP状态列表;
            :param version: 指定的AP版本;
            :return: 升级成功与失败次数统计;
            """
            result_version_state = self.get_ap_state_version(type=type, value=value)
            success_count = 0
            failed_count = 0
            if len(result_version_state) == 0 and len(value) == 0:
                logging.info('Get ap state and version information failed')
                return False
            else:
                for k, v in result_version_state.items():
                    if 'state' not in v.keys() and 'version' not in v.keys():
                        failed_count += 1
                        logging.info("ap {} can't find state and version information".format(k))
                    else:
                        if v['state'] in state and v['version'] == version:
                            logging.info('ap {} state and version check success'.format(k))
                            success_count += 1
                        else:
                            logging.info('ap {} state and version check failed'.format(k))
                            failed_count += 1
            logging.info('Test success count:{},failed count:{}'.format(success_count, failed_count))
            return success_count, failed_count
    
        def test_begin(self, ac_host, ac_username, ac_password, ftp_host, ftp_username, ftp_password, ftp_file,
                       auto_upgrade, ap_type, value, ap_state, version, timeout):
            logging.info('Test Begin')
            self.util.login(ac_host, ac_username, ac_password)
            self.util.enter_ap_system_view()
            i = 0
            suc_count = 0
            fai_count = 0
            while True:
                i += 1
                logging.info('{} test begin count:{} {}'.format('*' * 30, i, '*' * 30))
                try:
                    self.firmware_set(ftp_host, ftp_username, ftp_password, ftp_file, auto_upgrade)
                    self.ap_select(ap_all=False, type=ap_type, value=value)
                    self.ap_apply_upgrade()
    
                    time.sleep(5)
    
                    # add begin
                    self.ap_select(ap_all=False, type=ap_type, value=value)
                    self.ap_reboot()
                    # add end
    
                    time.sleep(timeout)
                    success_count, failed_count = self.test_version_and_state(type=ap_type, value=value, state=ap_state,
                                                                              version=version)
                    suc_count += success_count
                    fai_count += failed_count
                    logging.info('Success count:{},failed count:{}'.format(suc_count, fai_count))
                    logging.info('{} test end count:{} {}'.format('*' * 30, i, '*' * 30))
                except Exception as msg:
                    logging.error('Execute error,msg:{}'.format(msg))
                    logging.error(traceback.format_exc())
                finally:
                    self.util.close_browser()
    
    
    if __name__ == '__main__':
        ac_host = '192.168.200.98'
        ac_username = 'admin'
        ac_password = 'Accton123'
    
        ftp_host = '1.1.1.1'
        ftp_username = 'admin'
        ftp_password = 'admin'
        ftp_file = 'aaa.bin'
        auto_upgrade = False
        ap_version = '1.0a.021.212'
    
        set_ap_type = 'ip'
        access_ap_state = ['Online']
        upgrade_time = 180
        set_ap_value = ['192.168.200.120', '192.168.200.67', '192.168.200.88']
    
        logging.basicConfig(level='INFO')
        up = Upgrade()
        up.test_begin(ac_host=ac_host, ac_username=ac_username, ac_password=ac_password, ftp_host=ftp_host,
                      ftp_username=ftp_username, ftp_password=ftp_password, ftp_file=ftp_file, auto_upgrade=auto_upgrade,
                      ap_type=set_ap_type, value=set_ap_value, ap_state=access_ap_state, version=ap_version,
                      timeout=upgrade_time)
    
        # up.util.login(ac_host, ac_username, ac_password)
        # up.util.enter_ap_system_view()
        # up.firmware_set(ftp_host, username=ftp_username, password=ftp_password, file=ftp_file, auto_upgrade=True)
        # # up.ap_select(ap_all=False, type='mac', value=['34:EF:B6:1E:00:F0', '34:EF:B6:1E:12:90', '34:EF:B6:1E:01:50'])
        # up.ap_select(ap_all=False, type='ip', value=['192.168.200.120', '192.168.200.67', '192.168.200.88'])
        # up.ap_apply_upgrade()
        # up.test_version_and_state(type='ip', value=['192.168.200.120', '192.168.200.67', '192.168.200.88', '1.1.1.1'])
  • 相关阅读:
    历史版本xcode的下载
    mac上安装hg
    xcode不能抓帧
    window buffer alignment
    highp 和 mediump
    AFBC mali
    AO composition
    gpu memory wait
    L2 cache//bifrost --- cortex-A55
    效果样式
  • 原文地址:https://www.cnblogs.com/juzib/p/14911622.html
Copyright © 2011-2022 走看看