selenio de prueba automatizado plantillas de código reutilizable Resumen

'' '
Alerta afirmación, dada como sigue:
TypeError:' Alerta 'objeto no es exigible
Análisis:
' Alerta 'no es un objeto Callable alerta no puede ser el significado de una llamada de función, no es una función.
Solución: eliminar los paréntesis después de la alerta.
códigos correctos:
browser.switch_to.alert.accept ()

'''

# - - codificación: UTF-8 - -
de selenio WebDriver importación
de selenium.common.exceptions importar NoSuchElementException
de selenium.common.exceptions importación NoAlertPresentException
importación unittest, tiempo, re

clase AlertDemo (unittest.TestCase):

def is_alert_present(self):
#self.driver.switch_to.alert去掉后面括号
    try: self.driver.switch_to.alert
    except NoAlertPresentException as e: return False
    return True

def close_alert_and_get_its_text(self):
    try:
        alert = self.driver.switch_to.alert
        alert_text = alert.text
        if self.accept_next_alert:
            alert.accept()
        else:
            alert.dismiss()
        return alert_text
    finally: self.accept_next_alert = True

si el nombre == “ principal ”:
unittest.main ()

banco de pruebas, descubre, se da como sigue:
ImportError: Inicio Directorio no es importable: '... / automatización de pruebas funcionales / exec318 /'
Cause Analysis: mismo derecho ruta del directorio
solución: camino paralelo unittest.defaultTestLoader.discover directamente con "./"

unittest Importación
Importación OS
de tiempo de importación strftime
# sys.path.append ( "I ': \\ prueba de funcionamiento Test \ automatización \ exec318 \")
# Nota: El soporte de sintaxis HTMLTestRunner.py python3 Lib coloca en la ruta de python36
de Lib.HTMLTestRunner HTMLTestRunner importación

'' '
Nota: si utiliza @ddt para decorar una clase de casos de prueba, no un solo lote ejecutar algunas pruebas, sólo puede funcionar con toda la clase.
'' '

SI Nombre == " principal ':
# crear un directorio de prueba informe de almacenamiento
del intento:
os.mkdir (' ... / Informe")
la excepción de excepción como E:
Imprimir (E)
# crear un resultado de prueba guardados archivo
html_report_file = open (" ... / informe /register_test_report_%s.html "el strftime% (" % m% D_ el Y% H% m% S% ")," WB ")
# llamada HTMLTestRunner generación de la clase html formato de informe de prueba de funcionamiento
corredor = HTMLTestRunner (corriente = html_report_file, title = "Informe de la prueba",
description = "TestCase de el estado de la carrera")
Suite1 = unittest.defaultTestLoader.discover ( "./", "* testcase.py")
# = Suite1 unittest.TestLoader (). loadTestsFromTestCase (ECShop_BG_Login_TestCase)
# = unittest.defaultTestLoader.discover Suite1 ( "... / TestCase /", "* testcase.py")
Runner.plazo (suite1)
# Runner.run (allTest ())
html_report_file.close ()

'' '
Para leer el archivo CSV de datos
' ''
Importar CSV

clase CSVUtil ():
def init (self, filePath):
self.filePath = filePath

def list_data(self):
    # 读取CSV文件
    value_rows = []
    with open(self.filePath, "r") as f:
        f_csv = csv.reader(f)
        next(f_csv)  # 如果从第2个开始读取数据,则加入该行代码
        for r in f_csv:
            value_rows.append(r)
    return value_rows

si el nombre == “ principal ”:
rutaArchivo = "... / exec318 /添加会员.csv"
data = CSVUtil (rutaArchivo)
de impresión (data.list_data ())

'' '
Elemento de posicionamiento de clase base del módulo
' ''
de importación Por selenium.webdriver.common.by

clase ECShop_FP_BasePage_Locator ():
def init (self):
self.find_logout_link = (By.LINK_TEXT, “退出”)
self.find_login_img = (By.XPATH, "// fuente [@ id = 'ECS_MEMBERZONE'] / a [1] / img ")
self.find_register_img = (By.XPATH,‘// fuente [@ id = 'ECS_MEMBERZONE'] / a [2] / img’)
self.find_username_in_head_txt = (By.XPATH," .//*[@ id = 'ECS_MEMBERZONE'] / font / font ")

'' '
业务逻辑基础类Base_Module
'''
de importación CSV
ECShop_BG_SubPage_Base_Module clase ():
def init (self, conductor):
self.driver = controlador
def switch_to_home_page (auto):
self.driver.switch_to.default_content ()
self.driver retorno

'' '
测试用例基础类
'''
importación unittest
de WebDriver importación selenio
del sueño sobre importación
de selenium.common.exceptions importar NoSuchElementException, NoAlertPresentException
de ECShop_BG_AddUserPage_Module importación ecshop.module.ecshop_bg_adduserpage_module
de ECShop_BG_HeaderPage_Module importación ecshop.module.ecshop_bg_headerpage_module
de ecshop.module .ecshop_bg_homepage_module ECShop_BG_HomePage_Module importación
de importación ECShop_BG_MenuPage_Module ecshop.module.ecshop_bg_menupage_module
de ECShop_BG_UserListPage_Module importación ecshop.module.ecshop_bg_userlistpage_module
de ecshop.module.ecshop_bg_usermessagepage_module ECShop_BG_UserMessagePage_Module importación

MyTestCaseBase clase (de unittest.TestCase):
DEF la Configuración (Ser):
self.driver webdriver.Firefox = ()
# self.driver.implicitly_wait (10)
self.accept_next_alert = True
DEF la tearDown (Ser):
self.driver.quit ()
# elementos de la página para determinar si hay
DEF is_element_present (Ser, cómo, el qué):
el intento:
self.driver.find_element (por = ¿Cómo, valor = el qué)
la excepción NoSuchElementException como E:
return false
retorno verdadera
# juzgar si el cuadro emergente aparece
def is_alert_present ( Ser):
el intento:
self.driver.switch_to.alert
la excepción NoAlertPresentException como e:
return false
retorno verdadera
# cerca de la ventana emergente (el valor por defecto clic en "OK"), y para obtener el texto
def close_alert_and_get_its_text (auto):
Proveedores:
alerta = self.driver.switch_to.alert
alert_text = alert.text
si self.accept_next_alert:
alert.accept ()
otra cosa:
alert.dismiss ()
devuelven alert_text
por último:
self.accept_next_alert = True

# 判断网页标题是否以指定字符串结尾
def is_title_ends_with(self, t):
    return self.driver.title.endswith(t)

# 判断网页标题是否以指定字符串开头
def is_title_starts_with(self, t):
    return self.driver.title.startswith(t)

# 判断网页源代码中是否包含指定字符串
def is_pagesource_contains(self, info):
    return info in self.driver.page_source

def to_user_list_page(self):
    hp = ECShop_BG_HomePage_Module(self.driver)
    self.driver = hp.switch_to_menu()
    menup = ECShop_BG_MenuPage_Module(self.driver)
    self.driver = menup.to_user_list_page()
    hp = ECShop_BG_HomePage_Module(self.driver)
    self.driver = hp.switch_to_main()
    ulp = ECShop_BG_UserListPage_Module(self.driver)
    sleep(3)
    return ulp

def to_add_user_page(self):
    hp=ECShop_BG_HomePage_Module(self.driver)
    self.driver=hp.switch_to_menu()
    menup=ECShop_BG_MenuPage_Module(self.driver)
    self.driver =menup.to_add_user_page()
    hp = ECShop_BG_HomePage_Module(self.driver)
    self.driver = hp.switch_to_main()
    aup=ECShop_BG_AddUserPage_Module(self.driver)
    return aup
def to_user_message_page(self):
    hp=ECShop_BG_HomePage_Module(self.driver)
    self.driver=hp.switch_to_menu()
    menup=ECShop_BG_MenuPage_Module(self.driver)
    self.driver =menup.to_user_message_page()
    hp = ECShop_BG_HomePage_Module(self.driver)
    self.driver = hp.switch_to_main()
    ump = ECShop_BG_UserMessagePage_Module(self.driver)
    return ump

def logout_bg(self):
    self.driver.switch_to.default_content()
    # 退出
    hp = ECShop_BG_HomePage_Module(self.driver)
    self.assertTrue(self.is_element_present(*hp.hp_loc.find_header_frame))
    self.driver=hp.switch_to_header()
    hdp=ECShop_BG_HeaderPage_Module(self.driver)
    self.assertTrue(self.is_element_present(*hdp.hdp_loc.find_logout_link))
    self.driver=hdp.logout()
    return self.driver

'' '
Módulo逻辑运行举例

'''
de exec318.register_locator RegisterLocator importación
de importación exec318.register_read_csv CSVUtil
del sueño sobre importación
de importación WebDriver selenio
RegisterModule clase ():
def init (self, conductor):
self.driver = conductor de
auto. base_url = “https://account.shopex.cn/reg?shopex”
self.loc = RegisterLocator ()

def open(self):
    self.driver.get(self.base_url)

def input_data(self,name,verifycode,mobilecode,pwd,contact):

    # 手机号
    name_input = self.driver.find_element(*self.loc.loc_name)
    name_input.clear()
    name_input.send_keys(name)


    # 验证码
    verifycode_input = self.driver.find_element(*self.loc.loc_verifycode)
    verifycode_input.clear()
    verifycode_input.send_keys(verifycode)


    # 手机号验证码

    self.driver.find_element(*self.loc.loc_mobileCodeBtn).click()

    mobilecode_input = self.driver.find_element(*self.loc.loc_mobilecode)
    mobilecode_input.send_keys(mobilecode)


    # 登录密码
    pwd_input = self.driver.find_element(*self.loc.loc_pwd)
    pwd_input.send_keys(pwd)


    # 联系人姓名
    contact_input = self.driver.find_element(*self.loc.loc_contact)
    contact_input.send_keys(contact)

    sleep(5)


def register(self,name,verifycode,mobilecode,pwd,contact):
    self.input_data(name,verifycode,mobilecode,pwd,contact)
    accept_input = self.driver.find_element(*self.loc.loc_accept)
    accept_input.click()
    register_button = self.driver.find_element(*self.loc.loc_register)
    if register_button.is_enabled():
        print('注册按钮可用')
    return self.driver

def login(self):
    login_a = self.driver.find_element(*self.loc.loc_login)
    login_a.click()

'' '
Ejemplo de ensayo
' ''

Importe el unittest
importación SYS

Una redacción:

sys.path.append ( “D: \ PycharmProjects \ myproject1 \”)

Escrito dos:

sys.path.append ( "...")

sys.path.append ( "... / ...")

Escrito tres:

import os

curPath = os.path.abspath (os.path.dirname ( archivo ))

imprimir ( “curPath =”, curPath)

RootPath = os.path.split (curPath) [0]

imprimir ( “RootPath =”, RootPath)

sys.path.append (RootPath)

rootPath1 = os.path.split (RootPath) [0]

imprimir ( “rootPath1 =”, rootPath1)

sys.path.append (rootPath1)

impresión (sys.path)

de selenio WebDriver importación
de importación MyTestCaseBase ecshop.testcase.ecshop_00_testcase_base
de ECShop_BG_HeaderPage_Module importación ecshop.module.ecshop_bg_headerpage_module
de ecshop.module.ecshop_bg_homepage_module ECShop_BG_HomePage_Module importación
de importación ECShop_BG_LoginPage_Module ecshop.module.ecshop_bg_loginpage_module
de ECShop_BG_SystemInfoPage_Module importación ecshop.module.ecshop_bg_systeminfopage_module
de ecshop.module.ecshop_bg_adduserpage_module ECShop_BG_AddUserPage_Module importación
de ecshop.module.ecshop_bg_menupage_module ECShop_BG_MenuPage_Module importación
de importación ECShop_BG_UserListPage_Module ecshop.module.ecshop_bg_userlistpage_module
de ecshop.module.ecshop_bg_edituserpage_module ECShop_BG_EditUserPage_Module importación
de importación ECShop_FP_LoginPage_Module ecshop.module.ecshop_fp_loginpage_module
de importación ecshop.module.ecshop_fp_systeminfopage_module ECShop_FP_SystemInfoPage_Module
csv importación
de DDT DDT importación, de datos, de desempaquetado
del sueño sobre importación
de importación ECShop_BG_LoginPage_Locator ecshop.locator.ecshop_bg_loginpage_locator
de ecshop.util .read_csv importar CSVUtil

de importación ecshop.util.read_excel ExcelUtil

def getCsvData ():

# Archivo CSV Leer

value_rows = []

con abierta ( "D: \ PycharmProjects \ myproject1 \ ecshop \ datos \ data _ECShop_ fondo para agregar el perfil .csv", "r") como f:

f_csv = csv.reader (f)

siguiente (f_csv) # Si la lectura de datos de inicio de los dos primeros, se añade a la línea de

para r en f_csv:

value_rows.append®

value_rows retorno

getCsvData la Testdata = # ()
# = CSVUtil la Testdata ( "D: \ PycharmProjects \ myproject1 \ ecshop \ data \ datos _ECShop_ fondo para agregar el perfil .csv"). list_data ()
la Testdata = CSVUtil (" ... \ Data \ data _ECShop _ agregar pertenencia entre bastidores .csv ") list_data ().
# = ExcelUtil la Testdata (" D: \ PycharmProjects \ myproject1 \ ecshop \ data \ _ECShop_ datos de fondo para agregar el perfil .xlsx "" fondo para añadir el perfil ") .list_data ()
# testdata = ExcelUtil ( "... \ datos de programa \ datos _ECShop_ fondo para agregar el perfil .xlsx", "fondo para agregar el perfil") .list_data ()
#Print (el Testdata)

@ddt
clase ECShop_BG_AddUser_TestCase (MyTestCaseBase):
@data (* testdata)
@unpack
def test_a_bg_adduser_submit (auto, testdata_id, testcase_id, nombre de usuario, correo electrónico, contraseña, confirm_password,
user_rank, sexo, birthdayYear, birthdayMonth, birthdayDay,
credit_line, MSN, QQ, teléfono1 , phone2, phone3, expected_result_id):
print ( "=")
Print (testdata_id)
de impresión (testcase_id)
de impresión (nombre de usuario)
de impresión (e-mail)
de impresión (contraseña)
de impresión (confirm_password)
de impresión (user_rank)
de impresión (sexo)
de impresión (birthdayYear)
de impresión (birthdayMonth)
de impresión (birthdayDay)
de impresión (MSN)
imprimir (qq)
de impresión (teléfono1)
de impresión (phone2)
de impresión (phone3)
de impresión (expected_result_id)
print ("
= ")
Lp = ECShop_BG_LoginPage_Module (self.driver)
lp.open ()
self.driver = lp.login (‘admin’,‘admin123’,‘’) 0
sueño (2)
si expected_result_id ==‘1’y nombre de usuario no en [ “texto”, “VIP”, “ecshop”]:
ULP = self.to_user_list_page ()
self.driver = ulp.search (nombre de usuario)
ULP = ECShop_BG_UserListPage_Module (self.driver)
sueño (2)
si ulp.is_user_in_result (nombre de usuario ):
ulp.delete_user (nombre de usuario)
self.assertTrue (self.is_alert_present ())
self.close_alert_and_get_its_text ()
AUP = self.to_add_user_page ()
self.driver = aup.add_user_submit (nombre de usuario, correo electrónico, contraseña, confirm_password,
user_rank, sexo, birthdayYear, birthdayMonth, birthdayDay,
credit_line, msn, qq, Phone1, phone2, phone3)
si expected_result_id == “1”:
sip = ECShop_BG_SystemInfoPage_Module (self.driver)
self.assertTrue (self.is_element_present (* sip.sip_loc.find_previous_page_link))
self.assertTrue (auto. is_pagesource_contains ( “会员账号% s已经添加成功.”% nombre de usuario))
sueño (4)
ULP = ECShop_BG_UserListPage_Module (self.driver)
self.assertTrue (self.is_element_present (* ulp.ulp_loc.find_search_button))
self.driver = ULP. buscar (nombre de usuario)
ULP = ECShop_BG_UserListPage_Module (self.driver)
sueño (2)
self.assertTrue (ulp.is_user_in_result (nombre de usuario))
self.driver = ulp.edit_target_user (nombre de usuario)
sueño (2)
PUE = ECShop_BG_EditUserPage_Module (self.driver)
self.assertEqual (nombre de usuario, eup.get_user_name ())
self.assertEqual (correo electrónico, eup.get_email ())
self.assertEqual (user_rank, eup.get_user_rank ())
self.assertEqual (sexo, eup.get_sex ())
auto. assertEqual (birthdayYear, eup.get_birthdayYear ())
self.assertEqual (birthdayMonth, eup.get_birthdayMonth ())
self.assertEqual (birthdayDay, eup.get_birthdayDay ())
self.assertAlmostEqual (float (credit_line), flotador (eup.get_credit_line () ))
self.assertEqual (msn, eup.get_msn ())
self.assertEqual (qq, eup.get_qq ())
self.assertEqual (Phone1, eup.get_phone1 ())
self.assertEqual (phone2, eup.get_phone2 ())
self.assertEqual (phone3, eup.get_phone3 ())
eup.switch_to_home_page ()
self.driver = self.logout_bg ()
# Primer plano para poner a prueba la cuenta
FLP = ECShop_FP_LoginPage_Module (self.driver)
flp.open) (
self.driver = flp.login (nombre de usuario, contraseña)
FSIP = ECShop_FP_SystemInfoPage_Module (self.driver)
self.assertTrue (self.is_element_present (* FSIP. sip_loc.find_logout_link))
msg1 = fsip.get_red_info ()
self.assertEqual ( "Inicio de sesión exitoso", msg1)
fsip.logout_fp ()

    elif expected_result_id=="2":
        self.assertTrue(self.is_alert_present())
        msg2=self.close_alert_and_get_its_text()
        self.assertEqual("- 没有输入用户名。\n",msg2)
        self.assertFalse(self.is_alert_present())
        aup.switch_to_home_page()
        self.logout_bg()
    elif expected_result_id=="3":
        sip = ECShop_BG_SystemInfoPage_Module(self.driver)
        self.assertTrue(self.is_element_present(*sip.sip_loc.find_previous_page_link))
        self.assertTrue(self.is_pagesource_contains("已经存在一个相同的用户名。"))
        sleep(4)
        aup = ECShop_BG_AddUserPage_Module(self.driver)
        self.assertTrue(self.is_element_present(*aup.aup_loc.find_username_input))
        self.assertTrue(aup.is_pw_and_confirm_pw_empty())
        aup.switch_to_home_page()
        self.logout_bg()
    elif expected_result_id=="4":
        self.assertTrue(self.is_alert_present())
        msg4=self.close_alert_and_get_its_text()
        self.assertEqual("- 输入的密码和确认密码不一致。\n",msg4)
        self.assertFalse(self.is_alert_present())
        aup.switch_to_home_page()
        self.logout_bg()
    elif expected_result_id=="5":
        self.assertTrue(self.is_alert_present())
        msg5=self.close_alert_and_get_its_text()
        self.assertEqual("- 没有输入邮件地址或者输入了一个无效的邮件地址。\n",msg5)
        self.assertFalse(self.is_alert_present())
        aup.switch_to_home_page()
        self.logout_bg()
    elif expected_result_id=="6":
        self.assertTrue(self.is_alert_present())
        msg6=self.close_alert_and_get_its_text()
        self.assertEqual("- 没有输入密码。\n- 没有输入确认密码。\n- 输入的密码和确认密码不一致。\n- 输入的密码不能少于六位。\n",msg6)
        self.assertFalse(self.is_alert_present())
        aup.switch_to_home_page()
        self.logout_bg()
    elif expected_result_id=="7":
        self.assertTrue(self.is_alert_present())
        msg7=self.close_alert_and_get_its_text()
        self.assertEqual("- 没有输入确认密码。\n- 输入的密码和确认密码不一致。\n",msg7)
        self.assertFalse(self.is_alert_present())
        aup.switch_to_home_page()
        self.logout_bg()
    elif expected_result_id=="8":
        self.assertTrue(self.is_alert_present())
        msg8=self.close_alert_and_get_its_text()
        self.assertEqual("- 输入的密码不能少于六位。\n",msg8)
        self.assertFalse(self.is_alert_present())
        aup.switch_to_home_page()
        self.logout_bg()
    elif expected_result_id=="9":
        self.assertTrue(self.is_alert_present())
        msg9=self.close_alert_and_get_its_text()
        self.assertEqual("- 没有输入邮件地址或者输入了一个无效的邮件地址。\n- 没有输入用户名。\n- 没有输入密码。\n- 没有输入确认密码。\n- 输入的密码和确认密码不一致。\n- 输入的密码不能少于六位。\n",msg9)
        self.assertFalse(self.is_alert_present())
        aup.switch_to_home_page()
        self.logout_bg()

@data(*testdata)
@unpack
def test_b_bg_adduser_reset(self,testdata_id,testcase_id,username,email,password,confirm_password,
            user_rank,sex,birthdayYear,birthdayMonth,birthdayDay,
             credit_line,msn,qq,phone1,phone2,phone3,expected_result_id):
    print("=============")
    print(testdata_id)
    print(testcase_id)
    print(username)
    print(email)
    print(password)
    print(confirm_password)
    print(user_rank)
    print(sex)
    print(birthdayYear)
    print(birthdayMonth)
    print(birthdayDay)
    print(msn)
    print(qq)
    print(phone1)
    print(phone2)
    print(phone3)
    print(expected_result_id)
    print("=============")
    lp=ECShop_BG_LoginPage_Module(self.driver)
    lp.open()
    self.driver=lp.login("admin","admin123","0")
    sleep(2)
    aup = self.to_add_user_page()
    self.driver = aup.add_user_reset(username, email, password, confirm_password,
                                     user_rank, sex, birthdayYear, birthdayMonth, birthdayDay,
                                      credit_line, msn, qq, phone1, phone2, phone3)
    aup=ECShop_BG_AddUserPage_Module(self.driver)
    self.assertTrue(aup.is_all_reset_to_default())
#
# def to_user_list_page(self):
#     hp = ECShop_BG_HomePage_Module(self.driver)
#     self.driver = hp.switch_to_menu()
#     menup = ECShop_BG_MenuPage_Module(self.driver)
#     self.driver = menup.to_user_list_page()
#     hp = ECShop_BG_HomePage_Module(self.driver)
#     self.driver = hp.switch_to_main()
#     ulp = ECShop_BG_UserListPage_Module(self.driver)
#     sleep(3)
#     return ulp
#
# def to_add_user_page(self):
#     hp=ECShop_BG_HomePage_Module(self.driver)
#     self.driver=hp.switch_to_menu()
#     menup=ECShop_BG_MenuPage_Module(self.driver)
#     self.driver =menup.to_add_user_page()
#     hp = ECShop_BG_HomePage_Module(self.driver)
#     self.driver = hp.switch_to_main()
#     aup=ECShop_BG_AddUserPage_Module(self.driver)
#     return aup
#
# def logout_bg(self):
#     # 退出
#     hp = ECShop_BG_HomePage_Module(self.driver)
#     self.assertTrue(self.is_element_present(*hp.hp_loc.find_header_frame))
#     self.driver=hp.switch_to_header()
#     hdp=ECShop_BG_HeaderPage_Module(self.driver)
#     self.assertTrue(self.is_element_present(*hdp.hdp_loc.find_logout_link))
#     self.driver=hdp.logout()
#     return self.driver

si el nombre == ' principal ':
unittest.main ()

Publicado cuatro artículos originales · ganado elogios 0 · Vistas 88

Supongo que te gusta

Origin blog.csdn.net/weixin_45374509/article/details/104947247
Recomendado
Clasificación