selenium之PO模式

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

大家好,又见面了,我是你们的朋友全栈君。

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()

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139780.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Windows环境安装MySQL server「建议收藏」

    Windows环境安装MySQL server「建议收藏」从MySQL官网下载安装包,下载CommunityServer的zip即可,如mysql-5.7.23-winx64.zip,也可以下载Installer版,这里说的是CommunityServer版。把下载好的zip包解压到一个合适的位置,本文给出的命令是基于解压在D:\mysql-5.7.23-winx64下。在安装之前检测一下当前环境是否有VS环境,没有的话去微软官网下一个Visua…

    2022年9月14日
    1
  • 手机号码归属地查询App

    手机号码归属地查询App结合MVP设计模式和解析Json数据,制作一款“手机号码归属地查询的App小程序(Android)”说明:实现的原理很简单,有多种设计方式和代码编写风格。本文主要是认识、理解MVP设计模式和Json数据的常见解析框架的使用。源码:请点击链接访问我的GitHub进行查看准备工作:AndroidStudio开发工具(谷爹的亲儿子)浏览器(进行测试淘宝开放平台返回给我们的Json数据并进行…

    2022年7月22日
    15
  • java 文件转inputstream_把文本转换成表格

    java 文件转inputstream_把文本转换成表格以下是一些将InputStream转换为FileJava示例手动将InputStream复制到FileOutputStreamApacheCommonsIO–FileUtils.copyInputStreamToFileJava1.7NIOFiles.copy1.FileOutputStream1.1我们必须将数据从InputStream手动复…

    2022年9月21日
    2
  • 狂神说java系列笔记下载(跟狂神相似的小说)

    狂神说Vue笔记​ 想要成为真正的“互联网Java全栈工程师”还有很长的一段路要走,其中前端是绕不开的一门必修课。本阶段课程的主要目的就是带领Java后台程序员认识前端、了解前端、掌握前端,为实现成为“互联网Java全栈工程师”再向前迈进一步。一、前端核心分析1.1、概述Soc原则:关注点分离原则Vue的核心库只关注视图层,方便与第三方库或既有项目整合。HTML+CSS+JS:视图:给用户看,刷新后台给的数据网络通信:axios页面跳转:vue-router状态管

    2022年4月18日
    40
  • BZOJ 3732 Network 最小瓶颈路

    BZOJ 3732 Network 最小瓶颈路

    2022年3月3日
    36
  • 安装phpMyAdmin图文教程-学习(转载)

    安装phpMyAdmin图文教程-学习(转载)phpmyadmin的安装配置已经是老生常谈的话题了,网络上到处都可以找到相关的配置教程。但是,那些大多都是手动配置的,稍不留神,容易出错。因此站长今天在这里介绍的是,被很多phpmyadmin用户所忽略的phpmyadmin自带的安装程序,下面我们就开始一步一步来安装phpmyadmin。1、…

    2022年5月6日
    118

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号