web UI自动化项目实战-项目

项目使用禅道,所以你需要搭建1个禅道,搭建禅道的方法和步骤见

https://www.cnblogs.com/xinhua19/p/13151296.html

搭建UI自动化的框架

第一步,搭建框架,从配置文件信息开始,然后读取配置文件,然后是读取驱动。

第二步,对selenium中的一些方法做二次封装

第三步,封装页面的元素对象和元素的新增,删除,查询,修改等操作

第四步,测试用例层,设计测试用例

selenium读取配置文件的方法封装

有了配置config.ini的配置文件,肯定是要读取这个配置文件的,话不多说,直接上代码

import os
import codecs
import configparser
import logging proDir = os.path.split(os.path.realpath(__file__))[0]
rootDir = os.path.dirname(proDir)
dataDir = os.path.join(rootDir, "data")
configPath = os.path.join(rootDir, "config", "config.ini") class ReadConfig:
def __init__(self):
fd = open(configPath)
data = fd.read() # remove BOM
if data[:3] == codecs.BOM_UTF8:
data = data[3:]
file = codecs.open(configPath, "w")
file.write(data)
file.close()
fd.close() self.cf = configparser.ConfigParser()
self.cf.read(configPath) def get_email(self, name):
value = self.cf.get("EMAIL", name)
return value def get_http(self, name):
value = self.cf.get("HTTP", name)
return value def get_db(self, name):
value = self.cf.get("DATABASE", name)
return value def get_postgresql(self, name):
value = self.cf.get("POSTGRESQL", name)
return value def get_loglevel(self, name):
value = self.cf.get("LOG", name)
return value def get_account(self, name):
value = self.cf.get("ACCOUNT", name)
return value def get_accounts(self):
return self.cf.items("ACCOUNT") def get_webapp(self, name):
return self.cf.get("WEBAPP", name)

那么读取到了配置文件信息后,肯定也是要应用配置文件的,话不多说,直接上代码

# coding:utf-8
import time
from utils import readconfig
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC localReadConfig = readconfig.ReadConfig() class BasePage:
scheme = localReadConfig.get_http("scheme")
base_url = scheme + r"://" + localReadConfig.get_http("baseurl")+':'+localReadConfig.get_http("port")+'/zentao' def __init__(self, driver, url=None):
self.url = url
self.driver = driver
self.timeout = 12
self.wait = WebDriverWait(self.driver, self.timeout) self.url = self.base_url
if url:
self.url = self.base_url + url def open(self, url=None):
if not url:
self.driver.get(self.url)
else:
self.driver.get(url)
self.driver.maximize_window() def wait_for_element_presence(self, locator):
self.wait.until(EC.presence_of_element_located(locator)) def find_element(self, locator):
try:
return self.driver.find_element(*locator)
except Exception as e:
print("element not be found {}".format(locator[1]))
print("python tell us: {}".format(str(e)))
return None def wait_for_element_visible(self, locator):
self.wait.until(EC.visibility_of_element_located(locator)) def wait_for_element_invisible(self, locator):
self.wait.until(EC.invisibility_of_element(locator)) def implicitly_wait(self, time_to_wait=3):
self.driver.implicitly_wait(time_to_wait) @staticmethod
def sleep(t=1):
time.sleep(t)

selenium读取驱动的方法封装

selenium常用方法的二次封装

页面元素对象和 操作的封装

测试用例调用操作,执行测试用例

HTMLTestRunner,py 生成报告

执行结束查看报告

selenium(12)-web UI自动化项目实战(PO模式,代码封装)的更多相关文章

  1. 说说UI自动化中的PO模式

    PO模式,全称PageObject模式,即页面对象模式.将页面定位与业务操作分离. po模式有以下几个优点: 1.易读性好 2.扩展性高 3.复用性强 4.维护性好 5.代码冗余率低 了解了po模式及 ...

  2. Selenium系列(十四) - Web UI 自动化基础实战(1)

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  3. Selenium系列(十五) - Web UI 自动化基础实战(2)

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  4. Selenium系列(十六) - Web UI 自动化基础实战(3)

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  5. Selenium系列(十七) - Web UI 自动化基础实战(4)

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  6. Selenium系列(十八) - Web UI 自动化基础实战(5)

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  7. Selenium系列(十九) - Web UI 自动化基础实战(6)

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  8. Python Selenium 搭建Web UI自动化

    Python搭建UI自动化环境 下载Python3 Python官网 PyCharm 环境配置 安装Python 勾选Add Python to PATH,一直下一步. 验证:CMD输入Python ...

  9. Selenium Web 自动化 - 项目实战(三)

    Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述2 框架更改总览3 框架更改详解  3.1 解析新增页面目录  3.2 解析新增测试用例目录  3. ...

随机推荐

  1. Java实现 LeetCode 699 掉落的方块(线段树?)

    699. 掉落的方块 在无限长的数轴(即 x 轴)上,我们根据给定的顺序放置对应的正方形方块. 第 i 个掉落的方块(positions[i] = (left, side_length))是正方形,其 ...

  2. Java实现 LeetCode 589 N叉树的前序遍历(遍历树)

    589. N叉树的前序遍历 给定一个 N 叉树,返回其节点值的前序遍历. 例如,给定一个 3叉树 : 返回其前序遍历: [1,3,5,6,2,4]. 说明: 递归法很简单,你可以使用迭代法完成此题吗? ...

  3. install-package : 由于无法加载项目 mydemo 的详细信息,操作失败

    安装nuget package包提示错误 install-package : 由于无法加载项目 mydemo 的详细信息,操作失败 解决方法 项目用dotnet cli 命令dotnet new mv ...

  4. mysql基础-新版5.7.10源码安装-记录(一)

    0x01 MySQL 从 5.5 版本开始,通过 ./configure 进行编译配置方式已经被取消,取而代之的是 cmake 工具 引用一句话 cmake的重要特性之一是其独立于源码(out-of- ...

  5. 【asp.net core 系列】8 实战之 利用 EF Core 完成数据操作层的实现

    0. 前言 通过前两篇,我们创建了一个项目,并规定了一个基本的数据层访问接口.这一篇,我们将以EF Core为例演示一下数据层访问接口如何实现,以及实现中需要注意的地方. 1. 添加EF Core 先 ...

  6. 小菜成长之路,警惕沦为 API 调用侠

    小菜(化名)在某互联网公司担任运维工程师,负责公司后台业务的运维保障工作.由于自己编程经验不多,平时有不少工作需要开发协助. 听说 Python 很火,能快速开发一些运维脚本,小菜也加入 Python ...

  7. webdriver中的等待

    强制等待:sleep() 设置固定休眠时间,单位为秒. 由python的time包提供, 导入 time 包后就可以使用. 缺点:不智能,使用太多的sleep会影响脚本运行速度. 隐式等待:impli ...

  8. MySQL ORDER BY:对查询结果进行排序

    在 MySQL SELECT 语句中,ORDER BY 子句主要用来将结果集中的数据按照一定的顺序进行排序. 其语法格式为: ORDER BY {<列名> | <表达式> | ...

  9. 使用Python解密仿射密码

    新学期有一门密码学课,课上老师布置了一道密码学题,题目如下: 解密由仿射密码加密的密文“DBUHU SPANO SMPUS STMIU SBAKN OSMPU SS” 想解密这个密文,首先必须要知道仿 ...

  10. 前后端分离项目 nginx配置实践

    新项目采用前后端分离的方式开发,前后端代码打算分开部署(同机器且同域名),但打算支持后端依然可访问静态资源. 搜索nginx配置大部分都通过url前缀进行转发来做前后端分离,不适用目前项目. 说明 前 ...