04 2020 档案

摘要:1.环境搭建前提 官方文档: https://github.com/openstf/stf openstf是一个手机设备管理平台, 核心就是远程 所有操作都可以在远程,手机不用数据线连接电脑,直接可以在同一个网段进行wifi连接,wifi连接主机后就可以远程管理控制手机 可以对手机进行远程管理、调试 阅读全文
posted @ 2020-04-26 13:05 zhaikunkun 阅读(2320) 评论(2) 推荐(0)
摘要:5.appium节点注册hub 1)开启一个节点:如果在该台设备上只是启动一个节点,使用命令: appium --nodeconfig appium_node.json 2)如果在设备上需要注册多个节点的时候,appium server开启的不止是4723一个端口,因此当默认开启一个端口后,开启另一 阅读全文
posted @ 2020-04-25 19:45 zhaikunkun 阅读(213) 评论(0) 推荐(0)
摘要:1.首先介绍下Selenium的工具集 如果被问到selenium是什么的时候,可以通过以下分析来回答 1)romote control早期1.0版本,通过server往浏览器注入js来让浏览器执行相应的操作 慢慢已经被废弃掉了 2)selenium WebDriver是一个协议,各浏览器根据协议来 阅读全文
posted @ 2020-04-25 18:03 zhaikunkun 阅读(637) 评论(0) 推荐(0)
摘要:5.之前提到脚本的编写,可以参考git文档中的demo 脚本代码如下: from selenium.webdriver import DesiredCapabilities from selenium.webdriver import Remote class TestGrid(): def tes 阅读全文
posted @ 2020-04-25 17:39 zhaikunkun 阅读(253) 评论(0) 推荐(0)
摘要:Selenium Grid是selenium的一个分布式,可以实现你的脚本在多台电脑上运行的效果 1.Selenium Grid远程运行selenium test 2.主旨是在多个机器上并行运行selenium 优点:所有测试的中心入口点(统一由hub来分配) 管理和控制浏览器运行的Nodes/环境 阅读全文
posted @ 2020-04-24 14:11 zhaikunkun 阅读(228) 评论(0) 推荐(0)
摘要:1.docker服务启动命令 sudo /bin/systemctl start docker.service 2.docker查看所有容器 docker ps -a 3.docker 查看运行中的容器:docker ps 4.重新启动容器:docker start 容器id 5.删除容器:先停止运 阅读全文
posted @ 2020-04-21 13:46 zhaikunkun 阅读(90) 评论(0) 推荐(0)
摘要:1.参数化应用场景 登录、搜索都可以归为一类,进行参数化,以雪球app为例进行实战: 打开雪球应用 点击搜索框 输入搜索词’京东’或者’小米“ 点击第一个搜索结果 判断股票价格 找到对应的股票代码下的股票价格元素(股票代码是唯一的,容易定位) 从一个元素的查找中找到共性:知道股票代码就可以定位到该股 阅读全文
posted @ 2020-04-20 21:13 zhaikunkun 阅读(518) 评论(0) 推荐(0)
摘要:1.get attribute原理分析 注意⚠️ attribute是一个元素的方法,只有通过元素才能调到,是元素的一些属性 appium源码: https://github.com/appium 可以看出appium是通过多个项目组成的,ios的driver,android的driver 查询进程 阅读全文
posted @ 2020-04-20 21:05 zhaikunkun 阅读(263) 评论(0) 推荐(0)
摘要:1.toast提示 在登录完成后会有一个登录成功的toast提示,一闪而过,只是给用户一个简单的提醒,又不过于强硬,不像是alert toast注意⚠️是系统发出来的,而不是app发出来的; 虽然一般不提倡用css进行定位,但是toast比较特殊,可以使用这种方式来定位 测试有apk在这里下载 ap 阅读全文
posted @ 2020-04-20 20:22 zhaikunkun 阅读(533) 评论(0) 推荐(0)
摘要:1.测试设备 adb shell start -n 要启动的页面:这样可以把你要启动的页面启动起来 start session是创建一个新的session 使用应用宝官网下载到电脑 安装应用:adb install -r xxx.apk 或者通过拖拽到模拟器中 多个模拟器或手机安装应用,使用以下命令 阅读全文
posted @ 2020-04-20 18:42 zhaikunkun 阅读(737) 评论(0) 推荐(0)
摘要:1.appium的设计理念 手机端、appium server端、程序脚本 2.appium引擎列表 3.appium生态工具 adb是anjoin debug bridge 安卓自带的工具,非常重要 重点掌握!!! from appium import webdriver就是导入了appium-p 阅读全文
posted @ 2020-04-20 18:33 zhaikunkun 阅读(154) 评论(0) 推荐(0)
摘要:一般产品的迭代流程如下: 而真实的后端服务 测试面临的问题 为什么要使用UI自动化,而不是接口及代码层面的自动化测试?因为前端后端测试都是需要的 appiumserver可以部署在任何地方 只要可以访问到就可以了 可以部署到服务器上或者自己电脑上 阅读全文
posted @ 2020-04-20 14:01 zhaikunkun 阅读(107) 评论(0) 推荐(0)
摘要:等待类型: 全局隐式等待:每隔0.5秒查找一次,在服务端的等待,在程序运行周期内生效 显式等待:在客户端的等待,只是在写了等待语句的地方才生效 隐式等待只能校验你的元素是否出现,但是无法校验可点击等属性 查看WebDriver源码可以看到 后面两个参数可以默认不填,poll_frequency=PO 阅读全文
posted @ 2020-04-20 13:53 zhaikunkun 阅读(362) 评论(0) 推荐(0)
摘要:1.使用xpath定位的时候 比如定位阿里巴巴的香港股票 lacator = (MobileBy.XPATH, "//*[@text=09988]/../../..//*[@resource-id='com.xueqiu.android:id/current_price']") 其中,可以讲0998 阅读全文
posted @ 2020-04-20 13:36 zhaikunkun 阅读(388) 评论(0) 推荐(0)
摘要:1.xpath定位进阶 层级定位 父节点定位子节点 子节点定位父节点 子节点定位兄弟节点 爷爷节点定位孙子节点 具体参考该网站: https://www.w3school.com.cn/xpath/index.asp 1.打开雪球app2.点击搜索输入框3.想搜索框中输入“aliababa”4.在搜 阅读全文
posted @ 2020-04-20 13:29 zhaikunkun 阅读(402) 评论(0) 推荐(0)
摘要:1. TouchAction的用法 参考官方文档: https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/touch-actions.md TouchAction The available event 阅读全文
posted @ 2020-04-20 13:16 zhaikunkun 阅读(457) 评论(0) 推荐(0)
摘要:1.元素的常用方法 1)点击:element.click() 2)输入操作:element.send_keys("appium") 3)设置元素的值:element.set_value("appium") 4)清除操作:element.clear() 5)是否可见:element.is_displa 阅读全文
posted @ 2020-04-20 13:06 zhaikunkun 阅读(271) 评论(0) 推荐(0)
摘要:1.对basepage模块的改造 1)封装查找元素方法 def find(self, by, locator=None): # *by意思是传递多个位置参数,如果传递的是一个元组的话,就用前面的,locator注意默认等于None return self.driver.find_elements(* 阅读全文
posted @ 2020-04-19 14:14 zhaikunkun 阅读(438) 评论(0) 推荐(0)
摘要:1.PageObject设计模式 传统测试用例的问题 1)无法适应UI变化,UI变化会导致大量的case需要修改 2)大量的样板代码driver find click 3)无法清晰的表达业务用例场景 PageObject模式原则 方法意义 用公用方法代表UI所提供的服务 方法应该返回其他的PageO 阅读全文
posted @ 2020-04-19 13:25 zhaikunkun 阅读(431) 评论(0) 推荐(0)
摘要:1.android/ios基础知识 1)线性结构:两种结构;水平的和竖直的,android开发中用的最多的一种布局结构 2)相对布局:比如通讯录,点击通讯录有联系人,联系人的头像和名字,首先要确定一个布局的位置,再确定第二个布局的位置、间距和大小 3)帧布局:也是用的最多的,先设置layout最底层 阅读全文
posted @ 2020-04-14 19:53 zhaikunkun 阅读(462) 评论(0) 推荐(0)
摘要:1.测试用例的重要部分 1)导入依赖 from appium import webdriver 2)capabilities设置 3)初始化driver: python webdriver.remote 4)隐式等待,增强用例的稳定性 5)元素定位与操作 find+action 6)断言assert 阅读全文
posted @ 2020-04-14 19:42 zhaikunkun 阅读(206) 评论(0) 推荐(0)
摘要:1.daemon not running; starting now at tcp:5037 环境:macos系统问题:打开网易MUMU模拟器,终端输入adb devices,提示如下ZBMAC-C02N43Mfc:~ zhaitiantian$ adb devices daemon not run 阅读全文
posted @ 2020-04-13 21:55 zhaikunkun 阅读(1030) 评论(0) 推荐(0)
摘要:1.Android自动化前提依赖 1)genimotion和sdk自带模拟器可以创建不同版本和不同镜像 2)网易mumu只针对6.0版本的改造 2.Apppium Desktop主要功能 UI分析: 有哪些界面,有哪些层级结构 录制用例: 可以生成不同语言的脚本 元素查找测试 Attach已有的se 阅读全文
posted @ 2020-04-13 11:21 zhaikunkun 阅读(279) 评论(0) 推荐(0)
摘要:1.事务四项基本原则,推荐该博主的文章: https://www.cnblogs.com/techflow/p/12147933.html 2.索引 索引是根据特定字段去加速这个字段的查询速度,但是一般除了创建的时候DDL用,其他比如查询的时候基本上是透明的 3.DDL存储了 所有关于表结构的定义, 阅读全文
posted @ 2020-04-11 10:00 zhaikunkun 阅读(370) 评论(0) 推荐(0)
摘要:PO模式 po其实就是封装的概念 优点:清晰稳定 页面发生变化的时候,只需要改变细节就好了,对外暴露接口其实是没有变的 六大原则: 1.公共方法应该对应页面提供的服务 2.不要暴露过多页面细节 3.断言不要放在pageobject中,混在一起写会引起混乱,页面改动的时候容易混乱;让断言去调封装的细节 阅读全文
posted @ 2020-04-09 20:31 zhaikunkun 阅读(319) 评论(0) 推荐(0)
摘要:7)cnpm安装appium-doctor检查appium安装环境 另外还可以用npm安装,如果报错permission denies 布拉布拉,可以参考该方案:https://stackoverflow.com/questions/46058546/error-eacces-permission- 阅读全文
posted @ 2020-04-08 17:51 zhaikunkun 阅读(121) 评论(0) 推荐(0)
摘要:1.appium生态工具 2.环境安装 都是针对以上三个:客户端、server端以及手机端安装的环境 要想支持手机端需要安装JDK sdk 要想完成客户端的安装,需要安装appium client 要想完成server端的安装需要安装nodejs和appium sever、appium-deskto 阅读全文
posted @ 2020-04-08 17:33 zhaikunkun 阅读(108) 评论(0) 推荐(0)
摘要:1.目前mobile自动化解决方案 android 开源的,所以工具种类较ios多 自动化工具的选择 混合应用 原生里面套了网页 2.appium介绍 3.appium框架介绍 appium环境安装(appium由nodejs开发的,因此要安装相应的运行环境 ) 阅读全文
posted @ 2020-04-08 17:01 zhaikunkun 阅读(284) 评论(0) 推荐(0)
摘要:1.代码如下:问题,运行login.py,输出两次func函数 login.py from decrator import authicate def checkuser_logged_in(re): if re == "1": return True elif re == "2": return 阅读全文
posted @ 2020-04-08 11:04 zhaikunkun 阅读(163) 评论(0) 推荐(0)
摘要:1.max = x > y ? x : y 不是python的语法,这一点特别容易混淆;python三元运算符的使用如下: a if x>y else b 2.random.random()生成0和1之间的随机浮点数float 3.假设可以不考虑计算机运行资源(如内存)的限制,以下 python3 阅读全文
posted @ 2020-04-06 21:44 zhaikunkun 阅读(2090) 评论(0) 推荐(0)
摘要:Linux系统中使用以下命令来查看文件的内容: cat 由第一行开始显示文件内容 tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写! nl 显示的时候,顺道输出行号! more 一页一页的显示文件内容 less 与 more 类似,但是比 more 更好的是,他可以往前翻页! he 阅读全文
posted @ 2020-04-06 15:52 zhaikunkun 阅读(521) 评论(0) 推荐(0)
摘要:相比于列表和元组,字典的性能更优,特别是对于查找、添加和删除操作,字典都能在常数时间复杂度内完成。 而集合和字典基本相同,唯一的区别,就是集合没有键和值的配对,是一系列无序的、唯一的元素组合。 1.字典和集合的创建 d1 = {'name': 'jason', 'age': 20, 'gender' 阅读全文
posted @ 2020-04-04 20:46 zhaikunkun 阅读(243) 评论(0) 推荐(0)
摘要:1.想创建一个空的列表,我们可以用下面的 A、B 两种方式,请问它们在效率上有什么区别吗?我们应该优先考虑使用哪种呢?可以说说你的理由 # 创建空列表 # option A empty_list = list() # option B empty_list = [] 区别主要在于list()是一个f 阅读全文
posted @ 2020-04-04 20:06 zhaikunkun 阅读(600) 评论(0) 推荐(0)
摘要:1.列表和元祖 1)列表和元组,都是一个可以放置任意数据类型的有序集合 在绝大多数编程语言中,集合的数据类型必须一致。不过,对于 Python 的列表和元组来说,并无此要求 2)两者区别: 列表是动态的,长度大小不固定,可以随意地增加、删减或者改变元素(mutable) 而元组是静态的,长度大小固定 阅读全文
posted @ 2020-04-04 20:02 zhaikunkun 阅读(299) 评论(0) 推荐(0)
摘要:1.定位了元素没有做下一步操作,比如,点击、输入等功能,而报错,报错信息如下: 2.上传图片时,定位元素,应该定位input标签,点击页面input标签肉眼没有看到定位到任何元素,以为无法成功,实际上只要有input标签被定位到是都可以上传图片的! 3.定义页面基础类时,初始化webdiver,传参 阅读全文
posted @ 2020-04-03 23:18 zhaikunkun 阅读(917) 评论(0) 推荐(0)
摘要:1.当可以定位到input标签的时候 2.当定位不到input标签的时候 可以使用selenium之外的方法,目前不知道是否是最优解,但是这种可以实现,实现方法代码如下: from pykeyboard import PyKeyboard def upload_picture(self, file) 阅读全文
posted @ 2020-04-03 13:32 zhaikunkun 阅读(1109) 评论(0) 推荐(0)
摘要:1.使用selenium直接在当前页面中进行js交互 JS的处理 2.常用几种操作使用js实现 js'代码、如何调用js(使用execute_script()),如何返回? document.title:获取页面标题 window.alert("hello hi”):获取一个页面弹窗 JSON.st 阅读全文
posted @ 2020-04-02 19:37 zhaikunkun 阅读(1331) 评论(0) 推荐(0)
摘要:问题: 1.针对多窗口切换处理 1)点击某些链接,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了。 2)获取窗口的唯一标识用句柄表示,所以只需要切换句柄,就可以在多个页面灵活操作了。 多窗口处理流程 1)先获取到当前的窗口句柄(self.driver.current_windo 阅读全文
posted @ 2020-04-02 12:55 zhaikunkun 阅读(839) 评论(0) 推荐(1)
摘要:1.多浏览器处理目的: 创建一个 Base类,来存放公共的方法,比如浏览器的选择 2.那如何支持多平台运行? 封装浏览器引擎,根据操作系统(linux、Mac系统、windows系统),判断driver的路径 阅读全文
posted @ 2020-04-02 12:46 zhaikunkun 阅读(869) 评论(0) 推荐(1)
摘要:1.TouchAction 类似于ActionChains,但是ActionChains只针对PC端程序程序模拟一系列操作,对H5页面操作无效,而TouchAction可以! 完成滑动的时候给它一个尽量比较大的坐标值 2. 表单操作 阅读全文
posted @ 2020-04-02 12:41 zhaikunkun 阅读(119) 评论(0) 推荐(0)
摘要:我们以企业微信为例,进行实战 1.首页pageObject 1)立即注册 点击立即注册 return立即注册pageObject 2)企业登陆 点击企业登陆 return企业登陆pageObject 2.登陆pageObject 1)扫码 用手机扫描二维码 2)立即注册 点击立即注册 return 阅读全文
posted @ 2020-04-01 16:08 zhaikunkun 阅读(213) 评论(0) 推荐(0)
摘要:1.什么是po模式 举个例子:有一页面,想要将a元素改成b元素, 如果页面元素变了,那么断言也要跟着变的话,就要改两处代码,操作非常令人困扰,传统设计模式下如下图: ——> 我们将案例抽象化,就是po模式: po模式的核心: 1)对外只提供方法,不提供操作细节,当页面元素变动的时候只需要改变操作细节 阅读全文
posted @ 2020-04-01 14:15 zhaikunkun 阅读(151) 评论(0) 推荐(0)
摘要:1.这里需要设置一下环境变量 环境变量地址一般是在/Applications/Google Chrome.app/Contents/MacOS路径下,如下图所示: 2.经该路径添加至环境变量:vi ~/.bash_profile export PATH=/Applications/Google\ C 阅读全文
posted @ 2020-04-01 08:52 zhaikunkun 阅读(4039) 评论(0) 推荐(0)