基于python+selenium的二次封装的实现

下面是基于python+selenium的二次封装的实现攻略:

一、什么是基于python+selenium的二次封装

基于python+selenium的二次封装是指在selenium的基础上,利用python语言的特性进行封装,以便于自己或他人在后续的测试过程中更加高效地使用selenium。

二、为什么要进行二次封装

基于Python+selenium自带的功能通常较为单一或原始,难以满足一些高度细分化的需求。而二次封装可以结合自己或者团队的经验进行更适合实际需求的封装,还可以减少代码量,更加易读,更加易用。

三、基于python+selenium的二次封装的实现

1.创建基础类

首先,我们需要创建一个基础类,该类将初始化浏览器及运行时环境,还包括打开网页、关闭网页、调用元素等函数。

from selenium import webdriver

class BasePage:
    def __init__(self, url):
        self.driver = webdriver.Chrome()
        self.driver.get(url)

    def find_element(self, *args, **kwargs):
        return self.driver.find_element(*args, **kwargs)

    def close(self):
        self.driver.quit()

2.封装元素定位函数

我们通常需要定位网页中的元素,而每次定位元素时,都需要写一个相同的find_element函数,显得十分重复繁琐。因此,我们可以对其进行封装。

from selenium.webdriver.common.by import By

class BasePage:
    def __init__(self, url):
        self.driver = webdriver.Chrome()
        self.driver.get(url)

    def find_element(self, by: By, value: str):
        return self.driver.find_element(by, value)

    def close(self):
        self.driver.quit()

    def __del__(self):
        self.close()

3.封装常用操作函数

在实际测试过程中,我们通常需要对网页进行跳转、回退、刷新、输入、点击等操作,并且这些操作是比较基础的。我们可以对这些操作进行封装,以便我们在整个过程中更加高效地使用它们。

下面是一些常用操作的封装:

class BasePage:
    def __init__(self, url):
        self.driver = webdriver.Chrome()
        self.driver.get(url)

    def find_element(self, by: By, value: str):
        return self.driver.find_element(by, value)

    def back(self):
        self.driver.back()

    def forward(self):
        self.driver.forward()

    def refresh(self):
        self.driver.refresh()

    def send_keys(self, by, value, text):
        self.driver.find_element(by, value).send_keys(text)

    def click(self, by, value):
        self.driver.find_element(by, value).click()

    def close(self):
        self.driver.quit()

    def __del__(self):
        self.close()

4.封装断言函数

测试过程中不可避免地会用到断言,对结果进行校验。因此,我们需要对断言进行封装。

class BasePage:
    def __init__(self, url):
        self.driver = webdriver.Chrome()
        self.driver.get(url)

    def find_element(self, by: By, value: str):
        return self.driver.find_element(by, value)

    def back(self):
        self.driver.back()

    def forward(self):
        self.driver.forward()

    def refresh(self):
        self.driver.refresh()

    def send_keys(self, by, value, text):
        self.driver.find_element(by, value).send_keys(text)

    def click(self, by, value):
        self.driver.find_element(by, value).click()

    def close(self):
        self.driver.quit()

    def __del__(self):
        self.close()

    def assert_text(self, by, value, text):
        element = self.driver.find_element(by, value)
        result_text = element.text
        assert result_text == text, f"expected {text}, but get {result_text}"

四、示例说明

示例1:登录网站

我们可以利用上述的封装进行网站的登录操作。

class LoginPage(BasePage):
    def login(self, username, password):
        user_input = self.find_element(By.ID, "username")
        passwd_input = self.find_element(By.ID, "password")
        login_btn = self.find_element(By.ID, "login-btn")

        self.send_keys(user_input, username)
        self.send_keys(passwd_input, password)
        self.click(login_btn)

class TestLoginPage:
    def test_login(self):
        login_pg = LoginPage("http://www.example.com/login")
        login_pg.login("user", "pass")
        login_pg.assert_text(By.CSS_SELECTOR, "#logged-in-username", "user")

示例2:搜索并校验结果

我们还可以利用上述的封装进行网站的搜索和结果校验操作。

class SearchPage(BasePage):
    def search(self, content):
        search_input = self.find_element(By.CSS_SELECTOR, "#search-input")
        search_input.click()
        search_input.send_keys(content)
        search_btn = self.find_element(By.CSS_SELECTOR, "#search-btn")
        search_btn.click()

    def assert_result(self, expected_result):
        result = self.find_element(By.CSS_SELECTOR, "#search-result")
        assert result.text == expected_result, f"expected {expected_result}, but get {result.text}"

class TestSearchPage:
    def test_search(self):
        search_pg = SearchPage("http://www.example.com/search")
        search_pg.search("hello world")
        search_pg.assert_result("Hello World is a phrase")

以上就是基于python+selenium的二次封装的实现攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于python+selenium的二次封装的实现 - Python技术站

(1)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python和C语言混合编程实例

    来讲解一下“Python和C语言混合编程实例”的完整攻略。 什么是Python和C语言混合编程 Python和C语言是两种编程语言,都有自己的优势和适用场景。在实际开发中,我们有时候需要使用Python实现某些功能,但是由于Python是解释型语言,执行速度相对较慢,不能满足某些需要高性能的场景。这时候就可以考虑使用C语言编写性能要求较高的部分代码,再和Py…

    python 2023年5月30日
    00
  • python自动导入包的实现

    自动导入包是Python中十分常见的功能,不必需要手动导入每一个模块,而是可以通过程序自动地扫描指定目录下的模块并进行自动导入。以下是Python自动导入包的实现攻略: 1. 创建子包和模块 要实现自动导入一个包,首先需要通过创建子包和模块来组织代码。创建一个模块时,通常是一个以.py为扩展名的文件。子包是一个包含其他模块的目录。目录的名称表示包的名称,而其…

    python 2023年5月19日
    00
  • Python获取时间范围内日期列表和周列表的函数

    下面是详细的Python获取时间范围内日期列表和周列表的函数攻略: 问题描述 在Python中,获取某个时间范围(例如一周、一月、一季度等)内的日期列表和周列表是一个常见的需求,因为这样可以方便的进行日期的计算、统计等操作,进而方便业务处理。本攻略将介绍如何使用Python编写函数来实现获取时间范围内日期列表和周列表的功能。 解决方案 Python中有一个十…

    python 2023年6月2日
    00
  • Python实现各种邮件发送

    下面我将为你详细讲解Python实现各种邮件发送的完整实例教程。 准备工作 在开始之前,你需要先安装smtplib和email模块。如果你使用的是Python 2.x版本,你还需要安装email.MIME模块。你可以通过pip进行安装: pip install smtplib pip install email pip install email.MIME …

    python 2023年5月13日
    00
  • Python lxml库的简单介绍及基本使用讲解

    下面是详细的攻略: Python lxml库的简单介绍及基本使用讲解 Python lxml库是一个用于处理XML和HTML文档的Python库。它提供了一组简单易用的API,可以方便地解析和操作XML和HTML文档。本文将介绍Python lxml库的基本使用方法。 安装Python lxml库 在使用Python lxml库之前,我们需要先安装它。可以使…

    python 2023年5月14日
    00
  • Python爬虫之Selenium实现窗口截图

    下面是“Python爬虫之Selenium实现窗口截图”的攻略: 1. 安装Selenium 首先需要安装Selenium,可使用pip包管理器,输入以下命令: pip install selenium 2. 下载Chromedriver 使用Selenium需要下载浏览器驱动,这里以Chrome浏览器为例,下载对应版本的Chromedriver,在http…

    python 2023年5月14日
    00
  • python使用BeautifulSoup分析网页信息的方法

    Python使用BeautifulSoup分析网页信息的方法 本文将介绍如何使用Python的BeautifulSoup库分析网页信息。我们将使用BeautifulSoup库解析HTML文档,并使用find()和find_all()方法查找元素。 解析HTML文档 以下是一个示例代码,演示如何使用Python的BeautifulSoup库解析HTML文档: …

    python 2023年5月15日
    00
  • python3 配置logging日志类的操作

    下面是关于 Python3 配置 logging 日志类的完整攻略。 配置 logging 日志类 logging 是 Python 的一个日志处理模块,可以非常方便的记录程序运行时产生的信息,比如错误日志、调试信息等。下面我们来详细介绍如何配置 logging 日志类。 步骤一:引入 logging 模块 首先需要在代码中引入 logging 模块,代码如…

    python 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部