Esempio n. 1
0
 def __init__(self,driver,page_url=None,page_title=None):
     self.page_url=page_url
     self.page_title=page_title
     self.driver=driver
     self.driver.maximize_window()
     self.driver.implicitly_wait(30)
     self.Test_log=Logger()
Esempio n. 2
0
    def __init__(self):
        self.logger = Logger('/var/log/MediaParse_woker.log', 'debug',
                             'Worker')
        self.logger.debug('Worker init over.')

        self.parser = Parser()
        self.parser.set_parse_tool('/root/MediaParse/_release/bin/ffprobe')

        self.task_queue = Rqueue(name='parse_task')
        self.redis = redis.Redis(host='localhost', port=6379, db=0)
Esempio n. 3
0
class Worker:
    def __init__(self):
        self.logger = Logger('/var/log/MediaParse_woker.log', 'debug',
                             'Worker')
        self.logger.debug('Worker init over.')

        self.parser = Parser()
        self.parser.set_parse_tool('/root/MediaParse/_release/bin/ffprobe')

        self.task_queue = Rqueue(name='parse_task')
        self.redis = redis.Redis(host='localhost', port=6379, db=0)

    def run(self):
        self.logger.debug('Worker run start.')
        while True:
            try:
                # get task
                task = self.get_parse_task()
                self.logger.debug('get task: %s.' % (task))

                if task != None:
                    self.do_parse_task(task)

            except Exception, ex:
                self.logger.error("error:%s" % (ex))

            time.sleep(3)

        self.logger.debug('Worker run over.')
Esempio n. 4
0
 async def count(*args, **kwargs):
     t = time.time()
     start = int(round(t * 1000))
     res = await func(*args, **kwargs)
     t = time.time()
     end = int(round(t * 1000))
     time_length = end - start  #函数消耗时间
     print('length', time_length)
     if max <= 0 or time_length > max:
         log = Logger.get_log(file)
         log.info('function[' + func.__name__ + '],time[' +
                  str(time_length) + ']')
     return res
Esempio n. 5
0
from cali_config import CaliConfig
import socket
import threading
from config.constant import const
from calibration_control import CalibrationControl, CalibrationControlSingleton

# configuration
DEBUG = True
# instantiate the app
app = Flask(__name__)
app.config.from_object(__name__)

# enable CORS
CORS(app, resources={r'/*': {'origins': '*'}}, supports_credentials=True)

logger = Logger('calibration').getlog()


def is_image_file(filename):
    return any(filename.endswith(extension) for extension in
               ['.png', '.jpg', '.jpeg', '.PNG', '.JPG', '.JPEG'])


def check_conf_file(file_path):
    if not os.path.exists(file_path):
        if not os.path.exists(os.path.dirname(file_path)):
            os.mkdir(os.path.dirname(file_path))
        src_file = '/home/wth/fabu/calibration-master_t/conf/fixed_cam_calib.conf'
        shutil.copy(src_file, file_path)

Esempio n. 6
0
# -*- coding: utf-8 -*-

import paramiko
import time
from common.Log import Logger

logger = Logger("OperatorShell").getlog()


class OperatorShell(object):
    def __init__(self, host, port, username, password):
        self._host = host
        self._port = port if port else 22
        self._username = username
        self._password = password
        self._transport = None
        self._sftp = None
        self._channel = None
        self._client = None
        # 等待超时时间
        self.timeout = 360000
        # 连接失败的重试次数
        self.try_times = 3

    def _connect(self):
        while True:
            try:
                self._transport = paramiko.Transport((self._host, self._port))
                # 用户名密码方式
                self._transport.connect(username=self._username,
                                        password=self._password)
Esempio n. 7
0
# -*- coding: utf-8 -*-
# @Time    : 2021/4/12 下午3:28
# @Author  : wth
import os
import subprocess
from ssh.base_command import BaseCommand
from common.Log import Logger
from config.constant import const

logger = Logger('DRSUEnv').getlog()


class DRSUEnv(object):
    def __init__(
        self,
        project_name,
        drsu_id,
        tar_dir,
        root_dir,
        remote_host,
        remote_port,
        remote_path,
        froce,
        username='******',
        password='******',
    ):
        """
        从远端服务器下载标定数据的压缩文件,解压后存放到标定程序文件夹中的指定路径下
        Args:
            project_name:项目名称 e.g:xiaoshan
            drsu_id:drsuid e.g:1
Esempio n. 8
0
@File    : analysis_whole.py
@Author  : 王白熊
@Data    : 2020/11/10 15:30
"""
import glob
import os
import pandas as pd
import time
from common.Log import Logger
import numpy as np
import matplotlib.pyplot as plt
from project.data_analysis.analysis_acu import TrackAcu
from project.data_analysis.analysis_drsu import DrsuScene
from project.data_analysis.constant import const

logger = Logger('analysis_scene').getlog()
plt.rcParams['font.sans-serif'] = ['SimHei']  # 正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
List_style = ['-', '--', '-.', ':']
Listcolors = [
    'red', 'blue', 'green', 'cyan', 'magenta', 'orange', 'darkred', 'black'
]


class AnalysisData():
    def __init__(self, file_path, ort=True):
        if not os.path.exists(file_path):
            raise FileNotFoundError('数据文件夹:%s不存在' % file_path)
        self.file_path = file_path
        self.data = []
        self.index = 0
Esempio n. 9
0
    def __init__(self):
        self.log = Logger.get_log()
        self.logger = self.log.get_logger()

        self.browser = webdriver.Chrome()
Esempio n. 10
0
from common.Log import Logger
from common.configHttp import ConfigHttp
from common.commons import Readkey
import readConfig

red = readConfig.ReadConfig()
http = ConfigHttp()
log = Logger()
logger = log.get_logger()
keys = Readkey()

try:
    value = keys.get_xls('login.xlsx', 'user')
    user_phone = int(value[0][0])
    user_password = int(value[0][1])
    http.set_data(
        data={
            'lang': 'zh-CN',
            'userId': '',
            'token': '',
            'companyId': '',
            'country': '',
            'phone': user_phone,
            'password': user_password
        })
    http.set_url('/sysUser/login')
    ts = http.post().json()
    for key, vl in ts['datas'].items():
        # 写入到配置文件
        red.set_user(str(key), str(vl))
except Exception as e:
Esempio n. 11
0
# -*- coding: utf-8 -*-
"""
@Project : test_code
@File    : temp_test.py
@Author  : 王白熊
@Data    : 2020/12/4 10:18
"""
from ssh.drsu_ssh import DrsuSSHConnection
from common.Log import Logger
import time
import re
import xlwt
import threading
from xlwt import Font, XFStyle

logger = Logger('temperature').getlog()

senior_name = ['camera0', 'camera1', 'radar', 'ai_out']
lock = threading.Lock()


class DrsuSSHConnectionTemp(DrsuSSHConnection):
    # b'20201204 11:19:02.391790[607826]_AI_DATA0:INF:L0180:ai_data_notify_cameradp_msg:ai notify cameradp msg, \x1b[01;31m\x1b[KulAidataNO(0)\x1b[m\x1b[K, CameraFrameCount(43201)\r'
    # 20201204 11:19:02.391790[607826]_AI_DATA0:INF
    # [:8]
    # [9:17]
    # [18: 24]
    # 保证不会出现多个线程对同一个地方写,所以就不加线程锁了
    def __init__(self, drsu_id, is_sim, drc_id, encode='utf-8'):
        DrsuSSHConnection.__init__(
            self,
Esempio n. 12
0
# coding:utf-8
import csv
import pandas as pd
import re
import json
import os
import matplotlib.pyplot as plt
import argparse
import sys
from common.Log import Logger
import time

logger = Logger('csv_').getlog()

ACU_FILE_PATH_ERROR = 0
DRSU_FILE_PATH_ERROR = 1
FLAG = 2

strmatchcell = "HandleAcuVehicleState:vehicle state: "

fresult = open(r'D:\pycharm_ws\clip_csv_data\test\40.csv', 'w')

drsu_data = pd.DataFrame()
drsu_data_new = pd.DataFrame(columns=[
    'ulFrame', 'ulSubFrame', 'dbTimestamp', 'stCenter.dbx', 'stCenter.dby',
    'stCenter.dbz', 'stvelocity.dbx', 'stvelocity.dby', 'stvelocity.dbz',
    'dblength', 'dbwidth', 'dbheight', 'ulLocalDrsuID', 'stObj_type',
    'aulLane', 'acu_db_time_stamp', 'acu_st_coordicate_dbx',
    'acu_st_coordicate_dby', 'acu_st_coordicate_dbz', 'acu_st_line_speed_x',
    'acu_st_line_speed_y', 'acu_st_line_speed_z'
])
Esempio n. 13
0
import time
from selenium.common.exceptions import NoSuchElementException
import os.path
import configparser
from common.Log import Logger
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support import ui
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import win32gui
import win32con
# create a logger instance
logger = Logger("BasePage").getlog()


class BasePage(object):
    """
    定义一个页面基类,让所有页面都继承这个类,封装一些常用的页面操作方法到这个类
    """
    def __init__(self, driver):
        self.driver = driver
        config = configparser.ConfigParser()
        # file_path = os.path.dirname(os.getcwd()) + '/config/config.ini'
        file_path = os.path.dirname(
            os.path.abspath('.')) + '/config/config.ini'
        config.read(file_path)
        # config.read(file_path,encoding='UTF-8'), 如果代码有中文注释,用这个,不然报解码错误
        self.url = config.get("testServer", "URL")

    # quit browser and end testing
Esempio n. 14
0
# @Software: PyCharm

import os
import unittest

import ddt
import requests

requests.packages.urllib3.disable_warnings()
from common.Log import Logger
from common.Encapsulation_Excel import readExcel
from common.write_Excel import copy_Excel
from common.Request_ import send_request

#日志
logger = Logger(logger='testCase').getlog()
#获取old_Excel路径
old_Ex = os.path.dirname(os.getcwd()) + '\The_test_case\interfaceTest.xlsx'
#获取new_Excel路径
new_Ex = os.path.dirname(os.getcwd()) + '\The_test_case\q2.xlsx'
#执行Excel文件
testdata = readExcel(old_Ex).read_dict_data()


@ddt.ddt
class jie(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.s = requests.session()
        logger.info("开始测试")
        copy_Excel(old_Ex, new_Ex)
Esempio n. 15
0
from api_test.base_page.homepage import HomePage
from common.Log import Logger
from selenium.webdriver.support.select import Select

logger = Logger("AcuDevMgrSpecCfgPage").getlog()


# acu设备配置可以同时制定多个设备
# 该页面点击取消或者弹窗告警确认之后会回到AcuDevMgrPage
class AcuDevMgrSpecCfgPage(HomePage):

    # 选择状态上报周期 100 200 500 1000
    def choose_status_report_unit(self, value):
        sel = self.find_element('xpath=>//*[@id="ulPeriodOfSatusRpt"]')
        self.wait(2)
        Select(sel).select_by_value(str(value))

    # 选择告警上报周期 10 30 self.sixty
    def choose_alarm_report_unit(self, value):
        sel = self.find_element('xpath=>//*[@id="ulPeriodOfAlarmRpt"]')
        self.wait(2)
        Select(sel).select_by_value(str(value))

    # 选择车辆信息上报周期 100 200 500 1000
    def choose_car_info_report_unit(self, value):
        sel = self.find_element('xpath=>//*[@id="ulPeriodofInfo"]')
        self.wait(2)
        Select(sel).select_by_value(str(value))

    # 点击取消
    def cancel_click(self):
Esempio n. 16
0
from api_test.base_page.homepage import HomePage
from common.Log import Logger
from selenium.webdriver.support.select import Select

logger = Logger("WorkOrderMgrPage").getlog()


class WorkOrderMgrPage(HomePage):

    # 输入工单编号
    def input_work_order_num(self, num):
        link = 'xpath=>//*[@id="query_WorkOrderNumber"]'
        self.type(link, str(num))

    # 输入工单名称
    def input_work_order_name(self, name):
        link = 'xpath=>//*[@id="query_WorkOrderName"]'
        self.type(link, str(name))

    # 输入工单负责人
    def input_work_order_owner(self, owner):
        link = 'xpath=>//*[@id="query_WorkOrderPrincipal"]'
        self.type(link, str(owner))

    # 输入工单发起人
    def input_work_order_submitter(self, submitter):
        link = 'xpath=>//*[@id="query_WorkOrderInitiator"]'
        self.type(link, str(submitter))

    # 输入开始时间
    def input_start_time(self, time):
Esempio n. 17
0
@Data    : 2020/10/30 15:17
"""

import re
import json
import os
import pandas as pd
import numpy as np
from project.data_analysis.constant import const
from scipy import optimize
from common.Log import Logger
import glob
import time
import re

logger = Logger('AnalysisAcu').getlog()

strmatchcell = "HandleAcuVehicleState:vehicle state: "


def target_func(x, A, B):
    return A * x + B


# ACU轨迹
class TrackAcu(object):
    # ort表示道路是否为x方向
    def __init__(self, file_path, ort=True):
        if not os.path.exists(file_path):
            self.track_type = 0
            index = int(os.path.dirname(file_path)[-2:])
Esempio n. 18
0
from api_test.base_page.homepage import HomePage
from common.Log import Logger


logger = Logger("AcuDevMgrAddPage").getlog()


# 该页面点击取消或者弹窗告警确认之后会回到AcuDevMgrPage
class AcuDevMgrAddPage(HomePage):

    # 填写ACU所属DRC_ID
    def input_drc_id(self, drc_id):
        input_drc_id_link = 'xpath=>//*[@id="drcGlobeId"]'
        self.type(input_drc_id_link, str(drc_id))

    # 填写ACU系统唯一标识
    def input_acu_id(self, acu_id):
        input_acu_id_link = 'xpath=>//*[@id="ulGlobalAcuId"]'
        self.type(input_acu_id_link, str(acu_id))

    # 填写所属发动机号
    def input_engine_no(self, engine_no):
        engine_no_link = 'xpath=>//*[@id="sAcuEngineSerialNum"]'
        self.type(engine_no_link, str(engine_no))

    # 填写所属车牌号
    def input_car_no(self, car_id):
        car_id_link = 'xpath=>//*[@id="sPlateNumber"]'
        self.type(car_id_link, str(car_id))

    # 点击取消
from api_test.base_page.homepage import HomePage
from common.Log import Logger

logger = Logger("AcuDevMgrSpecQryPage").getlog()


# acu设备配置可以同时制定多个设备
# 该页面点击取消或者弹窗告警确认之后会回到AcuDevMgrPage
# 该页面点击设备配置之后会跳到AcuDevMgrSpecCfgPage
class AcuDevMgrSpecQryPage(HomePage):

    # 点击刷新
    # def refresh_click(self):
    #     refresh_link = 'xpath=>/html/body/div[1]/div/div[3]/div[2]/div/div/div/div/div[2]/div[1]/div[2]/button'
    #     # refresh_link = 'name="refresh"'
    #     self.click(refresh_link)

    # 点击全屏
    def full_screen_click(self):
        full_screen_link = 'xpath=>/html/body/div[1]/div/div[3]/div/div/div/div[2]/div/div/div[2]/div[1]/div[' \
                           '2]/div/button '
        self.click(full_screen_link)

    # 点击返回ACU管理
    def return_click(self):
        return_link = 'xpath=>//*[@id="btn_return"]'
        self.click(return_link)

    # 点击设备配置
    def dev_cfg_click(self):
        dev_cfg_link = 'xpath=>//*[@id="btn_config"]'
Esempio n. 20
0
# -*- coding: utf-8 -*-
'''
@Project : test_code
@File    : web_config.py
@Author  : 王白熊
@Data    : 2020/10/13 16:35
'''

from config.base_config import Config
from common.Log import Logger

logger = Logger('Web_Config').getlog()


class Web_Config(Config):
    def __init__(self, config_file='web_config.ini'):
        super().__init__(config_file)

    @property
    def username(self):
        return self.get_value('user', 'username')

    @property
    def password(self):
        return self.get_value('user', 'password')

    @property
    def browserName(self):
        return self.get_value('browserType', 'browserName')

    @property
Esempio n. 21
0
from common.Log import Logger

logger = Logger()
log = logger.get_logger()
logger.error('dddddddddd')
from api_test.base_page.homepage import HomePage
from common.Log import Logger
from selenium.webdriver.support.select import Select

logger = Logger("AlarmHtyMgrPage").getlog()


class AlarmHtyMgrPage(HomePage):

    # 告警码输入
    def input_alarm_no(self, alarm_no):
        input_alarm_no_link = 'xpath=>//*[@id="ulAlarmNo"]'
        self.type(input_alarm_no_link, str(alarm_no))

    # 输入告警处理措施描述
    def input_alarm_description(self, txt):
        input_dev_id_link = 'xpath=>//*[@id="alarmDescriptionTxt"]'
        self.type(input_dev_id_link, str(txt))

    # 点击查询
    def alarm_qry_click(self):
        alarm_qry_link = 'xpath=>//*[@id="btn_query"]'
        self.click(alarm_qry_link)

    def return_click(self):
        link = 'xpath=>//*[@id="btn_return"]'
        self.click(link)

    # 点击刷新
    def refresh_click(self):
        refresh_link = 'xpath=/html/body/div[1]/div[1]/div[3]/div[2]/div/div[2]/div/div/div[2]/div[1]/div[2]/button'
from api_test.base_page.homepage import HomePage
from common.Log import Logger
from selenium.webdriver.support.select import Select

logger = Logger("DrsuVerMgrPage").getlog()


class DrsuVerMgrPage(HomePage):

    # 填入版本名称 后面还有一个输入版本名称 注意不要混淆
    def input_drsu_version_name(self, version_name):
        input_version_link = 'xpath=>//*[@id="Term"]'
        self.type(input_version_link, version_name)

    # 点击查询
    def qry_click(self):
        qry_link = 'xpath=>//*[@id="btn_query"]'
        self.click(qry_link)

    # 选择DRC_ID
    def choose_drc_id(self, drc_id):
        sel = self.find_element('xpath=>//*[@id="drcChoiceListId"]')
        self.wait(1)
        Select(sel).select_by_value('%s' % str(drc_id))

    # 选择DRC_ID
    def choose_drsu_id(self, drc_id):
        sel = self.find_element('xpath=>//*[@id="drsuChoiceListId"]')
        self.wait(1)
        Select(sel).select_by_value('%s' % str(drc_id))
Esempio n. 24
0
# -*- coding: utf-8 -*-
import time
from common.Log import Logger
from ssh.operator_shell import OperatorShell

logger = Logger("BaseCommand").getlog()


class BaseCommand(OperatorShell):
    def __init__(self, host, port, username, password):
        super().__init__(host, port, username, password)

    # 删除文件 使用小心!
    def del_file(self, file_path):
        command = 'rm -rf ' + file_path
        logger.warning('删除文件:%s' % file_path)
        self.exec_command_no_readout(command)

    # 查找指定文件指定字符串
    def query_str(self, file_name, query_str):
        query_command = 'cat ' + file_name + ' | grep ' + query_str
        ret_str = self.exec_command_retstr(query_command)
        logger.debug('输入命令:%s,\r\n 返回值:%s' % (query_command, ret_str))
        return ret_str

    # 判断文件是否存在
    def is_exist_file(self, file_path):
        command = 'ls {} | wc -l'.format(file_path)
        if int(self.exec_command_retstr(command)) != 0:
            return True
        else:
Esempio n. 25
0
# -*- coding: utf-8 -*-
# @Time    : 2021/2/22 下午3:33
# @Author  : wth
import time
from proto import lidar_camera_cross_calibration_config_pb2
from proto import sensor_source_pb2
from google.protobuf import text_format
from google.protobuf.json_format import MessageToJson
from common.Log import Logger

logger = Logger('CaliConfig').getlog()


class CaliConfig(object):
    def __init__(self, src_file, dest_file=None):
        """
        Args:
            src_file: 读取配置文件地址
            dest_file: 保存配置文件地址
        """
        self._conf_file = src_file
        self._save_file = dest_file if dest_file else src_file
        self._config = self._get_conf()

    def _save_conf(self):
        with open(self._save_file, "w+") as f:
            f.write(text_format.MessageToString(self._config))

    # 只对filter的中间结果备份
    def _bk_conf(self, mode, device_id):
        if mode != 'filter':
Esempio n. 26
0
from api_test.base_page.homepage import HomePage
from common.Log import Logger
from selenium.webdriver.support.select import Select

logger = Logger("DrsuDevMgrAllQryPage").getlog()

drsu_sub_dev_para_tup = ('drsu身份识别', '子设备编号', '设备型号', '子设备版本', '数据上报周期',
                         '告警上报周期', '障碍物算法')


# acu设备配置可以同时制定多个设备
# 该页面点击取消或者弹窗告警确认之后会回到AcuDevMgrPage
# 该页面点击设备配置之后会跳到AcuDevMgrSpecCfgPage
class DrsuDevMgrAllQryPage(HomePage):

    # 点击刷新
    # def refresh_click(self):
    #     refresh_link = 'xpath=>/html/body/div[1]/div/div[3]/div[2]/div/div/div/div/div[2]/div[1]/div[2]/button'
    #     # refresh_link = 'name="refresh"'
    #     self.click(refresh_link)

    # 点击全屏
    def full_screen_click(self):
        full_screen_link = 'xpath=>/html/body/div/div/div[3]/div[2]/div/div/div/div/div[2]/div[1]/div[2]/div/button'
        self.click(full_screen_link)

    # 点击返回
    def return_click(self):
        return_link = 'xpath=>//*[@id="btn_config"]'
        self.click(return_link)
Esempio n. 27
0
from testFile.readExcel import readExcel
from common.Log import Logger
logname = Logger.logpath()
log = Logger(logname, level='debug')
login_xls = readExcel.get_xls(xls_name='userCase.xlsx', sheet_name='test')


def signa():

    cls = readExcel().get_xls('userCase.xlsx', 'test')

    str = cls[0]
    print(str.get('case_name'))


if __name__ == '__main__':
    signa()
Esempio n. 28
0
from api_test.base_page.homepage import HomePage
from common.Log import Logger
from selenium.webdriver.support.select import Select

logger = Logger("EventLogPage").getlog()


class EventLogPage(HomePage):

    # 点击刷新
    def refresh_click(self):
        refresh_link = 'xpath=>//*[@id="vueApp"]/div[2]/div/div/div/div/div[1]/div[1]/div[2]/button'
        self.click(refresh_link)

    # 点击搜索
    def search_click(self):
        search_link = 'xpath=>//*[@id="vueApp"]/div[1]/div[2]/div[1]/div/button'
        self.click(search_link)

    # 输入搜索
    def input_search(self, value):
        # //*[@id="vueApp"]/div[2]/div/div/div/div[1]/div[1]/div[3]/input
        link = 'xpath=>//*[@id="vueApp"]/div[2]/div/div/div/div/div[1]/div[1]/div[3]/input'
        self.type(link, str(value))

    # 输入时间范围
    def input_time_frame(self, days):
        # //*[@id="vueApp"]/div[1]/div[2]/div[2]/div/form[1]/div[1]/div/div/input
        link = 'xpath=>//*[@id="vueApp"]/div[1]/div[2]/div[2]/div/form/div[1]/div/div/div/input'
        self.type(link, str(days))
Esempio n. 29
0
from api_test.base_page.homepage import HomePage
from common.Log import Logger
from selenium.webdriver.support.select import Select

logger = Logger("AcuStatMgrPage").getlog()


class AcuStatMgrPage(HomePage):

    # ACU身份标识填写
    def choose_acu_by_id(self, deviceid):
        choose_acu_link = 'xpath=>//*[@id="Term"]'
        self.type(choose_acu_link, str(deviceid))

    # 在线状态选择 'null'全部;'0'上线;'1'下线,默认为全部
    def choose_status(self, value):
        sel = self.find_element('xpath=>//*[@id="LocatfffionDesc"]')
        self.wait(2)
        Select(sel).select_by_value('%s' % str(value))

    # 点击刷新
    def refresh_click(self):
        refresh_link = 'xpath=>/html/body/div[1]/div[1]/div[3]/div[2]/div/div[2]/div/div/div[2]/div[1]/div[2]/button'
        self.click(refresh_link)

    # 点击全屏
    def full_screen_click(self):
        full_screen_link = 'xpath=>/html/body/div[1]/div[1]/div[3]/div[2]/div/div[2]/div/div/div[2]/div[1]/div[' \
                           '2]/div/button '
        self.click(full_screen_link)
Esempio n. 30
0
import os
import time
from selenium.common.exceptions import NoSuchElementException
import os.path
import configparser
from common.Log import Logger
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support import ui
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from common.Log import Logger

logger = Logger('reference_flush').getlog()

class BasePage(object):
    """
    定义一个页面基类,让所有页面都继承这个类,封装一些常用的页面操作方法到这个类
    """

    def __init__(self, driver):
        self.driver = driver

    # quit browser and end testing
    def quit_browser(self):
        self.driver.quit()

    # 浏览器前进操作
    def forward(self):
        self.driver.forward()
        logger.debug("Click forward on current page.")