软件测试|selenium+python基础方法封装(一)

简介: 软件测试|selenium+python基础方法封装(一)

在这里插入图片描述

Web自动化是自动化测试中的重要部分,作为广大测试从业者的首选学习对象,相较于C/S架构的自动化来说,B/S有着其无法忽视的诸多优势,从行业发展趋、研发模式特点、测试工具支持,其整体的完整生态已经远远超过了C/S架构方面的测试价值。

Selenium是当下最流行的web自动化测试框架,支持各种Java、Python等语言,这里,我们选择Python语言来进行封装。既然选择了python这门语言来实现对selenium的封装,那我们就需要使用Python的面向对象编程的理念来对selenium进行封装。就字面意思来理解的话,就像是把各种物品放入一个箱子内,日后需要使用的话就必须从这个箱子里拿才可以获取那个放入的物品。而这个比喻内的箱子就是python内的类,而各类物品则是我们自己根据需要自定义的各种属性和数据、方法,后续需要使用这些属性、数据、方法时,只要引入对应的类并实例化即可。

浏览器操作封装

我们就先从最基本的浏览器操作开始,这里会遵循一些简单的日常业务操作进行介绍,并且对类内的方法进行拆解,逐一介绍。

我们定义的类名为:BrowserDriver,构造函数传入browser。

class BrowserDriver:
    def __init__(self, browser):
        self.driver = self.open_browser(browser)
  1. 打开浏览器
def open_browser(self, browser):
    if browser == 'chrome':
        options = webdriver.ChromeOptions()
        exclude = ['enable-automation']
        options.add_experimental_option('excludeSwitches', exclude)
        driver = webdriver.Chrome(chrome_options=options)
    elif browser == 'firefox':
        profile = webdriver.FirefoxProfile()
        profile.set_preference('browser.download.dir', 'E:\FireFox_DL\\')
        profile.set_preference('browser.download.folderList', 2)
        profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/zip')
        driver = webdriver.Firefox(firefox_profile=profile)
   
    else:
        driver = webdriver.Edge()
    return driver

注:ChromeOptions()这个方法是chrome浏览器的参数对象,用来配置浏览器启动是的一些参数与属性,这里添加的是浏览器启动后不显示“正受到自动测试软件的控制”的提示,用法比较简单,add_experimental_option这边是添加试验性质的参数,另外比较常用的还有add_argument,add_extension(添加启动项、添加扩展)等方法。

注:Mac系统还可以加上Safari浏览器的参数

  1. 访问地址

封装的功能比较简单的,这里检查URL内是否含有http,可根据自己的需求将判断逻辑这块加强,将错误之后抛异常的动作实现成自动添加http或https至url的开头处等都可。

def get_url(self, url):
    if self.driver != None:
        sleep(1)
        if 'http' in url:
            self.driver.get(url)
        else:
            session.add(err_message)
            session.commit()
    else:
        session.add(fail_message)
        session.commit()
  1. 浏览器窗口操作

窗口操作也是比较常用的基础功能之一,以下将基本的最大化、最小化、前进、后退、刷新、设定尺寸大小封装起来。之后会判断可变参数的长度,根据传入的长度不同进行对应的窗口操作。

def browser_handle(self, *args):
    param = len(args)
    if param == 1:
        if args[0] == 'max':
            self.driver.maximize_window()
        elif args[0] == 'min':
            self.driver.minimize_window()
        elif args[0] == 'forward':
            self.driver.forward()
        elif args[0] == 'back':
            self.driver.back()
        else:
            self.driver.refresh()
    elif param == 2:
        self.driver.set_window_size(args[0], args[1])
    else:
        session.add(fail_message)
        session.commit()
    sleep(2)
  1. 切换窗口

另一个日常较为频繁的业务操作就是切换窗口,也就是我们的标签页,我们可以使用遍历的方式获得一个当前所有的窗口列表,通过传递默认参数title来进行当前窗口的切换,直到匹配到与title相同的窗口。

def switch_windows(self, title=None):
    windows_list = self.driver.window_handles
    current_window = self.driver.current_window_handle
    for i in windows_list:
        if i != current_window:
            time.sleep(1)
            self.driver.switch_to.window(i)
            if self.assert_title(title):
                break
相关文章
|
16天前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
28 4
|
2月前
|
测试技术 API 项目管理
API测试方法
【10月更文挑战第18天】API测试方法
50 1
|
2月前
|
测试技术 UED
软件测试中的“灰盒”方法:一种平衡透明度与效率的策略
在软件开发的复杂世界中,确保产品质量和用户体验至关重要。本文将探讨一种被称为“灰盒测试”的方法,它结合了白盒和黑盒测试的优点,旨在提高测试效率同时保持一定程度的透明度。我们将通过具体案例分析,展示灰盒测试如何在实际工作中发挥作用,并讨论其对现代软件开发流程的影响。
|
6天前
|
JSON 安全 API
Python调用API接口的方法
Python调用API接口的方法
32 5
|
26天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
77 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
4天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
WK
|
1月前
|
Python
Python中format_map()方法
在Python中,`format_map()`方法用于使用字典格式化字符串。它接受一个字典作为参数,用字典中的键值对替换字符串中的占位符。此方法适用于从字典动态获取值的场景,尤其在处理大量替换值时更为清晰和方便。
WK
73 36
|
29天前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
53 3
|
28天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
44 1
|
1月前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
79 2