element

你会吗?Python+Appium实现自动化测试

∥☆過路亽.° 提交于 2020-08-10 20:06:12
一、环境准备 1 .脚本语言:Python3.x IDE:安装P ycharm 2.安装Java JDK 、Android SDK 3.adb环境,path添加E:\Software\Android_SDK\platform-tools 4.安装Appium for windows,官网地址 http://appium.io/ 点击下载按钮会到GitHub的下载页面,选择对应平台下载 安装完成后,启动Appium,host和port默认的即可,然后设置Android SDk和Java JDK 然后点下边那个保存并重启的按钮,然后点第一个Start Server按钮,将会看到 加入我们,642830685,群,领取免费的福利,大厂面试资料,自动化接口、框架搭建等资料 二、真机测试 1.连接手机 打开开发者模式,USB线连接手机和电脑,并且在开发者选项当中,开启USB调试 测试是否连接成功,可执行命令adb devices 出现上图就证明手机和电脑连接成功。。。 2. 点击Start Inspector Session, 按如下配置Desired Capabilities platformName:声明是ios还是Android系统 platformVersion: Android内核版本号,可通过命令adb shell getprop ro.build.version

Python+Selenium练习篇之11-获取页面元素大小/组合键-全选文字

做~自己de王妃 提交于 2020-08-10 18:27:48
获取页面元素大小 本文介绍如何通过Selenium方法去获取页面元素的大小。这个场景是可能在需要测试的,例如在前端测试过程中,需要去测试某一个控件是否和设计大小保持一致。 这里用百度首页的“百度一下”这个按钮举例,打印出这个按钮的大小。 相关脚本代码如下: # coding=utf-8 import time from selenium import webdriver driver = webdriver.Firefox() driver.maximize_window() driver.implicitly_wait( 6 ) driver.get( " https://www.baidu.com/ " ) time.sleep( 1 ) search_btn = driver.find_element_by_id( ' su ' ) print (search_btn.size) 测试结果: {'width': 100.0, 'height': 36.0} 组合键-全选文字 Selenium中Keys模块下的一些组合,或快捷键的使用。前面的一篇文章,介绍了如何新开一个tab,也是用到这块的知识。 本文介绍全选当前页面文字,快捷键是 Ctrl+a,主要还是用send_keys()方法输入组合键,这里用百度首页举例。 ( 海量免费学习资料, 软件测试交流:1140267353,

定时打印jmap-jvm内存趋势

我只是一个虾纸丫 提交于 2020-08-10 18:24:19
目前有的那些jvm工具,界面都太难看了,严重影响我的调bug心情 所以我打算直接用jmap来看内存中都有什么东西 但是为什么不直接看gc日志中的Full GC频率呢 因为这个东西跟jvm内存分配和内存大小有关系,而我关心的是内存积存趋势 比如说,举个极端的例子,jvm内存很小,那么肯定每时每刻都在Full GC 但是你的代码真的这么差吗,不一定 但是如果条件很好,jvm内存设定的很大,那么几个月内都不会很频繁的Full GC 但是你的代码真的这么好吗,也不一定 所以归根结底要看内存中的对象是不是一直在累积增长 那么jmap就是个不错的东西 1 2 3 4 5 6 7 8 9 10 我们知道jmap打印的东西,jmap -histo pid是这个样的: 又臭又长 而且下面的都是内存中只有几个的,没有价值 所以我打算只取前9行,jmap -histo pid | head -12 但是总不能手动输出这个东西,所以我打算用crontab来定时打印它 #!/bin/bash step=5 #间隔的秒数,不能大于60 echo "get in loop" for (( i = 0; i < 55; i=(i+step) )); do echo "in loop" oldifs="$IFS" IFS=$'\n' for lines in `jmap -histo 2866 | head -12

appium---封装定位(2)

ぃ、小莉子 提交于 2020-08-10 17:39:33
  前面已经写过一个封装定位了,但是可能在yaml中书写的时候过于繁琐,以及如果代码基础较差的同学,也没有办法进行编写测试用例。就重新进行封装一次定位 页面元素写入yaml 上一篇写的yaml可能有点杂乱,这次我们换个写法 把一个页面上元素编写上去,这里没有写验证码的操作了。 # appium.yaml LoginPage: dec: 登录 locators: - name: 用户名 type : id value: com .taobao.taobao :id / aliuser_login_mobile_et - name: 密码 type : android value: resourceId ("com.taobao.taobao:id/aliuser_register_sms_code_et") - name: 登录按钮 type : className value: android .widget.Button 我们可以进行通过yaml读取,如果猜的没错的话,肯定是列表包含字典形式。 # read_yaml.py import yaml import os class GetYaml(): def __init__ (self,file_path): # 判断文件是否存在 if os.path.exists(file_path): self.file_path =

Web自动化测试:POM设计模式的实现

霸气de小男生 提交于 2020-08-10 16:55:58
关于pom设计模式(project Object model/PageObject),一种底层、逻辑、用例的分层,在项目还没有开发出来时,就可以开始写UI自动化脚本了,在开发完成后,再进行元素定位的适配以及调试;而且也可以多人共同维护开发脚本,更方便大家合作。 这一节主要来介绍一下如何从零开始搭建这几个层级。 一、driver层的封装 这一层主要是对于webdriver方法的封装,这里来举一个栗子,最常用的定位方法,之前讲过统一定位方法的三种传参格式:webdriver的所有定位方法,使用find_element()方法通过BY类、字符串、元组三种方法传递定位类型和数据,这里我使用元组的形式(例如locator = ("id","name_box"))来传递参数。 1.1 定位元素方法封装示例 这个定位元素的公共方法中,加了很多东西;如果每次定位的时候写这些异常捕获、打印操作的话,那么程序会非常臃肿,所以需要单独提出来,每次需要定位的时候统一调用这个方法。 有一个入参locator,格式为("定位类型","定位参数值"),返回我们所定位到的元素 加入了元素等待,并判断该元素是否存在 对于关键信息的打印输出,方便定位监控 加入了异常捕获,定位失败后可以继续执行程序 def find_element(self, *locator): try: print("定位元素:%s" %

一篇文章搞定Selenium元素定位/封装/数据驱动

社会主义新天地 提交于 2020-08-10 16:48:48
小伙伴都知道,自动化最重的,又最“难”(因为实战中会碰到定位的各种坑)那就是定位元素。如果不熟练掌握定位,那只怕你比功能测式的小伙伴下班还会要晚!扎心了吧! Selenium常用定位方式   我们在做WEB自动化时,最根本的就是操作页面上的元素,首先我们要能找到这些元素,然后才能操作这些元素。工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素。那么我们怎么来定位他们呢? 来坑了!经常有开发人员,没有写元素的id,或者name,你要打开发吗?哈哈, 请一定熟练掌握xpath定位或css定位!!!否则你自动化寸步难行!! Selenium之iframe定位   在 web 应用中经常会出现 iframe 嵌套的应用,假设网站是一栋房子,那么iframe则是房子中的某一个房间,如果你要从房间里拿到东西,那么必须要新进入房间,才能拿到相应的内容。 selenium提供了switch_to.frame()的方法来进入iframe这个房间 selenium提供switch_to_default_content()的方法来退出iframe这个房间 以163邮箱的网站为例,要求:输入用户名和密码,点击登录 网址:https://mail.163.com/ 重点:在iframe操作完,一定要释放该元素。 (简单理解就是说,我要从这个房间出去后才能去其它地方) Selenium之列表定位

5G相关专业名词解释

你。 提交于 2020-08-10 16:41:14
3GPP的提案的时候的一些关于5G中的英文缩写解释 NR (New Radio,新空口):通过电磁波来承载所需要发送的信息的一系列规范 BLER (blockerror rate)误块率 CB (codeblock) 码块 CCE 是ControlChannel Element的缩写,每个CCE由9个REG组成,之所以定义相对于REG较大的CCE,是为了用于数据量相对较大的PDCCH的资源分配。每个用户的PDCCH只能占用1,2,4,8个CCE,称为聚合级别。 CP (Cyclic Prefix)中文可译为循环前缀,它包含的是OFDM符号的尾部重复,CP主要用来对抗实际环境中的多径干扰,不加CP的话由于多径导致的时延扩展会影响子载波之间的正交性,造成符号间干扰。 DTX (DiscontinuousTransmission不连续发送)预留资源:定时检测 gNB 5G基站 MCS (Modulation and Coding Scheme,调制与编码策略) NCP (Normal CP(Cyclic Prefix,循环前缀) PDCCH (PhysicalDownlink Control Channel,物理下行控制信道) PUSCH (Physical Uplink Shared Channel --物理上行共享信道) RB (ResourceBlock) 资源块

.NET Core Web APi大文件分片上传研究

我是研究僧i 提交于 2020-08-10 15:53:15
前言 前两天发表利用FormData进行文件上传,然后有人问要是大文件几个G上传怎么搞,常见的不就是分片再搞下断点续传,动动手差不多也能搞出来,只不过要深入的话,考虑的东西还是很多。由于断点续传之前写个几篇,这里试试利用FormData来进行分片上传。 .NET Core Web APi文件分片上传 这里我们依然是使用FormData来上传,只不过在上传之前对文件进行分片处理,如下HTML代码 < div class ="form-horizontal" style ="margin-top:80px;" > < div class ="form-group" > < div class ="col-md-10" > < input name ="file" id ="file" type ="file" /> </ div > </ div > < div class ="form-group" > < div class ="col-md-offset-2 col-md-10" > < input type ="submit" id ="submit" value ="上传" class ="btn btn-success" /> </ div > </ div > </ div > 接下来则是上传脚本,如下: $( function () { $( '#submit')

彻底弄懂Spring中Bean的解析、创建和使用

淺唱寂寞╮ 提交于 2020-08-10 09:38:23
Spring加载Bean、实例化Bean、获取Bean流程 本文旨在通过分析源码的方式,来剖析Spring加载Bean、实例化Bean、获取Bean的流程,部分核心内容会在源码中说明。内容比较枯燥,慎入! 第一步,启动一个Spring项目 Spring启动入口 从 官方文档 中我们可以获取到下面这种Spring的启动方式。 我们传入一个test.xml文件 ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/spring/test.xml"); xml文件内容 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <bean id="stringutil" class="com

Web自动化测试:模拟键盘事件(Keys)

邮差的信 提交于 2020-08-10 09:36:53
如何使用引入的common.keys库来模拟键盘来操控浏览器 一、基础写法 具体用法其实和我们之前对浏览器输入框所用的方法:send_keys()是一样的,只不过我们通过keys类,可以输入webdriver包中对应的键盘操作。 首先导入keys库 from selenium.webdriver.common.keys import Keys 输入单个键盘按键: 小键盘按键3:send_keys(Keys.NUMPAD3) 输入多次的同一个按键 按10次小键盘按键3:send_keys(Keys.NUMPAD3*10) 输入组合按键: 全选Ctrl+A: send_keys(Keys.CONTROL, "a") 二、键盘按键引用对照 我们通过keys类中,找到了键盘按键所对应的值: NULL = '\ue000' CANCEL = '\ue001' # ^break HELP = '\ue002' BACKSPACE = '\ue003' BACK_SPACE = BACKSPACE TAB = '\ue004' CLEAR = '\ue005' RETURN = '\ue006' ENTER = '\ue007' SHIFT = '\ue008' LEFT_SHIFT = SHIFT CONTROL = '\ue009' LEFT_CONTROL = CONTROL ALT =