自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 收藏
  • 关注

原创 《非暴力沟通》- 使人情意相通的沟通方式

本书作者马歇尔·卢森堡博士在促进人类和谐共处方面做出过突出成就,2006年他获得了地球村基金会颁发的和平之桥奖。卢森堡博士早年师从心理学大师卡尔·罗杰斯,后来他发展出极具启发性和影响力的非暴力沟通的原则和方法,不仅教会人们如何使个人生活更加和谐美好,同时解决了众多世界范围内的冲突和争端。中心思想非暴力沟通强调用爱去体会自己或他人的感受和需求,四个要素是观察、感受、需要、请求。非暴力沟通的目的不是让人掌握谈话技巧,在谈话之中让自己立于不败之地;作者希望通过这种沟通方式使人与人之间建立友善、和平、美好的

2021-06-22 15:25:08 418

原创 appium - 参数化用例

from time import sleepimport pytestfrom appium import webdriverfrom appium.webdriver.common.mobileby import MobileByfrom hamcrest import *class TestDW: def setup(self): desired_caps = { "platformName": "Android",

2021-05-22 07:22:57 198

原创 appium - get_attribute & Hamcres

get atrribute原理分析官方文档:http://appium.io/docs/en/commands/element/attributes/attribute/官网没有详细说明,可通过android studio查看源码源码从github上搜索appium,在utils里示例search_ele = self.driver.find_element_by_id("com.xueqiu.android:id/tv_search")print(search_ele.get_attrib

2021-05-17 16:07:10 181

原创 appium - toast定位

toast定位toast是个系统级别的控件,当app发送消息时不是自己弹出toast,而是发给系统,由系统统一弹框,这类控件不在app内,需要特殊的控件识别方法appium使用uiautomator底层的机制来分析抓取toast,并把toast放到控件树里,但本身并不属于控件工作引擎使用的是 uiautomator2必须使用xpath查找1.//*[@class='android.widget.Toast'],一般不用class定位,但toast比较特殊,在页面中只出现一次2.//*[cont

2021-05-17 15:22:12 443 1

原创 appium - 三种等待

强制等待sleep(sec)不推荐,但调试或不得不使用时强制等待时可使用隐式等待driver.implicitly_wait(sec)隐式等待时长设置为3-6s,不宜太长显示等待WebDriverWait(self.driver,10).until(expected_conditions.visibility_of_element_located(locator))一般页面元素的呈现1.首先,title2.其次,dom(隐式等待判断元素是否已出现在dom树里,但无法判断其属性是

2021-05-17 14:44:00 136

原创 appium - xpath定位

xpath语法https://www.runoob.com/xpath/xpath-syntax.htmlxpath层级定位父节点定位子节点子节点定位父节点(/..)子节点定位兄弟节点爷爷节点定位孙子节点案例定位股票xpath //*[@resource-id='com.xueqiu.android:id/title_container']/android.widget.TextView[2]/..定位0988股票的价格//*[@text='09988']/../../.

2021-05-11 14:36:58 289

原创 appium - 触屏滑动

TouchAction官方文档:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/touch-actions.md案例from time import sleepfrom appium import webdriverfrom appium.webdriver.common.touch_action import TouchActionclass TestTouchAction:

2021-05-11 13:57:39 167

原创 appium - app控件交互

元素的常用方法element.click()element.send_key("")element.set_value("") 设置元素的值element.clear() 清除element.is_displayed() 是否可见element.is_enabled() 是否可用element.is_selected() 是否被选中get_attribute(name) 获取属性值元素的常用属性element.text 获取元素文本element.location

2021-04-18 08:44:05 350

原创 appium - app控件定位

android布局android 是通过布局来管理控件的位置关系,布局过程是把控件根据间距大小摆放在正确的位置LinearLayout(线性布局)(水平和垂直,用的最多)RelativeLayout(相对布局)(先确定A控件布局的位置,再根据间距确定B控件布局的位置)RrameLayout(帧布局)(最低层的布局,其他布局在此布局基础上再进行布局,用的最多)AbsoluteLayout(绝对布局)(根据绝对坐标布局,很少用,兼容不好)TableLayout(表格布局)(将页面的文字、图片放在

2021-04-15 13:11:01 502

原创 appium - adb常用命令

命令描述adb devices查看设备名称adb connect 127.0.0.1:7555连接设备adb logcat | grep -i displayedadb shell dumpsys activity top获取当前页面元素adb shell dumpsys windowgrep mCurrentadb shell dumpsys activity activitiesaapt dump badging mobike.apk...

2021-04-14 18:55:07 139

原创 appium - Capability设置

官方文档https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md常用配置字段描述值app安装包地址/abs/path/to/my.apk or http://myapp.com/app.ipaappPackage安卓应用java包名com.example.android.myApp, com.android.settingsappActivity安卓

2021-04-12 17:55:00 135

原创 《早起的奇迹》(死过一次的人生赢家)

作者《早起的奇迹》作者哈尔·埃尔罗德(Hal Elrod),美国人。哈尔·埃尔罗德15岁拥有一档个人电台节目;20岁成为市值2亿美元公司的*销售员;20岁出车祸,“临床死亡”6分钟,奇迹生还,重回公司,在6万名销售人员中业绩位列第6;28岁经历金融危机,负债287万,一度患上抑郁症;29岁开发“神奇的早起”计划,网络疯传,成为人生教练,赴全球各大高校演讲;33岁出版《早起的奇迹》,连续5年占据英文亚马逊畅销榜首。本书的中心思想本书的中心思想,强调早起的重要性:能够改变人生,能够带来健康、财富,能够让

2021-04-07 13:03:13 1111 2

原创 Appium环境安装

appium生态工具adb:android的控制工具,用于获取android的各种数据和控制Appium Desktop:内嵌了appium server和inspector的综合工具Appium Server:appium的核心工具,命令行工具Appium client:各种语言的客户端封装库,用于连接appium serverAppCrawler自动遍历工具环境安装安装java1.8下载地址:https://www.oracle.com/cn/java/technologies/

2021-04-01 17:47:50 113 1

原创 selenium 使用cookies

自动化测试经常会遇到扫码登录的场景,我们可以使用cookie实现不用扫码直接登录。实现思路先手动扫码登录 ,将登录后的cookies保存到本地文件中执行自动化用例时,从本地文件中获取cookies,遍历cookies,将失效时间expires从cookies中剔除示例import jsonfrom selenium import webdriverclass TestCookies: def setup(self): self.driver = webdrive

2021-03-19 16:59:41 278

原创 selenium 复用已打开的浏览器

命令行开启chrome debug模式:chrome -remote-debugging-port=9222注:开启调试模式前,需关闭所有浏览器代码page/base_page.pyfrom selenium import webdriverfrom selenium.webdriver.remote.webdriver import WebDriverclass BasePage: _base_url = "" def __init__(self, driver: Web

2021-03-19 14:41:15 522

原创 pageobject设计模式

PageObject发展历史2013年,Martin Fowler,https://martinfowler.com/bliki/PageObject.html2015年,Selenium,https://github.com/SeleniumHQ/selenium/wiki/PageObjectsPageObject核心思想把操作细节封装成方法,对外只提供操作方法,不提供细节只封装重要操作细节,不封装每个操作细节导航到另一个页面,导航方法应返回另一个页面对象(A页面对象调用链接方法跳转到

2021-03-19 11:23:37 76 2

原创 selenium 弹框处理机制

页面操作中有时会遇到alert、confirm、prompt弹框,可以使用switch_to.alert()方法定位;然后使用text、accept、dismiss、send_keys等方法进行操作操作alert常用方法switch_to.alert():获取当前页面上的警告框text:返回alert/confirm/prompt中文字信息accept():接受现有警告框dismiss():解散现有警告框send_keys(“警告”):发送文本至警告框示例from time import s

2021-03-15 15:03:11 92

原创 selenium 文件上传

input标签可以直接用send_keys上传文件示例from time import sleepfrom selenium import webdriverclass TestUpFile(): def setup(self): self.driver = webdriver.Chrome() self.driver.implicitly_wait(5) self.driver.maximize_window() # def te

2021-03-12 11:43:35 72

原创 selenium js处理时间控件

大部分的时间控件属性是readonly,自动化测试中要给时间控件赋值,先要用js取消时间控件的readonly属性,再给value赋值,最后用webdriver对js进行处理示例from time import sleepfrom selenium import webdriverclass TestJS(): def setup(self): self.driver = webdriver.Chrome() self.driver.implicitly_w

2021-03-11 18:24:26 261

原创 selenium 执行JavaScript脚本

selenium 能执行js,这使得selenium拥有更为强大的能力。直接使用js操作页面,能够解决很多click()不生效的问题;还可以使用js操作页面滚动底部、顶部,处理富文本、时间空间等。selenium调用jsselenium内置execute_script()方法,可通过此方法调用jsdriver.execute_script('window.alert("selenium弹框")')driver.exccute_script('a = document.getElementById("

2021-03-10 18:06:22 867

原创 selenium 多浏览器操作

多浏览器兼容性测试,通过传入的参数不同,唤起不同的浏览器示例from selenium import webdriverimport osclass TestBrowsers: browser = "chrome" def setup(self): # browser = os.getenv("browser") if self.browser == "chrome": self.driver = webdriver.Chr

2021-03-10 17:08:32 226

原创 selenium frame处理

frame介绍frame是HTML中的框架,可以使同一个浏览器显示多个页面。frame示例1<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> </head><body><iframe src="demo_iframe.htm" marginheight="50">

2021-03-10 16:35:04 157

原创 selenium web多窗口处理

多窗口处理点击某些链接,会新打开一个窗口,若想在新窗口上操作,就得先切换窗口。句柄是获取窗口的唯一标识,所以只需切换句柄,就可以切换窗口了。多窗口处理流程先获取当前的窗口句柄(driver.current_window_handle)再获取多有的窗口句柄(driver.window_handles)判断是否是想要操作的窗口,若是则对窗口操作;若不是则跳转(driver.switch_to_window)示例from selenium import webdriverfrom time i

2021-03-08 15:30:14 429

原创 selenium web表单操作

表单定义表单是使用<form>定义的区域,例如<form><input /></form>;表单元素是允许用户在表单中(如文本域、下拉列表、单选框、复选框等)输入信息的元素示例from time import sleepfrom selenium import webdriverclass TestForm(): def setup(self): self.driver = webdriver.Chrome()

2021-01-22 21:04:14 167 1

原创 selenium web控件交互(TouchAction)

官方文档:https://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.touch_actionsTouchActionActionChains是模拟鼠标操作,执行PC端的鼠标点击、双击、右键、拖拽等事件;TouchAction是模拟人的手指在屏幕上操作,执行PC和移动端的点击、滑动、拖拽、多点触控等多种手势操作序号方法说明1tap单击2double_tap双击

2021-01-06 13:37:05 519 3

原创 selenium web控件交互(ActionChains)

官方文档:https://selenium-python.readthedocs.io/api.htmlActionChains执行PC端的鼠标点击、双击、右键、拖拽等事件调用ActionChains的方法时,不会立即执行,而是将所有的操作,按顺序存放到一个队列中,当调用perform()方法时,队列中的事件会依次执行链式写法:ActionChains(driver).move_to_element(element).click(element).perform()分步写法:actions

2021-01-04 11:58:47 214

原创 selenium web元素定位

xpath定位定义XML Path Language,XML路径语言,用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。XPath定位比较慢,原因是XPath是从头到尾遍历。语法表达式语法/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。/bookstor

2020-12-09 18:42:52 87

原创 selenium的3种等待

selenium有3种等待,即直接等待、隐式等待、显式等待。直接等待直接等待即强制等待,强制线程休眠一段时间(此种等待尽量不要用)示例:time.sleep(3)隐式等待作用于全局的find_element;设置一个等待时间,默认每隔0.5秒轮询查找元素是否出现,如果在设置的等待时间内元素仍未出现,就抛出异常示例:self.driver.implicitly_wait(3)显示等待在代码中定义等待条件,当条件发生时才继续执行代码程序默认每隔0.5秒进行一次条件判断,如果条件成立,则执行下

2020-12-03 17:57:43 303

原创 selenium介绍与安装

官网:https://www.selenium.devSelenium的组成Selenium Webdriver:提供接口驱动浏览器Selenium IDE:chrome、firefox的插件,可录制浏览器上的操作Selenium Grid:支持分布式,同时在多个浏览器上执行selenium运行原理我们用python、java等语言编写脚本,通过selenium将脚本发送给浏览器的驱动程序Driver,不同的浏览器有不同的Driver,Driver和浏览器进行交互。安装selenium(py

2020-11-11 14:29:02 207 1

原创 pytest自定义插件

参考资料https://docs.pytest.org/en/latest/plugins.html(Installing and Using plugins)https://docs.pytest.org/en/latest/writing_plugins.html#writing-plugins(Writing plugins)https://docs.pytest.org/en/latest/_modules/_pytest/hookspec.html(Source code for _pyte

2020-11-10 14:35:39 716

原创 mitmproxy常用功能(二)

map localresponse.py"""Send a reply from the proxy without sending any data to the remote server."""from mitmproxy import httpdef request(flow: http.HTTPFlow) -> None: if flow.request.pretty_url == "http://example.com/path": with open("

2020-11-10 12:26:30 245

原创 jmeter压测脚本编写与运行

线程组资源调度池,控制性能测试运行调度、并发数、执行策略线程组分类:setUp Thread Group,Thread Group,tearDown Thread Group添加线程组:右键TestPlan - Add - Threads(users)- Thread GroupThread Group 下的几个关键设置:1 Number of Threads(users):设置线程数2 Ramp-up period:设置启动所有线程需要的时间3 Loop Count:设置每个线程循环次数

2020-10-23 17:00:13 1877

原创 scrcpy(android手机投屏神器)

企业培训或客户演示,需要把手机屏幕投射在电脑上,scrcpy完美解决了这一问题,以下以windows为例,讲解下scrcpy的安装及使用安装adb1 下载:http://tools.android-studio.org/index.php/sdk,下载压缩包即可2 升级:解压后,在readme里找到升级命令,并执行tools\android.bat update sdk --no-ui3 配置环境变量:ANDROID_HOME D:\Programs\android-sdk-windows;P

2020-10-20 15:43:56 811

原创 charles常用功能(三)

弱网模拟 Map Remote通过Map Remote功能,我们可以把接口重定向,比如我们想用线上的app验证测试环境新上线的接口 Map Local把请求重定向到本地文件,先把请求的response保存一份到本地 再把请求重定向到本地文件 Rewrite非交互式修改请求和响应,当请求到指定接口时,自动将请求和响应修改为已经设置好的值 Breakpoints右键Breakpoint edit request

2020-10-13 16:00:13 181

原创 charles设置代理与抓包(二)

设置代理方式一:把Charles设置成系统代理 方式二:只抓取Chrome的请求。首先,设置Charles的代理端口;其次,设置Chrome的代理(用SwitchyOmega去设置,端口要和charles设置的相同)   抓取web端的https请求 Proxy -> SSL Proxying Settings -> add * Chrome访问chls.pro/ssl,下载证书;Chrome -&g

2020-10-13 15:22:44 2739

原创 pytest+allure生成测试报告

官方文档http://allure.qatools.ru/https://docs.qameta.io/allure/#Allure框架介绍灵活的、轻量级的测试报告工具支持多平台:windows、mac、linux支持多语言:java、python、PHP、ruby提供详尽的测试报告、测试步骤、日志可与jenkins集成安装windows:https://github.com/allure-framework/allure2/releases下载allure2.7.zip包解

2020-10-11 21:11:41 1267 3

原创 hamcrest断言

python自带assert可实现简单断言,但遇到复杂断言assert就不能支持了。而hamcrest能够很好的支持复杂断言,下面举例说明。GitHub地址:https://github.com/hamcrest/PyHamcrest示例from hamcrest import *def test_hamcrest(): the_string = 'Hello Hamcrest' my_string = 'Hello Hamcrest' assert_that(the_s

2020-10-10 15:27:14 515

原创 pytest配置文件

简介pytest.ini是pytest的配置文件,一般放在根目录,且不能有中文。通过配置文件,可以改变pytest的运行方式。pytest --help[pytest] ini-options in the first pytest.ini|tox.ini|setup.cfg file found: markers (linelist): markers for test functions empty_parameter_set_mark (string):

2020-10-10 15:22:51 246

原创 pytest常用插件

pytest-rerunfailures失败重试插件pip install pytest-rerunfailures注:1 不要与setup_class一起使用2 一个测试用例上面不要有多个装饰器3 Python要3.5以上版本,pytest要5.0以上版本import pytestdef test_div(): assert 1 == 2==================# 命令行执行以下命令(失败重复执行5次,每次延迟1秒)pytest --reruns 5 --rer

2020-10-09 17:57:17 426

原创 pytest.fixture

fixture的作用fixture在测试函数前后运行,代码可以定制,满足多变的测试需求功能包括:定义传入测试中的数据集、配置测试前系统的初始状态、为批量测试提供数据源等fixture是pytest把在测试前后做预备和清理工作的代码,分离出核心逻辑的一种机制使用场景用例1需要登录,用例2不需要登录,用例3需要登录,这种场景无法通过setup、teardown实现;要想实现此场景,就用到fixture了使用方法调用fixture函数的两种方式:1 把函数当做参数传入 2 用usefixtures

2020-10-07 08:43:01 204

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除