浅谈测试自动化selenium之POM模式

基于本人也是一个初学者,在运用POM模式的时候记录一下自己的学习笔记。

如果你是大神,那么可以略过,如果你是初学者,希望对你有帮助。

本文阐述了以下几个问题:

        什么叫POM模式

        为什么要用POM模式

        POM模式的思想

        POM模式的运用

在刚学习selenium自动化测试的时候,一般都是:

        1.打开网页

        2.定位元素,进行操作

        3.关闭网页

以百度为例:

import time
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver=webdriver.Chrome()
driver.get("https://www.baidu.com/")text_input=driver.find_element(By.XPATH,'//*[@id="kw"]')
text_input.send_keys("京东")
submit_button=driver.find_element(By.XPATH,'//*[@id="su"]')
submit_button.click()
time.sleep(8)
driver.quit()

以上是一个简单的访问百度网页,搜索京东的例子。

因为只有一个页面,所以相对来说使用这种模式的弊端没有显露出来。

当被测对象有很多页面的时候,问题开始显现出来了。

假设在5个测试用例中都使用到了元素X,那么,当前端对元素X做了更新处理的时候。我们就需要找到这5个引用到了元素X的地方,对元素X进行更改。

所以,引入POM模式。

什么叫POM模式

POM模式:Page Object Model,即页面对象模型。

通俗讲,就是把页面的元素、操作、数据等分离开来,再通过用例调用。

本质上就是一种封装的思想,让代码逻辑更清晰,容易维护。这样的话,就能减少重复大量的定位元素和维护的时间成本。

为什么要用POM模式

通过这种模式,我们把页面的元素定位和业务操作分离开。

        1.多个测试人员可同时编写和维护脚本

        2.代码逻辑更清晰,更易维护

POM模式的思想

将页面分为3层:操作层、页面层、用例层

操作层:就是对一些元素的公共操作。比如:点击,输入,拖拽。

页面层:页面元素的定位,及属于该页面独有的操作也可封装在这里。

用例层:在页面中操作元素。也就是测试用例。

关系如下图,网络找的,侵删。

操作层:BasePage,点击,输入,拖拽等公共的操作。

页面层:Page,继承BasePage,实现元素定位以及一些该页面独有的功能。

用例层:TestCase,测试用例。

POM模式的运用

根据POM模式的思想:

1.首先封装公共操作到base_page

2.然后定位页面元素至page

3.最后在test_case写测试用例

base_page.py:

定义了打开网页,定位元素,点击,输入,关闭网页的方法。

可被其他页面继承。

from selenium import webdriver
import logging
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECclass BasePage:def __init__(self):self.driver=webdriver.Chrome()def open_url(self,url):self.driver.get(url)self.driver.maximize_window()def find_element(self,locator,timeout=10):try:element=WebDriverWait(self.driver,timeout).until(EC.presence_of_element_located(locator))return elementexcept:logging("{locator}元素没有找到")raisedef click(self,locator):element=self.driver.find_element(*locator)element.click()def send_keys(self,locator,text):element=self.driver.find_element(*locator)element.send_keys(text)def quit(self):self.driver.quit()

index_page.py:

具体的页面元素定位,以及一些该页面元素独有的方法。

继承了BasePage。

from selenium.webdriver.common.by import By
from base_page import BasePage
class IndexPage(BasePage):text_input = (By.XPATH, '//*[@id="kw"]')submit_button = (By.XPATH, '//*[@id="su"]')def input_text(self,text):self.send_keys(self.text_input,text)def submit(self):self.click(self.submit_button)

testcase.py:

前置操作,初始化driver,打开网页。

执行测试用例。

后置操作,关闭浏览器。

import time
import unittest
from index_page import IndexPageclass TestCaseSearch(unittest.TestCase):def setUp(self)->None:self.driver=IndexPage()self.driver.open_url("https://www.baidu.com/")def tearDown(self)->None:self.driver.quit()def testSearch(self):self.driver.input_text(text="京东")self.driver.submit()time.sleep(8)if __name__ =="__main__":unittest.main()

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习数据处理(一)

在PyTorch中,torch.Tensor是存储和变换数据的主要工具。如果你之前用过NumPy,你会发现Tensor和NumPy的多维数组非常类似。然而,Tensor提供GPU计算和自动求梯度等更多功能,这些使Tensor更加适合深度学习。 张量(tensor&…

Android Studio 安装和使用

前些天,打开了几年前的一个Android Studio app项目,使用安卓虚拟机仿真app崩溃,怀疑是不是中间升级过Android Studio导致异常的,马上脑子一热卸载了,结果上次踩过的坑,一个没少又踩一次,谨以此文…

STM32的以太网外设+PHY(LAN8720)使用详解(7):以太网数据接收及发送测试

0 工具准备 1.野火 stm32f407霸天虎开发板 2.LAN8720数据手册 3.STM32F4xx中文参考手册 4.Wireshark1 以太网数据接收测试 1.1 以太网数据接收测试(轮询) 我们在主循环内轮询RX DMA描述符标志位查看是否接收到了数据,如果接收到了则将数据…

电子学会C/C++编程等级考试2022年12月(六级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:区间合并(2022-12-六级) 给定 n 个闭区间 [ai; bi],其中i=1,2,...,n。任意两个相邻或相交的闭区间可以合并为一个闭区间。例如,[1;2] 和 [2;3] 可以合并为 [1;3],[1;3] 和 [2;4] 可以合并为 [1;4],但是[1;2] 和 [3;4] 不可…

Tg2520smn ((tcxo / vc-tcxo)高稳定性)

TG2520SMN是一款高稳定性的(TCXO/VC-TCXO)产品,其频率输出范围为10MHz至55MHz,提供多种电源电压选项,分别为1.8 V类型、2.8 V类型、3.0 V类型和3.3 V类型,该产品具备优异的频率/温度特性,最大的频率稳定性为0.5 10^6 …

word导入导出-Apache POI 和 Poi-tl

word 文件读取 使用Apache POI Word 进行读取文件 使用poi 时如果报ClassNotFoundException 等错误,请注意请求以下maven 文件的版本 Apache POI Word 说明文档:Apache POI Word 说明文档 maven 解决依赖冲突教程:https://www.cnblogs.com/…

企业数据传输文件的安全性是如何保障的?

随着数字化时代的兴起,企业对数据的依赖日益增加,数据已经成为业务决策和运营的核心。然而,企业在数据传输文件的安全性方面面临着严峻的挑战。本文将深入探讨企业数据传输文件安全性的重要性和意义,以及如何有效地应对这一挑战。…

HrSegNet 23年裂缝检测新文章基于PaddelPaddle和Paddleseg的复现

本文章是对2023年发表在Automation in Construction上论文 Real-time High-Resolution Neural Network with Semantic Guidance for Crack Segmentation 的复现。 我参考了作者上传至github的代码,并得到了作者的帮助。https://github.com/CHDyshli/HrSegNet4Cra…

通过生成表征的自条件图像生成

文章目录 摘要1、简介2、相关工作3、方法4、结果4.1、设置4.2、无条件类别的生成4.3、无分类器指导4.4、消融实验4.5、计算成本4.6、定性结果 5、讨论 摘要 https://arxiv.org/pdf/2312.03701.pdf 本文提出了表示条件图像生成(Representation-Conditioned Image Ge…

【Linux/gcc】C/C++——编译过程

前提:WSL2(Ubuntu)、gcc编译器。gcc安装命令: sudo apt-get install gcc 查看gcc版本: 目录 1、编译过程 1.1、预处理 1.2、编译与汇编 1.3、链接 2、gcc实验 2.1、预处理 2.2、编译 2.3、汇编 2.4、链接 1、…

前端学习——vuex的入门

学习一门技术最快捷的方式就是先了解其概念和使用场景,毕竟任何技术的出现都是为了解决某一个场景下的通用解决方案,并且使用最合理的方式去解决问题。 那么什么是vuex? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中…

【3d】designdoll 人偶 --- 修复手部

示例图: 打开人偶软件 设置手部细节 制作一个手型 方法一:krita live 修手(推荐) 将手型导入krita live生图,用框选工具框选手部 如果效果不好,请使用种子数。 方法二:PS SD修手(不…