2025年selenium之PO模式

selenium之PO模式selenium 之 PO 模式 PO 模式的精髓 测试对象和测试用例的分离 Page Object 的设计思想上是把素定位和素操作进行分层 这样带来的最直接的好处是当素发生变化时 只需维护 page 层的定位 而不需要关心在那些测试用例当中使用了这些素 在编写测试用例时 也不需要关心素是如何定位的 下边以百度搜索为例来通过代码来说明 PO 模式 1 封装常用的素操作 base py

selenium之PO模式

PO模式的精髓:测试对象和测试用例的分离
Page Object的设计思想上是把元素定位和元素操作进行分层,这样带来的最直接的好处是当元素发生变化时,只需维护page层的定位,而不需要关心在那些测试用例当中使用了这些元素。在编写测试用例时,也不需要关心元素是如何定位的。
下边以百度搜索为例来通过代码来说明PO模式
1.封装常用的元素操作
base.py

import time
from selenium import webdriver
class BasePage(object):
""" 基础Page层,封装一些常用方法 """
def __init__(self,driver):
self.driver = driver

#TODO 打开页面
def open(self,url=None):
if url == None:
self.driver.get(self.url)
else:
self.driver.get(url)
#TODO 八种定位元素方法
#TODO id定位
def by_id(self,id):
return self.driver.find_element_by_id(id)

#TODO name定位
def by_name(self,name):
return self.driver.find_element_by_name(name)

#TODO class定位
def by_class_name(self,class_name):
return self.driver.find_element_by_class_name(class_name)

#TODO tag_name定位
def by_tag_name(self,tag_name):
return self.driver.find_element_by_tag_name(tag_name)

#TODO link定位
def by_link_text(self,link_text):
return self.driver.find_element_by_link_text(link_text)

#TODO partial link定位
def by_partial_link_text(self,partial_link_text):
return self.driver.find_element_by_partial_link_text(partial_link_text)

#TODO xpath定位
def by_xpath(self,xpath):
return self.driver.find_element_by_xpath(xpath)

#TODO css定位
def by_css(self,css):
return self.driver.find_element_by_css_selector(css)

#TODO 获取title
def get_title(self):
return self.driver.title
#TODO 获取页面text,仅使用xpath定位
def get_text(self,xpath):
return self.by_xpath(xpath).text

#TODO 执行Javascript脚本
def js(self,script):
self.driver.execute_script(script)

创建BasePage类作为所有Page类的基类,在BasePage类中封装一些方法,这些方法是我们做自动化时常用到的。

open()方法用于打开网页

by_id()方法通过id定位

by_name()方法通过name定位

by_class_name()方法通过class_name定位

by_tag_name()方法通过tag标签定位

by_link_text()方法通过文本内容定位

by_partial_link_text()方法通过部分文本内容定位

by_xpath()方法通过xpath定位

by_css()方法通过css定位

get_title()和get_text()方法,是自动化测试经常用到的方法,get_text()方法需要接收元素定位

执行Javascript脚本也是常用到的方法

2.封装元素定位
baidu_page.py

from baidu_web.base import BasePage
class BaiduPage(BasePage):
url="http://www.baidu.com"

#定位搜索框输入搜索数据
def search_input(self,search_key):
self.by_id("kw").send_keys(search_key)

#点击百度一下按钮搜索
def search_button(self):
self.by_id("su").click()

执行测试用例即代码
case.py

import unittest
from time import sleep
from selenium import webdriver
from baidu_web.baidu_page import BaiduPage
class TestBaidu(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome()
def test_baidu_search_case(self):
page = BaiduPage(self.driver)
page.open()
page.search_input("selenium ")
page.search_button()
sleep(2)
self.assertEqual(page.get_title(),"selenium_百度搜索")
@classmethod
def tearDownClass(cls):
cls.driver.quit()
if __name__ == '__main__':
unittest.main()
编程小号
上一篇 2025-03-20 21:57
下一篇 2025-05-31 17:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/126784.html