该部分记录测试页面1-IndexPage,所有首页上的元素定位、操作、获取属性等方法都写在该类中。

1 首页类继承自BasePage

2 首页类第一部分写的是所有的定位器

3 首页类第二部分类的方法,包括提取页面元素,页面元素的操作、获取属性、验证元素属性正确性等

4 当用例中需要用到该页面的某元素或操作时,补充方法到该类中,再在用例中调用

5 函数名:open打头的表示 打开页面,get_表示获取页面元素或属性,check_表示验证页面数据是否一致,choose_表示元素选择,click_点击。

6 clicklink_read_strategy() 函数点击按钮之后会跳转到页面2。需将driver返回用于创建页面2对象。

#coding:utf-8
"""
首页
LOCATOR : 所有页面元素的定位器
首页页面元素的定位和操作均写在该类中
""" from .basepage import BasePage
from selenium.webdriver.common.by import By
import logging;logging.basicConfig(level=logging.INFO) class IndexPage(BasePage):
"""
首页类
"""
#LOCATOR
_stylelist_LOCATOR = (By.CSS_SELECTOR, "#styleList li[data-style]")
_current_LOCATOR = (By.CSS_SELECTOR,"#styleList .current")
_latestInfoList_LOCATOR = (By.CSS_SELECTOR, "ul#latestInfoList>li")
_mystyle_name__LOCATOR = (By.ID, "myStyle_name_")
_mystyle_name_LOCATOR = (By.ID, "myStyle_name")
_style_desc_LCOATOR = (By.CLASS_NAME, "style-desc")
_myStyle_remark_LOCATOR = (By.ID, "myStyle_remark")
_read_strategy_LOCATOR = (By.CLASS_NAME, "read-strategy")
_style_desc_item_LOCATOR = (By.CLASS_NAME, "style-desc-item")
_profit_percent_LOCATOR = (By.CLASS_NAME, "profit-percent")
_style_name_LOCATOR = (By.CLASS_NAME,"style-name")
_style_description_LOCATOR = (By.CLASS_NAME, "style-description") def open_index_page(self,sso):
"""打开首页""" domain = "http://测试域名"
indexurl = '/index'
url = domain+ indexurl + '?' + sso
self.openpage(url)
self.getscreenshot("Indexpage打开页面") def get_styleList(self):
"""获取策略风格列表"""
styleList = self.getelements(*IndexPage._stylelist_LOCATOR) #策略列表
return styleList def get_current_style(self):
"""获取当前策略信息"""
current = self.getelement(*IndexPage._current_LOCATOR) #当前策略
self.current_style = current.get_attribute("data-style") #当前策略类型
self.current_name = current.text #当前策略名称 def choose_style(self,styleindex):
"""选择index = styleindex的策略风格"""
stylelist = self.get_styleList() #获取策略列表
try:
style = stylelist[styleindex]
self.select_style = style.get_attribute("data-style") # 选择的策略类型
self.select_name = style.text #选择的策略名称
style.click() #点击策略
self.wait(1)
self.getscreenshot("Indexpage策略信息")
self.get_current_style() #选择之后获取策略信息
except Exception as msg:
print(msg) def check_SelectEqCurrent(self):
"""验证选择的风格与显示的风格是否一致"""
if self.select_name == self.current_name and self.select_style == self.current_style:
return True def get_level_info_list(self):
"""获取右侧显示的策略信息列表"""
level_desc_items = self.getelements(*IndexPage._style_desc_item_LOCATOR) #取所有的策略详情
level_info_list = [item for item in level_desc_items if item.is_displayed()] #取页面显示的策略详情
return level_info_list def get_level_info(self,levelindex):
"""获取策略信息"""
levellist = self.get_level_info_list()
try:
level = levellist[levelindex] #获取策略信息
percentM3 = self.getchild(level,*IndexPage._profit_percent_LOCATOR)
name = self.getchild(level,*IndexPage._style_name_LOCATOR)
description = self.getchild(level,*IndexPage._style_description_LOCATOR)
read_strategy = self.getchild(level,*IndexPage._read_strategy_LOCATOR) self.percentM3 = float(percentM3.text[:-1])#获取3个月收益
self.name = name.text #策略名称
self.description = description.text #策略描述
self.read_strategy = read_strategy
self.data_code = self.read_strategy.get_attribute("data-code") # 策略代码
except Exception as msg:
print(msg) def get_mystyle(self):
"""获取我的风格"""
self.wait(0.5)
myStyle_nameele = self.getelement(*IndexPage._mystyle_name_LOCATOR)
self.myStyle_name = myStyle_nameele.text[1:-1] #我的风格 style_desc = self.getelement(*IndexPage._style_desc_LCOATOR)
self.movetoelement(style_desc) #移动鼠标至问号图标
myStyle_intips = self.getelement_wait_presence(*IndexPage._mystyle_name__LOCATOR)#等元素显示时识别
self.getscreenshot("Indexpage气泡")
self.myStylename_intips = myStyle_intips.text[:-1]
self.mystyle_remark = self.getelement(*IndexPage._myStyle_remark_LOCATOR).text #tip里的风格说明 def check_mystyle(self):
"""验证风险等级页面和tip是否一致"""
self.get_mystyle()
logging.info("用户类型:{0},tips里的用户类型:{1}".format(self.myStyle_name,self.myStylename_intips))
if self.myStyle_name == self.myStylename_intips and self.myStyle_name in self.mystyle_remark:
return True def check_default_ismystyle(self):
"""验证默认策略与用户风险等级匹配"""
self.refresh() #刷新,自动更新到用户匹配的等级
self.wait(1)
self.get_current_style()
self.get_mystyle()
logging.info("当前策略:{0},用户风格:{1}".format(self.current_name,self.myStyle_name))
if self.current_name == self.myStyle_name:
return True def clicklink_read_strategy(self,levelindex=0):
"""点击查看策略"""
self.get_level_info(levelindex) #选页面显示的第levelindex个策略
self.read_strategy.click() #点击查看策略
self.wait(1)
self.getscreenshot("Indexpage点击查看策略跳转到策略")
return self.driver,self.data_code #跳转到了策略页面

the end!

python UI自动化实战记录四:测试页面1-pageobject的更多相关文章

  1. python UI自动化实战记录七:页面2用例编写

    使用python自带的unittest测试框架,用例继承自unittest.TestCase类. 1 引入接口类和页面类 2 setUp函数中打开页面,定义接口对象 3 tearDown函数中关闭页面 ...

  2. python UI自动化实战记录六:页面1用例编写

    使用python自带的unittest测试框架,用例继承自unittest.TestCase类. 1 引入接口类和页面类 2 setUp函数中打开页面,定义接口对象 3 tearDown函数中关闭页面 ...

  3. python UI自动化实战记录五:测试页面2 pageobject

    该部分记录测试页面2-StrategyPage,所有页面2上的元素定位.操作.获取属性等方法都写在该类中. 1 页面2继承自BasePage: 2 页面2第一部分写的是所有的定位器 3 页面2第二部分 ...

  4. python UI自动化实战记录三:pageobject-基类

    脚本思路: 使用pageobject模式,写一个basepage基类,所有页面的通用方法封装到基类中.比如打开页面,关闭页面,等待时间,鼠标移到元素上,获取单个元素,获取一组元素,获取元素的子元素,截 ...

  5. python UI自动化实战记录十一: 总结

    首先说说为什么想起来用自动化脚本来实现该项目的自动化. 工作还是以手工测试为主,业务驱动型的项目大概就是这样,业务不停地变,不断的迭代. 自动化测试实施的先决条件: 一 得有时间. 如果有时间大部分的 ...

  6. python UI自动化实战记录一:测试需求与测试思路

    测试需求: 项目包含两个数据展示页面,数据均来自于四个数据源接口. 测试操作步骤: 选择5个大类型中的一个,每个大类型下有3个子类型,选择任一子类型,页面数据更新.需验证页面上的数据与数据源接口数据一 ...

  7. python UI自动化实战记录十:执行测试及测试报告

    使用简单的unittest.TextTestRunner. 思路: 1 在report目录下创建当日测试报告目录 20190113 2 创建测试报告文件 f = 时间戳.txt 3 加载测试集,运行测 ...

  8. python UI自动化实战记录二:请求接口数据并提取数据

    该部分记录如何获取预期结果-接口响应数据,分成两步: 1 获取数据源接口数据 2 提取后续页面对比中要用到的数据 并且为了便于后续调用,将接口相关的都封装到ProjectApi类中. 新建python ...

  9. python UI自动化实战记录八:添加配置

    添加配置文件写入测试地址等,当环境切换时只需修改配置文件即可. 1 在项目目录下添加文件 config.ini 写入: [Domain] domain = http://test.domain.cn ...

随机推荐

  1. Node.js中http-server的使用

    Node.js中http-server的使用 使用阿里的npm镜像 国外的npm太慢了.查看一下自己使用的源: npm config get registry 应该显示https://registry ...

  2. 腾讯云AI平台张文杰:构建一站式机器学习服务平台

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 5月24日,以"无界数据无限智能"为主题的腾讯"云+未来"峰会AI大数据分论坛在广州拉开帷幕.此次分 ...

  3. 有标号的DAG计数 III

    Description 给定一正整数n,对n个点有标号的有向无环图进行计数,这里加一个限制:此图必须是弱连通图.输出答案 mod 10007 的结果. Solution 弱连通图即把边变成无向之后成为 ...

  4. 查找正序排列的List中缺失的日期数据的一个算法

    Code: public List<DateTime> getMissDateData() { DateTime[] keys = { DateTime.Now.AddDays(-5), ...

  5. Centos 下搭建FTP上传下载服务器

    首先判断你服务器上是否安装了vsftpd 安装vsftpd #yum -y install vsftpd   安装完成之后就要重启vsftpd服务 到vsftpd的主配置文件里面 把这个改为NO 默认 ...

  6. Nexus-NuGet私有仓库服务搭建(一)

    搭建私有Nuget服务器的方式有很多,大多数人文章介绍在vs 中新建默认web项目,然后再Nuget 中安装 Nuget.Server,再部署到IIS 中即可.虽然能用,但是这种方式太过简陋,操作界面 ...

  7. smarty assign 赋值

    assign赋值 void assign (mixed var) void assign (string varname, mixed var) This is used to assign valu ...

  8. Windbg 脚本命令简介 一

    Windbg  脚本命令简介 一 Windbg command r: registers的简写,可以显示或修改寄存器的值.浮点寄存器的值.定义别名变量. 可以显示当前线程下的寄存器值. The r c ...

  9. 各种常用的JSON接口

    这里为大家搜集了一些能够返回JSON格式的服务接口.部分需要用JSONP调用. 其中一些接口提供用例参照:http://www.bejson.com/webInterface.php 天气接口 气象局 ...

  10. JavaScript 递归法排列组合二维数组

    <html> <head> <title>二维数组排列组合</title> </head> <body> <div id= ...