导图社区 UI
UI设计是指对软件的人机交互、操作逻辑、界面美观的整体设计。好的UI设计不仅是让软件变得有个性有品位,还要让软件的操作变得舒适简单、自由,充分体现软件的定位和特点。
编辑于2022-09-21 14:38:51 浙江省在Python中,类的语法格式如下:class ClassName: 类的定义和其他语言一样,都是使用 class 关键字加类名(ClassName)来定义类。类名称第一个字母大写,名称后面可以带括号也可以不带括号。
在Python中,类的语法格式如下:class ClassName: 类的定义和其他语言一样,都是使用 class 关键字加类名(ClassName)来定义类。类名称第一个字母大写,名称后面可以带括号也可以不带括号。
UI设计是指对软件的人机交互、操作逻辑、界面美观的整体设计。好的UI设计不仅是让软件变得有个性有品位,还要让软件的操作变得舒适简单、自由,充分体现软件的定位和特点。
社区模板帮助中心,点此进入>>
在Python中,类的语法格式如下:class ClassName: 类的定义和其他语言一样,都是使用 class 关键字加类名(ClassName)来定义类。类名称第一个字母大写,名称后面可以带括号也可以不带括号。
在Python中,类的语法格式如下:class ClassName: 类的定义和其他语言一样,都是使用 class 关键字加类名(ClassName)来定义类。类名称第一个字母大写,名称后面可以带括号也可以不带括号。
UI设计是指对软件的人机交互、操作逻辑、界面美观的整体设计。好的UI设计不仅是让软件变得有个性有品位,还要让软件的操作变得舒适简单、自由,充分体现软件的定位和特点。
UI
元素定位
元素定位
id
driver.find_element(By.ID,“”)
name
driver.find_element(By.NAME,“name属性值”)
class
driver.find_element(By.CLASS_NAME,“class属性值”)
Tag_name
driver.find_element(By.TAG_NAME,“标签名”)
link_text
driver.find_element(By.LINK_TEXT,“链接文本”)
partial_link
driver.find_element(By.PARTIAL_LINK_TEXT,“链接文本”)
xpath
1、路径
绝对路径:/…/…/ 从根目录开始,逐级查找标签
相对路径://…//…从任意层级开始,查找标签。
2、属性
单属性://*[@属性名=’属性值’]
3、属性与逻辑
多属性://*[@属性名=’属性值’ and @属性名=’属性值’] 提示:可以使用任何属性
4、属性与层级
//父标签[@属性=‘值’]/子标签 :必须为直属后代子级。//父标签//后代标签:父标签和后代之间可以跨越元素
Css
id选择器:#id属性值
类选择器:.class属性值
标签选择器:标签名 (注意标签名是否在页面中唯一,否则返回单个或所有)
属性选择器:[属性名='属性值'] (标签任意属性都可以)
层级选择器:父子关系:选择器>选择器 后代关系:选择器 选择器。(选择器使用任何一种css选择器都可以)
元素操作
click()
点击元素
send_keys(value)
模拟输入
clear()
清空文本
获取元素信息
size
返回元素大小
text
获取元素文本
get_attribute("xxx")
获取元素属性值,传递的参数为元素的属性名
is_displayed()
判断元素是否可见
is_enabled()
判断元素是否可用
is_selected()
判断元素是否选中,用来检查复选框或者单选按钮是否被选中
浏览器操作
maximize_window()
最大化浏览器窗口
set_window_size(width,heighe)
设置浏览器窗口大小
set_window_position(x,y)
设置浏览器窗口位置
back()
后退
forward()
前进
refresh()
刷新
close()
关闭当前窗口
quit()
关闭当前浏览器驱动
title
获取页面title
可以做断言来使用
current_uel
获取当前页面url
可以做断言来使用
鼠标操作
实例化对象:
action = ActionChains(driver)
方法:
contest_click(element)
右击 -->鼠标右击
double_click(element)
左击双击 -->鼠标左击
drag_and_drop(source,target)
拖动 -->鼠标拖动
move_to_element(element)
悬停 -->鼠标悬停
perform()
执行 -->此方法来执行所有鼠标操作
键盘操作
导包
from selenium.webdriver.common.keys import Keys
键盘操作
send_Keys(Keys.BACK_SPACE
删除健(Backspace)
send_Keys(Keys.SPACE)
空格键(space)
send_Keys(Keys.TAB)
制表健(Tab)
send_Keys(Keys.ESCAPE)
回退健(Esc)
send_Keys(Keys.ENTER)
回车健(Enter)
send_Keys(Keys.CONTROL,'a')
全选健(Ctrl+A)
send_Keys(Keys.CONTROL,'c')
复制健(Ctrl+C)
等待
隐式等待
driver.implicitly_wait(timeout)
timeout:等待最大时常,单位:秒
显示等待
1、导包 等待类 --> from selenium.webdriver.support.wait import webDriverWait2、webDriverWait(driver,timeout,poll_ferquency=0.5 1).driver:浏览器驱动对象 2).timeout:超时的时长,单位:秒 3).poll_frequency:检测间隔时间,默认为0.5秒3、调用方法 until(method):直到...时 1).method:函数名称,该函数用来实现对元素的定位 2).一般使用匿名函数来时新:‘lambda x:x.find_element_by_id("userA")4、element = WedDriverWait(driver,10,1).until(lambda x:x.find_element_by_id("userA")
强制等待
sleep(4)
下拉框
select类
操作方法
1、select_by_indrx(indrx)
根据option索引来定位,从0开始
2、select_by_value(value)
根据option属性 value值来定位
3、select_by_visible_text(text)
根据option显示文本来定位
select类实例化步骤
1、导包Select类 --> from selenium.webdriver.support.select import Select2、实例化Select类 select = Select(driver.find_element_by_id("selectA")3、调用方法:select.select_by_index(index)
弹窗
系统弹窗
系统弹框的特征:没法右键获取元素的弹窗都是系统弹窗
常用的弹出框
1、alert 警告框
2、confirm 确认框
3、prompt 提示框
弹框处理方法
1、获取弹出框对象 alert = driver.switch.alert2、调出 alert.text -->返回alert/conform/prompt中的文字 alert.accept -->接收对话框选项 alert.dismiss -->取消对话框选项
自定义弹窗
自定义弹框说明:自定义弹窗可以通过获取元素信息,因此可以通过元素定位关闭弹框
滚动条
说明:selenium中没有直接提供操作滚动条的放大,但是它可以执行javaScript脚本的方法。所以我饿吗可以通过javaScript脚本来达到操作滚动条目的
1、设置javaScript脚本控制滚动条 js = "window.scrollTo(0,1000)" (o:左边距:1000:上边距:单位像素)2、selenium调用执行javaScript脚本的方法 driver.execute_script(js)
frame
frame切换方法
1)、driver.switch_to.frame(frame_reference) -->切换到指定的frame的方法 frame_reference:可以为frame框架的name、id或者定位到frame元素2)、driver.switch_to.default_content() -->恢复默认页面方法
多窗口切换
1)、driver.current_window_handle -->获取当前句柄2)、driver.window_handles -->获取所有窗口句柄3)、driver.switch_to.window(handle) -->切换指定句柄窗口
截图
driver.get_screenshot_as_file(imgpath) imgpath:图片保存路径
注意:1、指定路径需要先创建文件夹2、图片重名新的会替换老的,建议使用时间戳作为文件名
元素截图
.screenshot('./btn.png)
验证码
常用的处理方式
1)、去掉验证码 (测试环境下-采用)2)、设置万能码 (生产环境和测试环境下-采用)3)、验证码识别技术 (通过python-tesseract来识别图片类型验证码:识别率很难达到100%)4)、记录cookie (通过记录cookie进行跳过登录)
pyTest
说明:pyTest是python的一种单元测试框架,同时自带UnitTest测试框架类似,相比UnitTest框架使用起来更加简洁,效率更高。(在自动化测试中同样充满=当测试执行的功能!并且可以跟UnirTest互换)
安装步骤
安装
pip show pyTest
子主题 3
基本使用
3.2、类级别方法
class Testlogin: #测试类级别开始 def setup class(self): print("-------->setup_class")
4、配置文件
查看配置文件
终端输入:pytest --help找到:[pytest] ini-options in the first pytest.ini|tox.ini|setup.cfg file found:
注意事项:1、在Windows下,pytest 配置文件中,不允许写注视信息2、在一个工程只需要一个 pytest 配置文件,并且需要保证文件名正确3、一般情况下,只需要奖 pytest 配置文件,置于工程根目录下4、配置有 pytest 配置文件的工程,只需要打开命令行,输入 pytest指令,即可执行测试
使用步骤
默认设置
说明:测试用例文件名/测试类名/测试方法名均为 Test/test 开头
[pytest] #告知系统文件的例行testpaths = ./case #tsetpaths:指定测试用例存放位置addopts = -s #addopts:添加pytest命令选项python_files =test*py #python_files:指定测试脚本文件名前缀puthon_classes = Test* #python_classes:指定测试类名前缀python_functions = test* #python_functions:指定测试函数或测试方法名前缀
自定义规则
说明:测试用例文件名/测试类名/测试方法名根据具体项目进行设置,以下为Hm/hm为例
[pytest] #告知系统文件的例行testpaths = ./case #tsetpaths:指定测试用例存放位置addopts = -s #addopts:添加pytest命令选项python_files =hm*py #python_files:指定测试脚本文件名前缀puthon_classes = Hm* #python_classes:指定测试类名前缀python_functions = hm* #python_functions:指定测试函数或测试方法名前缀
指定单个文件/类/方法执行
[pytest]testpaths = ./caseaddopts = -spython_files = demo_case1.pyputhon_classes = Hm*python_functions = hm_method1
常用插件
pytest -html 测试报告
安装步骤
pip install pytest-html
pycharm安装
使用步骤
1、在 pytest 配置文件中,增加命令选项选项: --html=./报告路径/报告文件名.html --self-contained-html说明:--self-contained-html 将 CSS 文件内嵌到报告文件中2、执行 pytest 指令,运行测试即可
--html=./report/test_report.html/report:报告文件存放路径/test_report.html:报告文件名终端输入:pytest
插件报告合并CSS代码到文件中
1、在 ptytest 配置文件中,增加命令选项选
pytest 函数执行顺序
安装步骤
pip install pytest-ordering
pycharm安装
使用步骤
1、标记于被测试函数,@pytest.mark.run(order=x)2、根据order传入的参数来解决运行顺序3、order值全为正数或全为负数时,运行顺序:值越小,优先级越高4、正数和负数同时存在:正数优先级高
pytest 失败重试
安装步骤
pip install pytest-rerunfailures
pycharm安装
使用步骤
在配置文件中的命令行参数中增加 --reruns n
高级用法
跳过测试函数
方法名参数: condition:跳过的条件,必传参数 reason:标注原因,必传参数@pytest.mark.skipif(condition,reason=None)
使用方法在需要跳过的测试脚本之上加上装饰器 @pytest.mark.skipif(condition,reason="xxx")
参数化操作
方法名参数: argnames:参数名 argvalues:参数对应值,类型必须为可迭代类型,一般使用list@pytest.mark.parmetrize(argnames,argvalues,indirect=false,ids=Nona,scope=None
一个参数使用方法
1、argnames 为字符串类型,根据需求决定何时的参数名2、argnames 为列表类型,根据需求决定列表元素中的内容3、在测试简本中,参数,名字与 argnames 保持一致4、在测试脚本中正常使用
PO模式
代码封装
方法封装
方法封装:将一些共性或多次重复使用代码提取到一个方法中好处:避免代码冗余容易维护隐藏代码实现的细节
方法封装步骤:1、确定方法的存放位置:找位置2、给方法起一个合适的名字:起名字3、放入要封装的代码内容:放代码4、确认是否需要参数和返回值:确必要5、调用封装好的方法使用:做调用
PO设计模式
说明:PO 模式又可以叫 POM,是 UI 自动化测试中一个非常流行的设计模式(代码套路)核心:将元素定位及业务操作,拆分三个层面(每一个层面对应一个单独的类),然后通过调用完成最终的测试执行行为的过程一个页面可以分为三层,对象库层、操作层、业务层
对象库层:封装定位元素的方法操作层:封装对元素的操作业务层:讲一个或者多个操作组合起来完成一个业务功能。比如登录:需要输入账号、密码、点击登录三个操作。
PO页面元素封装步骤
1、对应页面创建 PO 代码文件,命名规则:——page.py,例如首页:index_page.py2、定义三个类:对象层(Xxxpage)/操作层(XxxHandle)/业务层(XxxTask)3、对象层: 1>init 方法张获取浏览器对象 2>自定义方法:封装元素定位方法 3>封装元素定位方法需要添加返回值!4、操作层 1>init 方法获取对象层对象,根据类名写对象变量名 2>自定义方法:封装元素定位方法5、业务层: 1>init 方法获取操作层对象,根据类名写对象变量名 2>自定义方法:封装测试业务逻辑6、在测试用例文件中,实例化业务对象。调用测试业务方法,执行测试