关于Selenium的网页对象单元测试的设计模式

这篇具有很好参考价值的文章主要介绍了关于Selenium的网页对象单元测试的设计模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面:经过了实践总结一下经验,心得进行一个分享。


首先driver是可以单独抽出来的,变成一个driver函数放在driver.py。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options


def get_chrome_driver():
    # 启动driver
    options = Options()
    # 替换为你本地的Chromed路径
    options.binary_location = r"D:\software\Chrome-bin\chrome.exe"
    # 替换为你本地的Chromedriver路径
    chromedriver_path = r'D:\software\Chrome-bin\chromedriver.exe'
    # 使用Service对象指定Chromedriver路径
    service = Service(chromedriver_path)
    driver = webdriver.Chrome(service=service, options=options)
    return driver

然后我们新建page.py,在这里我们只处理页面的对象,因此我们创建页面类在此,当然这个页面类需要和HTML元素和驱动进行组合才能形成一个页面。

我们创建BasePage,以后的页面类都用它作为基类。首先是传一个驱动,组合起来

class BasePage(object):
    """Base class to initialize the base page that will be called from all
    pages"""

    def __init__(self, driver):
        self.driver = driver


class LoginPage(BasePage):
    def __init__(self, driver):
        super().__init__(driver)

接着我们在element.py创建元素的基类,以后的元素类都继承自它

from selenium.webdriver.support.ui import WebDriverWait


class BaseElement(object):
    """Base page class that is initialized on every page object class."""

    locator = None

    def __set__(self, obj, value):
        """Sets the text to the value supplied"""
        driver = obj.driver
        WebDriverWait(driver, 5).until(lambda dri: dri.find_element(*self.locator))
        driver.find_element(*self.locator).clear()
        driver.find_element(*self.locator).send_keys(value)

    def __get__(self, obj, owner):
        """Gets the specified element object"""
        driver = obj.driver
        WebDriverWait(driver, 5).until(lambda dri: dri.find_element(*self.locator))
        self.element = driver.find_element(*self.locator)
        return self.element

    def click(self):
        self.element.click()

    def get_text(self):
        return self.element.get_attribute("value")

接着我们在locator.py创建定位器类,没什么特别,就是作为一个类似字典的静态类存放元素的位置

from selenium.webdriver.common.by import By


class LonginPageLocators(object):
    """A class for login page locators. All login page locators should come here"""
    basic_username = (By.ID, 'basic_username')
    basic_password = (By.ID, 'basic_password')
    details_button = (By.ID, 'details-button')
    proceed_link = (By.ID, 'proceed-link')
    login_button = (By.ID, 'submitBtn')

准备工作就绪,那么我们来编写LoginPage吧~
首先组合我们需要的HTML元素,然后编写一个login业务函数进行业务处理。


class BasePage(object):
    """Base class to initialize the base page that will be called from all
    pages"""

    def __init__(self, driver):
        self.driver = driver


class LoginPage(BasePage):
    def __init__(self, driver):
        super().__init__(driver)

    class DetailButtonElement(BaseElement):
        locator = LonginPageLocators.details_button

    class ProceedLinkElement(BaseElement):
        locator = LonginPageLocators.proceed_link

    class UsernameTextElement(BaseElement):
        locator = LonginPageLocators.basic_username

    class PasswordTextElement(BaseElement):
        locator = LonginPageLocators.basic_password

    class LoginButtonElement(BaseElement):
        locator = LonginPageLocators.login_button

    class RankBoxElement(BaseElement):
        locator = LonginPageLocators.rank_box

    detail_button_ele = DetailButtonElement()
    proceed_link_ele = ProceedLinkElement()
    username_text_ele = UsernameTextElement()
    password_text_ele = PasswordTextElement()
    login_button_ele = LoginButtonElement()
    rank_box_ele = RankBoxElement()

    def login(self):
        self.detail_button_ele.click()
        self.proceed_link_ele.click()
        self.username_text_ele = 'admin'
        self.password_text_ele = '123456'
        self.login_button_ele.click()
        _ = self.rank_box_ele  # just test web is complete

_ = self.rank_box_ele小细节是用来测试是否进入主页面的。

回到单元测试.py添加测试函数,debug运行。

    def test_login(self):
        login_page = page.LoginPage(self.driver)
        login_page.login()

当我们登录成功后,我们就可以跳转到我们需要页面,进行脚本处理。当然了进入了新的页面,别忘了创建新的页面类。在我的例子中就是创建了新的页面类ResourceDetailPage以便完成后续的业务。文章来源地址https://www.toymoban.com/news/detail-768943.html

    def test_turn_to_resource(self):
        self.test_login()
        # 页面跳转
        self.driver.get("https://127.0.0.1:38000/#/resource/detail/3668")

    def test_resource_delete(self):
        self.test_turn_to_resource()
        # 创建新的page对象
        resource_detail_page = page.ResourceDetailPage(self.driver)
        # 在新的page处理业务...
        resource_detail_page.while_delete()

到了这里,关于关于Selenium的网页对象单元测试的设计模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Selenium Web自动化测试——基于unittest框架的PO设计模式

     🔥 交流讨论: 欢迎加入我们一起学习! 🔥 资源分享 : 耗时200+小时精选的「软件测试」资料包 🔥  教程推荐: 火遍全网的《软件测试》教程   📢 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 前面一直在讲接口自动化测试框架与案例分享,很少讲Selenium这个We

    2024年03月21日
    浏览(58)
  • 〖Python WEB 自动化测试实战篇⑫〗- 实战 - PageObject框架设计(亦叫做 “页面对象” 模式)

    订阅 Python全栈白宝书-零基础入门篇 可报销! 白嫖入口-请点击我。 推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏, 免费阶段订阅数量4300+ , 购买任意白宝书体系化专栏可加入 TFS-CLUB 私域社区。 福利:加入社区的小伙

    2024年02月02日
    浏览(77)
  • 【JAVA开发面试】如何处理并发访问如何进行代码的单元测试Java多线程编程消息中间件设计模式技术难题是如何解决的

    【 点我-这里送书 】 本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题 中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明

    2024年02月03日
    浏览(52)
  • 关于使用Selenium获取网页控制台的数据

    需要获取网页的控制台的数据,如下图 Pycharm安装 Selenium安装 Selenium中的find_element方法 //供参考 这里使用Chrome有一个技巧可以直接复制元素的信息 到此我们已经完成了一部分简单的自动化操作了 接下来我们需要记录和获取控制台的信息,这部分参考可参考 jmeter-调用python脚本

    2024年02月02日
    浏览(52)
  • 关于selenium实现网页操作出现闪退现象

    今天在写一段Python程序的时候遇到一个现象, 利用selenium来实现chromedriver控制浏览器 ,程序一运行,网站打开不到一秒就马上闪退,在网上看到了很多解释: 都说是浏览器的版本和chromedriver的版本不一致所导致的冲突 ,但是我仔细查找,发现我这个原因并不是上面这个原因

    2024年02月16日
    浏览(38)
  • 关于selenium获取网页下一页的点击事件

    我们对爬虫的使用,肯定是少不了网页的支持啦,这次我们对 2022世界大学学术排名https://www.shanghairanking.cn/rankings/arwu/2022 进行大学排名数据的爬取并且存储进excel,但是这次不细讲爬虫而是只讲selenium的简单使用,所以不对数据进行清洗降噪了 首先你得安装bs4、selenium、pand

    2024年02月01日
    浏览(38)
  • Selenium基础 —unittest单元测试框架

    目录 (一)unittest基本简介 (二)unittest基本概念 1、unittest核心的四个概念 2、如何创建一个测试类 3、test fixture常用的四个方法 4、unittest编写测试方法(用例)规范 5、执行测试脚本 6、入门示例 7、结果说明 (三)断言方法 1、断言介绍 2、常用的断言方法 3、断言示例 (四)

    2023年04月08日
    浏览(37)
  • 单元测试 Mock 对象为null

    场景:单元测试mock对象,执行时为null或值不符。 单元测试中mock方法并doReturn了mock数据,但是实际的方法在后面使用的参数却是null。 断点调试后发现调用方法前和在方法中的对象的id并非一个; 重复浏览调用代码,发现问题在于单测中重复mock一个方法,doReturn的mock数据被覆

    2024年02月11日
    浏览(33)
  • Selenium-Unittest单元测试框架

    1、Unittest介绍 为什么要学习单元测试框架 测试用例的组织与运行需要单元测试框架的参与,从而满足不同测试场景的需要,单元测试框架提供了丰富的比较方法:实际结果与预期结果的对比==测试结果 单元测试框架提供了丰富的日志:给出测试用例失败与通过的数目及执行

    2024年02月04日
    浏览(44)
  • 【设计模式】面向对象设计八大原则

    (1)依赖倒置原则(DIP) 高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定)。 抽象(稳定)不应该依赖于变化),实现细节应该依赖于抽象(稳定)。 (2)开放封闭原则(OCP) 对扩展开放,对更改封闭。 类模块应该是可扩展的,但是不可

    2024年02月10日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包