[5]python+selenium - UI自动框架之重写unittest.TestCase

重写unittest.TestCase 不仅继承了unittest的方法,还丰富不同断言方法,用起来更方便、简单。

import unittest
from common.BSBase import BasePage
from common.log import log
from common.browserDriver import getdriver
from common.publicFunc import *


class BSTestCase(unittest.TestCase, BasePage):

    @classmethod
    def setUpClass(cls):
        """get driver"""
        log.info('[BS]_002:setUpClass')
        cls.driver = ]getdriver()
        if cls.driver is None:
            cls.driver = getdriver()

    def setUp(self):
        log.info('[BS]_002:setUp')

    @classmethod
    def tearDownClass(cls):
        log.info('[BS]_002:tearDownClass')
        PublicDriver().setDriver(cls.driver)

    def __call__(self, *args, **kwargs):
        log.info('[BS]_001:To be run[%s]' % str(self._testMethodName))
        super().__call__(*args, **kwargs)

    def assertTrue(self, expr, msg=None):
        try:
            super().assertTrue(expr, msg)
            log.warning('[BS]_200:pass')
        except AssertionError:
            log.warning('[BS]_555:false is not true %s' % msg)
            raise self.failureException(msg)

    def assertEqual(self, first, second, msg=None):
        try:
            super().assertEqual(first, second, msg)
            log.warning('[BS]_200:pass')
        except AttributeError:
            log.warning('[BS]_555:%s is not equal %s' % (first, second))
            raise self.failureException(msg)

    def assertNotEqual(self, first, second, msg=None):
        try:
            super().assertNotEqual(first, second, msg)
            log.warning('[BS]_200:pass')
        except AttributeError:
            log.warning('[BS]_555:%s is equal %s' % (first, second))
            raise self.failureException(msg)

    def assertIn(self, member, container, msg=None, timeout=5):
        try:
            super().assertIn(member, container, msg)
            log.warning('[BS]_200:pass')
        except AssertionError:
            log.warning('[BS]_555: %s not in %s' % (member, str(container)))
            raise self.failureException(msg)

    def assertNotIn(self, member, container, msg=None, timeout=5):
        try:
            super().assertNotIn(member, container, msg)
            log.warning('[BS]_200:pass')
        except AssertionError:
            log.warning('[BS]_555: %s in %s' % (member, str(container)))
            raise self.failureException(msg)

    def assertIsNotNone(self, obj, msg=None):
        try:
            super().assertIsNotNone(object, msg)
            log.warning('[BS]_200:pass')
        except AssertionError:
            log.warning('[BS]_555: obj{obj} is none'.format(obj=obj))
            raise self.failureException(msg)

    def assertSelected(self, locator):
        result = self.is_element_located_selected(locator)
        self.assertTrue(result)

    def assertElementVisible(self, locator, msg=None):
        """failed if element is not visible"""
        element = self.find_element_visible(locator)
        self.assertIsNotNone(element, msg)

    def assertElementNotVisible(self, locator, msg=None):
        """failed if element is not visible"""
        result = self.find_element_not_visible(locator, 10, 0.1)
        self.assertTrue(result, msg)

    def assert_Element_Text_Equal(self, locator, expect_text, timeout=8):
        """failed if 元素中的文字 != expect_text"""
        # 有问题!只要locator中包含了expect_text,就会判断通过,
        _, current_text = self.wait_until_element_located_contains_text(locator, expect_text, timeout)
        self.assertEqual(expect_text, current_text)

    def assert_Element_Text_Contained(self, locator, expect_text, msg=None, timeout=6, interval=0.5):
        """
        获取元素的text,比较预期值是否在实际值里
        """
        actual_text = self.get_element_text(locator, timeout=timeout, interval=interval)
        actual_text = '' if actual_text is None else actual_text
        print("actual_text: " + actual_text)
        self.assertIn(expect_text, actual_text, msg=msg)

    def assert_Element_Attribute_Value_Contained(self, locator, attribute, expect_text, msg=None, timeout=8,
                                                 interval=0.5):
        '''
        获取元素的Attribute的value,比较实际值和预期值是否相等
        :param locator: 元素
        :param attribute: 元素要获取的属性名
        :param expect_text: 预期值
        :param timeout:
        :param msg:
        '''
        actual_text = self.get_element_Attribute_value(locator, attribute, timeout=timeout, interval=interval)
        self.assertIn(expect_text, actual_text, msg=msg)

    def assert_Element_Text_Not_Contained(self, locator, expect_text, timeout=8):
        """failed if 元素中的文字 != expect_text"""
        _, current_text = self.wait_until_element_located_not_contains_text(locator, expect_text, timeout)
        self.assertNotEqual(expect_text, current_text)

    def assert_Text_In_Element(self, locator, expect_text, timeout=8):
        """failed if 元素中的文字 != expect_text"""
        _, current_text = self.wait_until_element_located_contains_text(locator, expect_text, timeout)
        self.assertIn(expect_text, current_text)

    def assert_Text_Not_In_Element(self, locator, text, timeout=8):
        """failed if 元素中的文字 != expect_text"""
        _, current_text = self.wait_until_element_located_not_contains_text(locator, text, timeout)
        self.assertNotIn(text, current_text)

    def assert_Selected_Option_Text_Equal(self, locator, text):
        """failed if Selected元素中已选中的文字 != expect_text"""
        selected_text = self.get_selected_item_text(locator)
        self.assertEqual(text, selected_text)

    def assert_If_Checkbox_Selected(self, locator, msg=None):
        """checkbox 是否被选中"""
        isSelected = self.checkbox_is_selected(locator)
        self.assertTrue(isSelected, msg)

    def assert_Text_Not_In_Selected(self, locator, text):
        """failed if text in selected"""
        all_options_text = self.get_all_select_item(locator)
        self.assertNotIn(text, all_options_text)

    def assert_Text_In_Selected(self, locator, text):
        """failed if text not in selected"""
        all_options_text = self.get_all_select_item(locator)
        self.assertIn(text, all_options_text)

    def assert_page_contains(self, text):
        page_source = self.get_page_source()
        self.assertIn(text, page_source)

    def assert_page_not_contains(self, text):
        page_source = self.get_page_source()
        self.assertNotIn(text, page_source)

    def assert_list_value_contained_in_basic_list(self, resultlist, basiclist):
        """ resultlist 中的所有值都在 basiclist 中"""
        if type(resultlist) != type(basiclist):
            log.warning('[BS]_554:type error!,type should be the same,currentType:{type1}-{type2}'.format(
                type1=type(resultlist), type2=type(basiclist)))
            return False
        if isinstance(resultlist, list):
            """比较对象是字符串"""
            result = set(resultlist).issubset(basiclist)
            self.assertTrue(result, msg='not all value in {list1} contained in {list2}'.format(list1=resultlist,
                                                                                               list2=basiclist))

    def assert_value_contained_in_lists(self, text, lists):
        """

        :param text:text = a
        :param lists: resultlist = [(a,b),(a,c,d),(,a)]
        :return:
        """
        for i in range(len(lists)):
            for j in range(len(lists[0])):
                if text.lower() in lists[i][j].lower():
                    break
                elif j+1 == len(lists[0]):
                    self.fail("{text} is not the lists: {list}".format(text=text, list=lists[i]))
        self.assertTrue(True)

    def assert_value_contained_in_list(self, text, resultlist):
        """
        :param text: text = a
        :param resultlist:   resultlist = [test1,(c,d),testa]
        :return:
        """
        for i in range(len(resultlist)):
            if text in resultlist[i]:
                self.assertTrue(True)
                break
            elif i+1 == len(resultlist):
                self.fail("{text} is not the list: {list}".format(text=text, list=resultlist))

    def assert_value_not_contained_in_list(self, text, resultlist):
        if text not in resultlist:
            self.assertTrue(True)
        else:
            self.fail("{text} is the list: {list}".format(text=text, list=resultlist))


if __name__ == "__main__":
    '''self test'''
    ccc = BSTestCase('test')
    a = 'test aa'
    b=['test aaa', 'test aa']
    ccc.assertIn(a, b,'pass')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/761755.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

欢太主题商店 官方资源提取与应用第三方资源方法一览

前言叠甲:支持正版,尊重他人劳动成果,反对盗版提取,不要传播提取版,我本人也在支持正版,但是最近懒得用主题,用一段时间的默认吧,如有主题开发者不满,请联系删除 &#x…

湖南省教育网络协会莅临麒麟信安调研教育网络数字化建设及教育信创发展情况

6月28日下午,湖南省教育网络协会理事长张智勇、秘书长刘志勇、副理事长黄旭、胡洪波、周中伟等协会相关负责人一行莅临麒麟信安,就湖南省教育网络数字化建设、教育信创工作等主题进行深入调研。麒麟信安副总裁王攀热情接待。 协会成员一行来到麒麟信安展…

让企业更进一步:AAA信用企业认证详解

AAA信用企业认证是企业在市场竞争中展示其信用和实力的重要方式,它不仅能够提升企业的公信力,还有助于企业在多方面获得竞争优势。以下是对AAA信用企业认证的详细解释: AAA信用企业认证的定义 AAA信用企业认证,又称3A认证&#…

《数据安全技术的数据分类分级规则》解析

数据安全技术的数据分类分级规则是一项国家标准,用于指导和规范数据分类与分级的方法和标准,以保障数据的安全性和保密性。该标准明确了数据分类与分级的基本原则,包括业务相关性、数据敏感性、风险可控性等。具体而言,数据分类应…

【UE5.1】Chaos物理系统基础——01 创建可被破坏的物体

目录 步骤 一、通过笔刷创建静态网格体 二、破裂静态网格体 三、“统一” 多层级破裂 四、“簇” 群集化的破裂 五、几何体集的材质 六、防止几何体集自动破碎 步骤 一、通过笔刷创建静态网格体 1. 可以在Quixel Bridge中下载两个纹理,用于表示石块的内外纹…

MySQL中的常用逻辑操作符

逻辑运算符在MySQL查询中扮演着重要角色,通过AND、OR、NOT等运算符的组合使用,可以提高查询的准确性和灵活性,确保查询结果满足业务需求。合理使用这些运算符还能优化查询性能,减少不必要的数据检索,并提高SQL语句的可…

SpringBoot创建一个初始化项目

提示:这一篇文章,主要是为了之后可以快速的去搭建项目,当然这篇博客,作者也会根据以后学习到的东西,慢慢去整理 文章目录 前言 搭建一个SpringBoot项目,目的是为了快速开发项目 项目列表 响应枚举类 /***…

AI奥林匹克竞赛:Claude-3.5-Sonnet对决GPT-4o,谁是最聪明的AI?

目录 实验设置 评估对象 评估方法 结果与分析 针对学科的细粒度分析 GPT-4o vs. Claude-3.5-Sonnet GPT-4V vs. Gemini-1.5-Pro 结论 AI技术日新月异,Anthropic公司最新发布的Claude-3.5-Sonnet因在知识型推理、数学推理、编程任务及视觉推理等任务上设立新…

网络攻防题录集

文章目录 第一章 网络攻防概述第二章 密码学第三章 网络协议脆弱性分析第四 自测题三第五章 自测题五第六章 自测题六第七章 自测题七第八章 自测题八第九章 自测题九第十章 自测题十第十一章 自测题十一第十二章 自测题十二第十三章 自测题十三 第一章 网络攻防概述 第一代安…

Anti-Canine Heartworm Antibody (Chicken) - HRP Conjugated

犬心丝虫(学名Dirofilaria immitis)是一种寄生丝虫,通过蚊子叮咬而传播。感染犬在早期阶段,大多不会出现症状。随着病情发展,将出现咳嗽、呼吸困难等症状,并伴有右心功能衰竭,最终全身衰弱或虚脱…

2008-2022年款哈弗维修手册和电路图线路图接线图资料更新

经过整理,2005-2022年款长城哈弗全系列已经更新至汽修帮手资料库内,覆盖市面上99%车型,包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对照…

关于windows,wifi图标显示不了的解决方法

解决方法一(解决了我的问题的方法): winr -->输入 regedit 打开注册表 --> 删除HKEY-CLASSES_ROOT\CLSID\{3d09c1ca-2bcc-40b7-b9bb-3f3ec143a87b} CLSID在下面仔细找,然后找到09开头那个删掉重启就可以了,可能…

工程师这几招降低电机EMI的方法,提高系统电磁兼容性能

通过在电机端子之间放置陶瓷电容器、工模滤波器或BDL滤波器均可抑制差模和共模噪声,以提高系统的EMC性能。工程师在本文详细介绍这几种降低电机EMI的方法。 EMC和EMI背景 电磁干扰(EMI)是系统上的电磁噪声的辐射或感应。与大多数电磁电路组件一样,直流…

大数据开发中的数据倾斜问题

数据倾斜是大数据开发中常见的性能瓶颈,了解其原因并采取有效的解决方案对系统性能至关重要。本文将从数据倾斜的影响、解决方法及示例代码等方面进行详细讨论。 目录 1. 数据倾斜的影响2. 解决数据倾斜的方法调整分区键预聚合倾斜处理逻辑 3. 进一步解决数据倾斜的…

深入解析 androidx.databinding.Bindable 注解

在现代 Android 开发中,数据绑定 (Data Binding) 是一个非常重要的技术。它使得我们能够简化 UI 和业务逻辑之间的连接,从而提高代码的可读性和维护性。在数据绑定中,Bindable 注解是一个关键部分,它帮助我们实现双向数据绑定和自…

SAP Build 3-调用SAP BAPI和调用S4HC API

1. 调用SAP BAPI 1.1 前提 项目已创建 SAP环境登录正常 1.2 引入BAPI SDK 商店中下载BAPI SDK Process中导入BAPI SDK 1.3 新建action group 新建action group时,会要求填写SAP登录信息,根据连接类型分为SSO,Basic和Custom 如果选择SS…

数据恢复篇:如何在 Android 手机上恢复未保存/删除的 Word 文档

在 Android 手机上访问 Word 文档通常很简单,但是当这些重要文件被删除或未保存时会发生什么?这种情况虽然令人痛苦,但并非毫无希望。到 2024 年,有几种强大的方法来处理此类数据丢失。本指南重点介绍如何在Android手机上恢复已删…

AI时代创新潮涌,从探路到引路,萤石云引领千行百业创新

步入AI新时代,AI、云计算、大数据等技术迅速迭代,并日益融入经济社会发展各领域全过程,数字经济成为推动千行百业转型升级的重要驱动力量。 今年的政府工作报告提出,深入推进数字经济创新发展。积极推进数字产业化、产业数字化&a…

UnityUGUI之二 CameraTargetTexture

在我们需要将3D物体呈现在2D视角时就可以使用TargetTexture,若想只显示3D物体则需改变背景颜色,并且得再增加一个相机

为什么我学个 JAVA 就已经耗尽所有而有些人还能同时学习多门语言

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「JAVA的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!我的入门语言是C&#xff0c…