基于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利用beautifulSoup实现爬虫

    Python利用BeautifulSoup实现爬虫攻略 准备工作 在开始Python利用BeautifulSoup实现爬虫之前,需要先准备一些工作。首先,需要安装Python解释器和BeautifulSoup库。 如果你还没有安装Python,可以去官网https://www.python.org/downloads/下载对应版本的Python安装包进行安装…

    python 2023年5月14日
    00
  • Python爬虫之获取心知天气API实时天气数据并弹窗提醒

    Python爬虫之获取心知天气API实时天气数据并弹窗提醒 1. 简介 本攻略介绍如何使用Python爬虫获取心知天气API提供的实时天气数据,并使用弹窗提醒功能进行提醒。 2. 心知天气API 心知天气API是一个提供全球天气数据的API平台,可以查询实时天气、天气预报、AQI等天气数据。开发者可以通过API接口获取心知天气平台提供的天气数据。 2.1 注…

    python 2023年6月13日
    00
  • python基于tkinter点击按钮实现图片的切换

    下面是关于“python基于tkinter点击按钮实现图片的切换”的完整攻略: 步骤一:准备工作 在编写代码前,需要完成以下几个步骤: 确保你的计算机中已经安装了Python环境,并且安装了Tkinter库。 准备两张需要切换的图片,例如”image1.png”和”image2.png”。 将图片放置在你的Python脚本文件所在的文件夹中。 步骤二:导入必…

    python 2023年6月13日
    00
  • Python (seaborn) 的颜色:不添加到 DataFrame 的颜色

    【问题标题】:Colors for Python (seaborn): colors without adding to DataFramePython (seaborn) 的颜色:不添加到 DataFrame 的颜色 【发布时间】:2023-04-02 10:03:01 【问题描述】: slov = {‘People’: {0: ‘Ivan’, 1: ‘J…

    Python开发 2023年4月8日
    00
  • Python求正态分布曲线下面积实例

    Python求正态分布曲线下面积实例 本文将详细讲解如何使用Python求解正态分布曲线下面积。首先,我们需要了解一些基本概念和公式。 正态分布 正态分布,又称为高斯分布,是统计学中最为常用的一种分布,它的分布密度函数如下: $$ f(x) = \frac{1}{\sigma \sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^…

    python 2023年6月3日
    00
  • 分享4个Python中的非常好用的自动化脚本

    下面我会详细讲解“分享4个Python中的非常好用的自动化脚本”的完整攻略。 一、介绍 Python是一种高级编程语言,可以用于创建各种类型的自动化脚本。在本文中,我们将分享四个非常好用的Python自动化脚本,它们可以用于不同的任务和用途。以下是四个Python自动化脚本的介绍。 二、脚本1: 自动发送电子邮件 如果你需要自动向你的客户或者朋友发送电子邮件…

    python 2023年5月19日
    00
  • python列表倒序的几种方法(切片、reverse()、reversed())

    在Python中,列表是一种常见的数据类型,列表倒序是一个常见的操作。本文将介绍Python列表倒序的几种方法,包括使用切片、reverse()和reversed()。 方法一:使用切片 使用切片是一种简单的方法来倒序一个列表。以下是示例代码: my_list = [1, 2, 3,4, 5] reversed_list = my_list[::-1] pr…

    python 2023年5月13日
    00
  • python 将数据保存为excel的xls格式(实例讲解)

    下面是“Python将数据保存为Excel的xls格式(实例讲解)”的完整实例教程。 什么是xls格式 xls格式是Microsoft Excel电子表格文件的标准文件格式。它是一种二进制文件格式,包含格式、布局和其他电子表格内容。在Python中,我们可以使用第三方库来创建和保存xls文件。 1. 安装依赖库 在Python中,我们可以使用Python的o…

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